From ca291f3cbfab38b908d75e0acdb94d9e905f68e5 Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 13:48:01 +0800 Subject: [PATCH 1/7] feat: deliver node network devtools v2 --- .github/workflows/nightly.yml | 80 + .github/workflows/npm-publish.yml | 60 +- .github/workflows/quality.yml | 34 + .github/workflows/reusable-quality.yml | 299 + README-zh_CN.md | 137 +- README.md | 150 +- apps/web/docs/get-started.md | 43 +- apps/web/docs/options.md | 180 +- apps/web/docs/zh/get-started.md | 42 +- apps/web/docs/zh/options.md | 181 +- docs/v2-implementation-plan.md | 397 + docs/v2-migration.md | 146 + package.json | 9 +- packages/network-debugger/LICENSE | 21 + packages/network-debugger/README.md | 268 +- packages/network-debugger/package.json | 48 +- .../src/adapters/legacy/index.test.ts | 34 + .../src/adapters/legacy/index.ts | 195 + .../adapters/node-native/capability.test.ts | 123 + .../src/adapters/node-native/capability.ts | 159 + .../src/adapters/node-native/errors.ts | 31 + .../src/adapters/node-native/index.test.ts | 234 + .../src/adapters/node-native/index.ts | 251 + .../node-native/inspector-target.test.ts | 95 + .../adapters/node-native/inspector-target.ts | 159 + .../src/adapters/selector.test.ts | 479 + .../network-debugger/src/adapters/selector.ts | 350 + .../network-debugger/src/adapters/types.ts | 81 + .../network-debugger/src/cli/args.test.ts | 98 + packages/network-debugger/src/cli/args.ts | 348 + packages/network-debugger/src/cli/bin.ts | 6 + packages/network-debugger/src/cli/dev.test.ts | 358 + packages/network-debugger/src/cli/dev.ts | 328 + packages/network-debugger/src/cli/errors.ts | 27 + packages/network-debugger/src/cli/help.ts | 31 + packages/network-debugger/src/cli/index.ts | 5 + .../network-debugger/src/cli/main.test.ts | 176 + packages/network-debugger/src/cli/main.ts | 100 + packages/network-debugger/src/common.test.ts | 168 +- packages/network-debugger/src/common.ts | 179 +- .../network-debugger/src/config/errors.ts | 17 + packages/network-debugger/src/config/index.ts | 11 + .../src/config/loader.test.ts | 176 + .../network-debugger/src/config/loader.ts | 511 + .../src/config/preload-config.test.ts | 41 + .../src/config/preload-config.ts | 60 + packages/network-debugger/src/config/types.ts | 84 + .../src/core/capture-scope.ts | 12 + .../network-debugger/src/core/fetch.test.ts | 971 +- packages/network-debugger/src/core/fetch.ts | 413 +- .../network-debugger/src/core/fork.test.ts | 816 +- packages/network-debugger/src/core/fork.ts | 432 +- .../network-debugger/src/core/index.test.ts | 797 +- packages/network-debugger/src/core/index.ts | 88 +- .../network-debugger/src/core/request.test.ts | 1449 +- packages/network-debugger/src/core/request.ts | 577 +- packages/network-debugger/src/core/undici.ts | 16 +- .../src/core/ws/extension.test.ts | 31 + .../network-debugger/src/core/ws/extension.ts | 98 + .../src/core/ws/permessage-deflate.test.ts | 32 + .../src/core/ws/permessage-deflate.ts | 103 +- .../src/diagnostics/doctor.test.ts | 195 + .../src/diagnostics/doctor.ts | 335 + .../src/diagnostics/format.ts | 33 + .../network-debugger/src/diagnostics/index.ts | 2 + .../src/fork/devtool/index.test.ts | 792 +- .../src/fork/devtool/index.ts | 798 +- .../network-debugger/src/fork/devtool/type.ts | 52 +- packages/network-debugger/src/fork/fork.ts | 64 +- .../src/fork/module/common.ts | 26 +- .../src/fork/module/debugger/index.test.ts | 424 +- .../src/fork/module/debugger/index.ts | 23 +- .../src/fork/module/health/index.test.ts | 213 - .../src/fork/module/health/index.ts | 13 - .../network-debugger/src/fork/module/index.ts | 3 +- .../src/fork/module/network/index.test.ts | 1428 +- .../src/fork/module/network/index.ts | 507 +- .../src/fork/module/websocket/index.test.ts | 55 +- .../src/fork/module/websocket/index.ts | 62 +- .../src/fork/pipe/body-transformer.ts | 30 +- .../src/fork/request-center.test.ts | 619 +- .../src/fork/request-center.ts | 232 +- .../src/fork/resource-service.test.ts | 955 +- .../src/fork/resource-service.ts | 148 +- .../src/legacy-bridge/client.test.ts | 497 + .../src/legacy-bridge/client.ts | 722 + .../src/legacy-bridge/contracts.ts | 105 + .../src/legacy-bridge/host.test.ts | 138 + .../src/legacy-bridge/host.ts | 142 + .../src/legacy-bridge/index.ts | 3 + .../network-debugger/src/mock/index.test.ts | 109 + packages/network-debugger/src/mock/index.ts | 329 + .../src/preload/index.test.ts | 123 + .../network-debugger/src/preload/index.ts | 119 + .../src/preload/register.test.ts | 39 + .../network-debugger/src/preload/register.ts | 29 + .../network-debugger/src/replay/index.test.ts | 175 + packages/network-debugger/src/replay/index.ts | 260 + packages/network-debugger/src/replay/types.ts | 44 + .../src/runtime/controller.ts | 376 + .../src/runtime/registration.test.ts | 127 + .../src/runtime/registration.ts | 166 + .../network-debugger/src/session/files.ts | 60 + .../network-debugger/src/session/har.test.ts | 245 + packages/network-debugger/src/session/har.ts | 207 + .../network-debugger/src/session/index.ts | 37 + .../src/session/protocol-tap.test.ts | 217 + .../src/session/protocol-tap.ts | 479 + .../src/session/recorder.integration.test.ts | 137 + .../src/session/recorder.test.ts | 281 + .../network-debugger/src/session/recorder.ts | 379 + .../src/session/trace.test.ts | 42 + .../network-debugger/src/session/trace.ts | 41 + .../network-debugger/src/session/types.ts | 226 + .../src/target/frontend-launcher.test.ts | 56 + .../src/target/frontend-launcher.ts | 16 + .../network-debugger/src/utils/file.test.ts | 244 - packages/network-debugger/src/utils/file.ts | 7 - packages/network-debugger/src/utils/map.ts | 15 +- .../test/e2e/cli/cli.test.mjs | 540 + .../test/e2e/cli/fixtures/finite-legacy.cjs | 12 + .../e2e/cli/fixtures/frontend-cdp-runner.mjs | 48 + .../e2e/cli/fixtures/frontend-open-hook.cjs | 43 + .../test/e2e/cli/fixtures/probe-core.cjs | 53 + .../test/e2e/cli/fixtures/probe.cjs | 10 + .../test/e2e/cli/fixtures/probe.mjs | 9 + .../test/e2e/cli/fixtures/probe.ts | 53 + .../test/e2e/cli/fixtures/watch-entry.mjs | 29 + .../network-debugger/test/e2e/cli/harness.mjs | 365 + .../test/e2e/enhancements/README.md | 28 + .../e2e/enhancements/enhancements-harness.mjs | 318 + .../e2e/enhancements/enhancements.test.mjs | 272 + .../e2e/enhancements/fixtures/consumer.mjs | 202 + .../fixtures/native-mock-conflict.mjs | 28 + .../enhancements/fixtures/origin-server.mjs | 124 + .../test/e2e/fixtures/native-target.mjs | 159 + .../test/e2e/fixtures/origin-server.mjs | 82 + .../test/e2e/frontend/README.md | 76 + .../test/e2e/frontend/chromium-devtools.mjs | 485 + .../e2e/frontend/legacy-frontend.spec.mjs | 153 + .../e2e/frontend/native-frontend.spec.mjs | 86 + .../test/e2e/frontend/playwright.config.mjs | 20 + .../test/e2e/harness/cdp-client.mjs | 262 + .../test/e2e/harness/native-harness.mjs | 420 + .../test/e2e/legacy/README.md | 20 + .../test/e2e/legacy/fixtures/consumer.cjs | 31 + .../test/e2e/legacy/fixtures/consumer.mjs | 26 + .../e2e/legacy/fixtures/origin-server.mjs | 234 + .../e2e/legacy/fixtures/scenario-runner.cjs | 296 + .../test/e2e/legacy/legacy-harness.mjs | 441 + .../test/e2e/legacy/legacy-protocol.test.mjs | 623 + .../test/e2e/native-protocol.test.mjs | 260 + .../test/e2e/os-smoke/adapter-smoke.test.mjs | 110 + .../test/e2e/pack/legacy-runtime-consumer.cjs | 71 + .../test/e2e/pack/legacy-runtime.test.mjs | 443 + .../test/e2e/pack/native-runtime-consumer.cjs | 87 + .../test/e2e/pack/native-runtime.test.mjs | 379 + .../test/e2e/pack/pack-consumer.test.mjs | 102 + .../test/e2e/pack/packed-package.mjs | 105 + packages/network-debugger/vite.config.ts | 15 +- .../network-debugger/vite.preload.config.ts | 34 + pnpm-lock.yaml | 10906 ++++++++++++---- 162 files changed, 32939 insertions(+), 11167 deletions(-) create mode 100644 .github/workflows/nightly.yml create mode 100644 .github/workflows/quality.yml create mode 100644 .github/workflows/reusable-quality.yml create mode 100644 docs/v2-implementation-plan.md create mode 100644 docs/v2-migration.md create mode 100644 packages/network-debugger/LICENSE create mode 100644 packages/network-debugger/src/adapters/legacy/index.test.ts create mode 100644 packages/network-debugger/src/adapters/legacy/index.ts create mode 100644 packages/network-debugger/src/adapters/node-native/capability.test.ts create mode 100644 packages/network-debugger/src/adapters/node-native/capability.ts create mode 100644 packages/network-debugger/src/adapters/node-native/errors.ts create mode 100644 packages/network-debugger/src/adapters/node-native/index.test.ts create mode 100644 packages/network-debugger/src/adapters/node-native/index.ts create mode 100644 packages/network-debugger/src/adapters/node-native/inspector-target.test.ts create mode 100644 packages/network-debugger/src/adapters/node-native/inspector-target.ts create mode 100644 packages/network-debugger/src/adapters/selector.test.ts create mode 100644 packages/network-debugger/src/adapters/selector.ts create mode 100644 packages/network-debugger/src/adapters/types.ts create mode 100644 packages/network-debugger/src/cli/args.test.ts create mode 100644 packages/network-debugger/src/cli/args.ts create mode 100644 packages/network-debugger/src/cli/bin.ts create mode 100644 packages/network-debugger/src/cli/dev.test.ts create mode 100644 packages/network-debugger/src/cli/dev.ts create mode 100644 packages/network-debugger/src/cli/errors.ts create mode 100644 packages/network-debugger/src/cli/help.ts create mode 100644 packages/network-debugger/src/cli/index.ts create mode 100644 packages/network-debugger/src/cli/main.test.ts create mode 100644 packages/network-debugger/src/cli/main.ts create mode 100644 packages/network-debugger/src/config/errors.ts create mode 100644 packages/network-debugger/src/config/index.ts create mode 100644 packages/network-debugger/src/config/loader.test.ts create mode 100644 packages/network-debugger/src/config/loader.ts create mode 100644 packages/network-debugger/src/config/preload-config.test.ts create mode 100644 packages/network-debugger/src/config/preload-config.ts create mode 100644 packages/network-debugger/src/config/types.ts create mode 100644 packages/network-debugger/src/core/capture-scope.ts create mode 100644 packages/network-debugger/src/core/ws/extension.test.ts create mode 100644 packages/network-debugger/src/core/ws/extension.ts create mode 100644 packages/network-debugger/src/diagnostics/doctor.test.ts create mode 100644 packages/network-debugger/src/diagnostics/doctor.ts create mode 100644 packages/network-debugger/src/diagnostics/format.ts create mode 100644 packages/network-debugger/src/diagnostics/index.ts delete mode 100644 packages/network-debugger/src/fork/module/health/index.test.ts delete mode 100644 packages/network-debugger/src/fork/module/health/index.ts create mode 100644 packages/network-debugger/src/legacy-bridge/client.test.ts create mode 100644 packages/network-debugger/src/legacy-bridge/client.ts create mode 100644 packages/network-debugger/src/legacy-bridge/contracts.ts create mode 100644 packages/network-debugger/src/legacy-bridge/host.test.ts create mode 100644 packages/network-debugger/src/legacy-bridge/host.ts create mode 100644 packages/network-debugger/src/legacy-bridge/index.ts create mode 100644 packages/network-debugger/src/mock/index.test.ts create mode 100644 packages/network-debugger/src/mock/index.ts create mode 100644 packages/network-debugger/src/preload/index.test.ts create mode 100644 packages/network-debugger/src/preload/index.ts create mode 100644 packages/network-debugger/src/preload/register.test.ts create mode 100644 packages/network-debugger/src/preload/register.ts create mode 100644 packages/network-debugger/src/replay/index.test.ts create mode 100644 packages/network-debugger/src/replay/index.ts create mode 100644 packages/network-debugger/src/replay/types.ts create mode 100644 packages/network-debugger/src/runtime/controller.ts create mode 100644 packages/network-debugger/src/runtime/registration.test.ts create mode 100644 packages/network-debugger/src/runtime/registration.ts create mode 100644 packages/network-debugger/src/session/files.ts create mode 100644 packages/network-debugger/src/session/har.test.ts create mode 100644 packages/network-debugger/src/session/har.ts create mode 100644 packages/network-debugger/src/session/index.ts create mode 100644 packages/network-debugger/src/session/protocol-tap.test.ts create mode 100644 packages/network-debugger/src/session/protocol-tap.ts create mode 100644 packages/network-debugger/src/session/recorder.integration.test.ts create mode 100644 packages/network-debugger/src/session/recorder.test.ts create mode 100644 packages/network-debugger/src/session/recorder.ts create mode 100644 packages/network-debugger/src/session/trace.test.ts create mode 100644 packages/network-debugger/src/session/trace.ts create mode 100644 packages/network-debugger/src/session/types.ts create mode 100644 packages/network-debugger/src/target/frontend-launcher.test.ts create mode 100644 packages/network-debugger/src/target/frontend-launcher.ts delete mode 100644 packages/network-debugger/src/utils/file.test.ts delete mode 100644 packages/network-debugger/src/utils/file.ts create mode 100644 packages/network-debugger/test/e2e/cli/cli.test.mjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/finite-legacy.cjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/frontend-cdp-runner.mjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/frontend-open-hook.cjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/probe-core.cjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/probe.cjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/probe.mjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/probe.ts create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/watch-entry.mjs create mode 100644 packages/network-debugger/test/e2e/cli/harness.mjs create mode 100644 packages/network-debugger/test/e2e/enhancements/README.md create mode 100644 packages/network-debugger/test/e2e/enhancements/enhancements-harness.mjs create mode 100644 packages/network-debugger/test/e2e/enhancements/enhancements.test.mjs create mode 100644 packages/network-debugger/test/e2e/enhancements/fixtures/consumer.mjs create mode 100644 packages/network-debugger/test/e2e/enhancements/fixtures/native-mock-conflict.mjs create mode 100644 packages/network-debugger/test/e2e/enhancements/fixtures/origin-server.mjs create mode 100644 packages/network-debugger/test/e2e/fixtures/native-target.mjs create mode 100644 packages/network-debugger/test/e2e/fixtures/origin-server.mjs create mode 100644 packages/network-debugger/test/e2e/frontend/README.md create mode 100644 packages/network-debugger/test/e2e/frontend/chromium-devtools.mjs create mode 100644 packages/network-debugger/test/e2e/frontend/legacy-frontend.spec.mjs create mode 100644 packages/network-debugger/test/e2e/frontend/native-frontend.spec.mjs create mode 100644 packages/network-debugger/test/e2e/frontend/playwright.config.mjs create mode 100644 packages/network-debugger/test/e2e/harness/cdp-client.mjs create mode 100644 packages/network-debugger/test/e2e/harness/native-harness.mjs create mode 100644 packages/network-debugger/test/e2e/legacy/README.md create mode 100644 packages/network-debugger/test/e2e/legacy/fixtures/consumer.cjs create mode 100644 packages/network-debugger/test/e2e/legacy/fixtures/consumer.mjs create mode 100644 packages/network-debugger/test/e2e/legacy/fixtures/origin-server.mjs create mode 100644 packages/network-debugger/test/e2e/legacy/fixtures/scenario-runner.cjs create mode 100644 packages/network-debugger/test/e2e/legacy/legacy-harness.mjs create mode 100644 packages/network-debugger/test/e2e/legacy/legacy-protocol.test.mjs create mode 100644 packages/network-debugger/test/e2e/native-protocol.test.mjs create mode 100644 packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs create mode 100644 packages/network-debugger/test/e2e/pack/legacy-runtime-consumer.cjs create mode 100644 packages/network-debugger/test/e2e/pack/legacy-runtime.test.mjs create mode 100644 packages/network-debugger/test/e2e/pack/native-runtime-consumer.cjs create mode 100644 packages/network-debugger/test/e2e/pack/native-runtime.test.mjs create mode 100644 packages/network-debugger/test/e2e/pack/pack-consumer.test.mjs create mode 100644 packages/network-debugger/test/e2e/pack/packed-package.mjs create mode 100644 packages/network-debugger/vite.preload.config.ts diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000..ecb242a --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,80 @@ +name: Nightly compatibility + +on: + schedule: + - cron: '17 18 * * *' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: nightly-compatibility + cancel-in-progress: false + +# The reusable gate supplies the complete Ubuntu runtime matrix. These jobs add +# Windows/macOS across every declared runtime. As of 2026-08-28, Node 18/20 are +# EOL compatibility lines; 22/24 are LTS and 26 is Current. Evidence: +# https://github.com/nodejs/Release#release-schedule +jobs: + quality: + name: Reusable Ubuntu quality matrix + uses: ./.github/workflows/reusable-quality.yml + permissions: + contents: read + + legacy-os-runtime: + name: Legacy / ${{ matrix.os }} / Node ${{ matrix.node }} + needs: quality + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + os: [windows-latest, macos-latest] + node: [18.18.0, 20, 22, 24, 26] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.quality.outputs.package_artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Run the node:test Legacy controller against the exact tarball + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + HTTP_PROXY: '' + HTTPS_PROXY: '' + ALL_PROXY: '' + NO_PROXY: 127.0.0.1,localhost + run: node --test packages/network-debugger/test/e2e/pack/legacy-runtime.test.mjs + + native-os-runtime: + name: Native / ${{ matrix.os }} / Node ${{ matrix.node }} + needs: quality + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + os: [windows-latest, macos-latest] + node: [22, 24, 26] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.quality.outputs.package_artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Run the node:test Native controller against the exact tarball + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + HTTP_PROXY: '' + HTTPS_PROXY: '' + ALL_PROXY: '' + NO_PROXY: 127.0.0.1,localhost + run: node --test packages/network-debugger/test/e2e/pack/native-runtime.test.mjs diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index b9540fa..f1c751d 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -4,20 +4,58 @@ on: release: types: [published] +permissions: + contents: read + id-token: write + +concurrency: + group: npm-publish-${{ github.event.release.tag_name }} + cancel-in-progress: false + jobs: + quality: + name: Rebuild once and run the reusable release gate + uses: ./.github/workflows/reusable-quality.yml + permissions: + contents: read + publish: + name: Publish the exact tested tarball + needs: quality runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: read + id-token: write steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + # npm trusted publishing requires npm >=11.5.1 and Node >=22.14. The + # official configuration is OIDC-first; NPM_TOKEN remains a migration + # fallback but cannot bypass the reusable quality dependency above. + # https://docs.npmjs.com/trusted-publishers/ + - uses: actions/setup-node@v4 with: - node-version: 22 - registry-url: 'https://registry.npmjs.org/' - - run: npm i -g pnpm@9.12.2 - - run: pnpm i - - run: pnpm build --filter=node-network-devtools - - run: | - cd packages/network-debugger - npm publish --access public + node-version: 24 + registry-url: https://registry.npmjs.org/ + - run: npm install --global npm@11 + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.quality.outputs.package_artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Verify release candidate identity + shell: bash + env: + EXPECTED_TARBALL: ${{ needs.quality.outputs.package_tarball_name }} + EXPECTED_SHA256: ${{ needs.quality.outputs.package_sha256 }} + EXPECTED_TAG: ${{ github.event.release.tag_name }} + run: | + set -euo pipefail + tarball="$RUNNER_TEMP/npm-package/$EXPECTED_TARBALL" + test -f "$tarball" + echo "$EXPECTED_SHA256 $tarball" | sha256sum --check --strict + package_version="$(tar -xOf "$tarball" package/package.json | node -p "JSON.parse(require('fs').readFileSync(0, 'utf8')).version")" + test "${EXPECTED_TAG#v}" = "$package_version" + - name: Publish with OIDC provenance (or NPM_TOKEN fallback) env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + TARBALL: ${{ runner.temp }}/npm-package/${{ needs.quality.outputs.package_tarball_name }} + run: npm publish "$TARBALL" --access public --provenance diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml new file mode 100644 index 0000000..ae60928 --- /dev/null +++ b/.github/workflows/quality.yml @@ -0,0 +1,34 @@ +name: Quality + +on: + pull_request: + push: + branches: + - main + - 'codex/**' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: quality-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + quality: + name: Required package and protocol quality + uses: ./.github/workflows/reusable-quality.yml + permissions: + contents: read + + quality-gate: + name: Quality Gate + if: always() + needs: quality + runs-on: ubuntu-latest + steps: + - name: Enforce the complete reusable workflow result + env: + QUALITY_RESULT: ${{ needs.quality.result }} + run: test "$QUALITY_RESULT" = success diff --git a/.github/workflows/reusable-quality.yml b/.github/workflows/reusable-quality.yml new file mode 100644 index 0000000..1725058 --- /dev/null +++ b/.github/workflows/reusable-quality.yml @@ -0,0 +1,299 @@ +name: Reusable package quality + +on: + workflow_call: + outputs: + package_artifact_name: + description: Artifact containing the one tested npm tarball + value: ${{ jobs.package.outputs.artifact_name }} + package_tarball_name: + description: Exact npm tarball filename + value: ${{ jobs.package.outputs.tarball_name }} + package_sha256: + description: SHA-256 of the exact npm tarball + value: ${{ jobs.package.outputs.sha256 }} + +permissions: + contents: read + +# Matrix reviewed 2026-08-28 against the official Node.js release schedule: +# https://github.com/nodejs/Release#release-schedule +# Node 22/24 are LTS and Node 26 is Current. Node 18 (EOL 2025-04-30) and +# Node 20 (EOL 2026-04-30) remain compatibility lines: Node 20 runs unit and +# Legacy evidence, while Node 18 is Legacy-only. Every runtime controller below +# is explicit -- +# unsupported capability combinations are not silently skipped at runtime. +env: + HTTP_PROXY: '' + HTTPS_PROXY: '' + ALL_PROXY: '' + NO_PROXY: 127.0.0.1,localhost + NETWORK_DEBUGGER_E2E_ARTIFACT_DIR: packages/network-debugger/test/e2e/artifacts + +jobs: + unit-supported: + name: Unit / Ubuntu / Node ${{ matrix.node }}${{ matrix.lifecycle == 'eol' && ' (EOL compatibility)' || '' }} + runs-on: ubuntu-latest + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + include: + - node: 20 + lifecycle: eol + - node: 22 + lifecycle: supported + - node: 24 + lifecycle: supported + - node: 26 + lifecycle: supported + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 9.12.2 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm --filter node-network-devtools test:unit + + package: + name: Build and npm pack exactly once + runs-on: ubuntu-latest + timeout-minutes: 15 + outputs: + artifact_name: ${{ steps.pack.outputs.artifact_name }} + tarball_name: ${{ steps.pack.outputs.tarball_name }} + sha256: ${{ steps.pack.outputs.sha256 }} + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 9.12.2 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm --filter node-network-devtools build + - name: Create the sole release candidate tarball + id: pack + shell: bash + run: | + set -euo pipefail + package_dir="$RUNNER_TEMP/npm-package" + mkdir -p "$package_dir" + npm pack --pack-destination "$package_dir" ./packages/network-debugger + mapfile -t tarballs < <(find "$package_dir" -maxdepth 1 -type f -name '*.tgz' -print) + if [[ "${#tarballs[@]}" -ne 1 ]]; then + echo "Expected exactly one npm tarball, found ${#tarballs[@]}" >&2 + exit 1 + fi + tarball_name="$(basename "${tarballs[0]}")" + sha256="$(sha256sum "${tarballs[0]}" | cut -d ' ' -f 1)" + artifact_name="node-network-devtools-tgz-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" + echo "artifact_name=$artifact_name" >> "$GITHUB_OUTPUT" + echo "tarball_name=$tarball_name" >> "$GITHUB_OUTPUT" + echo "sha256=$sha256" >> "$GITHUB_OUTPUT" + - name: Upload the exact release candidate + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.pack.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package/*.tgz + if-no-files-found: error + compression-level: 0 + retention-days: 14 + + pack-consumer: + name: Packed CJS and ESM consumers / Node 24 + needs: package + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 24 + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.package.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Resolve public entries from an installed tarball + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + run: node --test packages/network-debugger/test/e2e/pack/pack-consumer.test.mjs + + legacy-runtime: + name: Legacy runtime / Ubuntu / Node ${{ matrix.node }}${{ matrix.lifecycle == 'eol' && ' (EOL compatibility)' || '' }} + needs: package + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + include: + - node: 18.18.0 + lifecycle: eol + - node: 20 + lifecycle: eol + - node: 22 + lifecycle: supported + - node: 24 + lifecycle: supported + - node: 26 + lifecycle: supported + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.package.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package + # This controller intentionally uses node:test + npm only. In particular, + # Node 18/20 compatibility never loads the current Vitest toolchain. + - name: Exercise a real packed Legacy CDP lifecycle + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + run: node --test packages/network-debugger/test/e2e/pack/legacy-runtime.test.mjs + + native-runtime: + name: Native packed runtime / Ubuntu / Node ${{ matrix.node }} + needs: package + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + node: [22, 24, 26] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.package.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Exercise a real packed Native CDP lifecycle + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + run: node --test packages/network-debugger/test/e2e/pack/native-runtime.test.mjs + + ubuntu-protocol: + name: Mandatory Ubuntu Native, Legacy, and CLI protocol / Node 24 + needs: package + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 9.12.2 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: pnpm + - run: pnpm install --frozen-lockfile + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.package.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Hydrate repository tests from the exact tarball + shell: bash + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + run: | + set -euo pipefail + tarball="$(find "$NND_PACK_DIR" -maxdepth 1 -type f -name '*.tgz' -print -quit)" + unpacked="$RUNNER_TEMP/npm-unpacked" + mkdir -p "$unpacked" + tar -xzf "$tarball" -C "$unpacked" + rm -rf packages/network-debugger/dist + cp -R "$unpacked/package/dist" packages/network-debugger/dist + - run: pnpm --filter node-network-devtools test:e2e:native + - run: pnpm --filter node-network-devtools test:e2e:legacy + - run: pnpm --filter node-network-devtools test:e2e:enhancements + - run: pnpm --filter node-network-devtools test:e2e:cli + - name: Upload Native, Legacy, and CLI protocol diagnostics + if: failure() + uses: actions/upload-artifact@v4 + with: + name: native-legacy-cli-protocol-node-24 + path: packages/network-debugger/test/e2e/artifacts + if-no-files-found: ignore + + adapter-os-smoke: + name: 20-round adapter smoke / ${{ matrix.os }} / Node 24 + needs: package + runs-on: ${{ matrix.os }} + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + os: [windows-latest, macos-latest] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 24 + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.package.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Run Native and Legacy 20 times in one controller process + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + NND_OS_SMOKE_ROUNDS: 20 + HTTP_PROXY: '' + HTTPS_PROXY: '' + ALL_PROXY: '' + NO_PROXY: 127.0.0.1,localhost + run: >- + node --experimental-network-inspection --test --test-concurrency=1 + packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs + + frontend: + name: Official frontend / Ubuntu / Node 24 / Native and Legacy + needs: package + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 9.12.2 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: pnpm + - run: pnpm install --frozen-lockfile + - uses: actions/download-artifact@v4 + with: + name: ${{ needs.package.outputs.artifact_name }} + path: ${{ runner.temp }}/npm-package + - name: Hydrate repository tests from the exact tarball + shell: bash + env: + NND_PACK_DIR: ${{ runner.temp }}/npm-package + run: | + set -euo pipefail + tarball="$(find "$NND_PACK_DIR" -maxdepth 1 -type f -name '*.tgz' -print -quit)" + unpacked="$RUNNER_TEMP/npm-unpacked" + mkdir -p "$unpacked" + tar -xzf "$tarball" -C "$unpacked" + rm -rf packages/network-debugger/dist + cp -R "$unpacked/package/dist" packages/network-debugger/dist + - name: Install the lockfile-pinned Chromium + run: pnpm --filter node-network-devtools exec playwright install --with-deps chromium + - run: pnpm --filter node-network-devtools test:e2e:frontend + - name: Upload frontend diagnostics + if: failure() + uses: actions/upload-artifact@v4 + with: + name: official-frontend-node-24 + path: packages/network-debugger/test/e2e/artifacts + if-no-files-found: ignore diff --git a/README-zh_CN.md b/README-zh_CN.md index b8950e5..3a12a51 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -1,88 +1,97 @@ -
-

- -
Node Network Devtools

+# Node Network Devtools -

🔮 让node程序支持用chrome devtool的network选项卡调试

-

🦎 等同于浏览器的爬虫体验

-

⚙️ Powered by CDP

-

- NodeJs - Chrome - TypeScript -

+在标准 Chrome DevTools Network 面板中查看 Node.js 发出的网络请求。 -
+[English](README.md) | 简体中文 ---- +v2 提供两个互斥、完整的后端: -[English](README.md) | 简体中文 +- **Native**:直接连接 Node 实验性的 Network Inspector,不修改应用网络 API。 +- **Legacy**:通过项目自有的标准 CDP Target,捕获 HTTP/HTTPS、Fetch、可选 + Undici、WebSocket 帧和 SSE 消息。 -## 📖 介绍 +运行时只拥有调试 Target,不拥有 Chrome 进程。打开浏览器必须显式选择;端口默认 +交给操作系统分配;Legacy 应用传输已从旧的 5270 WebSocket/锁文件改为隔离的子进程 +IPC。 -如你所见,添加`--inspect`选项打开的node程序并不支持network标签,因为它不去代理用户请求。 -node network devtools正是为了解决这个问题,它一个允许您使用chrome devtools的network选项卡调试nodejs发出的请求,让debugger过程等同于浏览器中的网络爬虫体验。 +## 快速开始 + +```bash +npm install --save-dev node-network-devtools -## 🎮 TODO +# 不改业务源码直接启动并打开 DevTools +npx nnd dev --open src/app.js -- [x] HTTP/HTTPS - - [x] req/res headers - - [x] payload - - [x] json str response body - - [x] binary response body - - [x] stack follow - - [x] show stack - - [x] click to jump - - [x] base - - [x] Sourcemap -- [x] WebSocket - - [x] messages - - [x] payload - - [x] headers -- [ ] Compatibility - - [x] commonjs - - [x] esmodule - - [ ] Bun -- [ ] Undici - - [ ] undici.request - - [x] undici.fetch +# 查看当前 Node 与后端的真实能力 +npx nnd doctor --json +``` -## 👀 预览 +库 API: -![img](https://github.com/GrinZero/node-network-devtools/assets/70185413/5338d8f2-bb54-46fd-b243-a7a5b4af3031) +```ts +import { register } from 'node-network-devtools' -## 📦 快速开始 +const registration = register({ + mode: 'auto', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false } +}) -### 1. 安装 +const ready = await registration.ready +console.log(ready.mode, ready.target, ready.capabilities, ready.fallbackReason) -```bash -# npm -npm install node-network-devtools -D -# or pnpm -pnpm add node-network-devtools -D -# or yarn -yarn add node-network-devtools -D +await registration.openDevtools() +await registration.dispose() ``` -### 2. Usage +为了兼容 v1,返回值仍然可以直接调用:`const unregister = register(); +unregister()`。 -只需将以下代码添加到项目的入口文件中即可。 +## 能力概览 -```typescript -import { register } from 'node-network-devtools' +| 能力 | Native | Legacy | +| ----------------------------- | ---------------- | ------ | +| HTTP / HTTPS / Fetch 生命周期 | 取决于 Node 版本 | 支持 | +| HTTP/2 | 取决于 Node 版本 | 不支持 | +| 响应 Body | 取决于 Node 版本 | 支持 | +| 请求 Body | 不声明支持 | 支持 | +| WebSocket 生命周期 / 帧 | 仅生命周期 | 支持 | +| SSE 消息 | 不支持 | 支持 | +| 请求/响应 Mock | 不支持 | 支持 | -process.env.NODE_ENV === 'development' && register() -``` +Native 能力根据实际 Node 版本和 Inspector 方法探测。强制 Native 时缺少能力会直接 +失败;Auto 改用 Legacy 时会返回结构化原因,不会静默降级。 -如果需要停止调试网络请求并消除副作用,只需使用 `register` 方法的返回值进行清理。 +## Session、HAR 与 Replay -```typescript -import { register } from 'node-network-devtools' +两个后端都可以持久化 Network Session、外置保存响应 Body、导出 HAR 1.2、关联已有 +`traceparent`,并回放请求: + +```ts +const registration = register({ + session: { directory: '.nnd/sessions/run-001', har: true } +}) + +await registration.ready +// 执行业务请求 +await registration.dispose() +``` -const unregister = register() -unregister() +```bash +npx nnd replay --dry-run --json .nnd/sessions/run-001 +npx nnd replay capture.har ``` -## ⚙️ 配置选项 +Mock 明确只属于 Legacy。Auto 配置 `legacy.mock` 时会选择 Legacy;强制 Native 会返回 +`NND_NATIVE_MOCK_CONFLICT`。 + +## 文档 + +- [npm 包完整用法](packages/network-debugger/README.md) +- [v1 到 v2 迁移说明](docs/v2-migration.md) +- [v2 架构、Plan 与验收证据](docs/v2-implementation-plan.md) -`register` 函数接受一个可选的 `RegisterOptions` 对象来定制其行为。有关可用选项及其详细说明的完整列表,请参阅[选项文档](apps/web/docs/zh/options.md)。 +发布包要求 Node.js `>=18.18`。Node 18/20 虽已 EOL,仍保留迁移兼容测试;新项目建议 +使用仍在维护的 Node 版本。`undici@^6` 是 peer dependency,确保选择 Legacy +Undici 捕获时修改的是应用使用的同一个包实例。 diff --git a/README.md b/README.md index 7c0c825..483146d 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,102 @@ -
-

- -
Node Network Devtools

- -

🔮 Use chrome network devtool to debugger nodejs

-

🦎 Similar web crawler experience to browsers

-

⚙️ Powered by CDP

-

-

- NodeJs - Chrome - TypeScript -

-

- -
- ---- +# Node Network Devtools + +Inspect outbound Node.js traffic in the standard Chrome DevTools Network panel. English | [简体中文](README-zh_CN.md) -[![node-network-devtools](https://snyk.io/advisor/npm-package/node-network-devtools/badge.svg)](https://snyk.io/advisor/npm-package/node-network-devtools) -![npm downloads](https://img.shields.io/npm/dm/node-network-devtools?label=npm%20downloads) -[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/GrinZero/node-network-devtools) +[![npm downloads](https://img.shields.io/npm/dm/node-network-devtools?label=npm%20downloads)](https://www.npmjs.com/package/node-network-devtools) + +Version 2 has two mutually exclusive backends: -## 📖 Introduction +- **Native** connects to Node's experimental Network Inspector without patching + application network APIs. +- **Legacy** captures HTTP/HTTPS, Fetch, opted-in Undici, WebSocket frames, and + SSE through a project-owned standard CDP target. -As you can see, the node program opened with the `--inspect` option does not support network tags because it does not proxy user requests. -Node network devtools is designed to address this issue by allowing you to debug requests made by nodejs using the network tab of Chrome devtools, making the debugging process equivalent to a web crawler experience in the browser. +The runtime owns a target, not a Chrome process. Browser opening is explicit, +ports default to OS assignment, and Legacy application transport uses isolated +child-process IPC instead of the old 5270 WebSocket/lock-file design. -Node v22.6.0 experimentally supports network debugging. This library supports use before node v22.6.0, but the specific supported versions are unknown. +## Quick start + +```bash +npm install --save-dev node-network-devtools -## 🎮 Features +# Zero-code startup +npx nnd dev --open src/app.js -- [x] HTTP/HTTPS - - [x] req/res headers - - [x] payload - - [x] json str response body - - [x] binary response body - - [x] stack follow - - [x] show stack - - [x] click to jump - - [x] base - - [x] Sourcemap -- [x] WebSocket - - [x] messages - - [x] payload - - [x] headers -- [ ] Compatibility - - [x] commonjs - - [x] esmodule -- [ ] Undici - - [ ] undici.request - - [x] undici.fetch -- [ ] Complete unit testing of oneself +# Diagnose the actual runtime and adapter capabilities +npx nnd doctor --json +``` -## 👀 Preview +Library usage: -![img](https://github.com/GrinZero/node-network-devtools/assets/70185413/5338d8f2-bb54-46fd-b243-a7a5b4af3031) +```ts +import { register } from 'node-network-devtools' -## 📦 Quick Start +const registration = register({ + mode: 'auto', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false } +}) -### 1. Install +const ready = await registration.ready +console.log(ready.mode, ready.target, ready.capabilities, ready.fallbackReason) -```bash -# npm -npm install node-network-devtools -D -# or pnpm -pnpm add node-network-devtools -D -# or yarn -yarn add node-network-devtools -D +await registration.openDevtools() +await registration.dispose() ``` -### 2. Usage +The handle remains callable for v1 compatibility: `const unregister = +register(); unregister()`. -Just add the following code to the entry file of your project. +## Capability summary -```typescript -import { register } from 'node-network-devtools' +| Capability | Native | Legacy | +| ------------------------------ | ----------------- | ------ | +| HTTP / HTTPS / Fetch lifecycle | Runtime-dependent | Yes | +| HTTP/2 | Runtime-dependent | No | +| Response bodies | Runtime-dependent | Yes | +| Request bodies | Not advertised | Yes | +| WebSocket lifecycle / frames | Lifecycle only | Yes | +| SSE messages | No | Yes | +| Request/response Mock | No | Yes | -process.env.NODE_ENV === 'development' && register() -``` +Native values are probed from the running Node version and Inspector methods. +Forced Native fails if requirements are missing; Auto returns a structured +reason whenever it uses Legacy. -To stop debugging network requests and eliminate side effects, just use the return value of the `register` method for cleanup. +## Session workflow -```typescript -import { register } from 'node-network-devtools' +Both backends support persistent Network sessions, external response bodies, +HAR 1.2 export, traceparent correlation, and replay: -const unregister = register() -unregister() +```ts +const registration = register({ + session: { directory: '.nnd/sessions/run-001', har: true } +}) + +await registration.ready +// run application traffic +await registration.dispose() ``` -## ⚙️ Configuration Options +```bash +npx nnd replay --dry-run --json .nnd/sessions/run-001 +npx nnd replay capture.har +``` + +Mock is intentionally Legacy-only. Auto selects Legacy when `legacy.mock` rules +are configured; forced Native reports `NND_NATIVE_MOCK_CONFLICT`. + +## Documentation -The `register` function accepts an optional `RegisterOptions` object to customize its behavior. For a complete list of available options and their detailed descriptions, please refer to the [Options Documentation](apps/web/docs/options.md). +- [npm package guide](packages/network-debugger/README.md) +- [v1 to v2 migration](docs/v2-migration.md) +- [v2 architecture and implementation evidence](docs/v2-implementation-plan.md) -![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2FGrinZero%2Fnode-network-devtools&labelColor=%237fa1f7&countColor=%23697689) \ No newline at end of file +The package requires Node.js `>=18.18`. Node 18 and 20 remain compatibility +lanes for migrations despite being EOL; maintained Node releases are preferred. +`undici@^6` remains a peer dependency so opt-in Legacy interception can patch +the application's package instance. diff --git a/apps/web/docs/get-started.md b/apps/web/docs/get-started.md index 6e4b4bb..d3d29c7 100644 --- a/apps/web/docs/get-started.md +++ b/apps/web/docs/get-started.md @@ -2,6 +2,8 @@ Node Network Devtools is a network debugging tool that integrates Chrome Devtools. It provides a network debugging experience equivalent to a browser, and is ultra easy to access. It is free of proxy competition and trouble. +Node.js `>=18.18` is required. + ## Install ::: code-tabs @@ -28,7 +30,20 @@ npm i -D node-network-devtools ## Usage -Node.js programs that support both ESM and CommonJS standards only need to introduce and call the 'register' method in the entry file. +The CLI is the recommended zero-code entry point. `--open` opens the exact +Inspector or Legacy target after it is ready; without it, the CLI prints the +target and leaves browser ownership to you. + +```bash +npx nnd dev --open src/app.js +npx nnd dev --no-wait --runner tsx src/app.ts -- --port 3000 +npx nnd doctor --json +``` + +Native/Auto starts paused by default so the frontend cannot miss startup +traffic. Add `--no-wait` when the application should start immediately. + +Library registration is also available for ESM and CommonJS applications: ::: code-tabs @@ -36,16 +51,36 @@ Node.js programs that support both ESM and CommonJS standards only need to intro ```typescript import { register } from 'node-network-devtools' -register() + +const registration = register({ + mode: 'auto', + devtools: { open: true } +}) + +const ready = await registration.ready +console.log(ready.mode, ready.target.discoveryUrl) + +// Call during application shutdown. +await registration.dispose() ``` @tab javascript ```javascript const { register } = require('node-network-devtools') -register() + +const registration = register({ + mode: 'legacy', + devtools: { open: true } +}) + +registration.ready.then(({ mode, target }) => { + console.log(mode, target.discoveryUrl) +}) ``` ::: -If you want to use options, you can go to [options](./options.md) to see the details. +Browser opening is opt-in and target ports default to an OS-assigned port. See +[configuration options](./options.md) and the +[v1 to v2 migration guide](https://github.com/GrinZero/node-network-devtools/blob/main/docs/v2-migration.md). diff --git a/apps/web/docs/options.md b/apps/web/docs/options.md index 22f9c49..2ab716e 100644 --- a/apps/web/docs/options.md +++ b/apps/web/docs/options.md @@ -1,128 +1,118 @@ -# Options +# Configuration options -## RegisterOptions +The v2 API separates backend selection, Inspector target settings, frontend +opening, Legacy hooks, and recording. -The `RegisterOptions` interface is used to configure the registration options for the network debugger. Below are detailed descriptions of each option and their default values. - -### Example - -Here is an example of using `RegisterOptions`: - -```typescript -import { RegisterOptions, register } from 'node-network-devtools' +```ts +import { register, type RegisterOptions } from 'node-network-devtools' const options: RegisterOptions = { - port: 5270, - serverPort: 5271, - autoOpenDevtool: true, - intercept: { - fetch: true, - normal: true + mode: 'auto', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false }, + session: { directory: '.nnd/sessions/local', har: true }, + legacy: { + serverPort: 0, + intercept: { normal: true, fetch: true, undici: { fetch: false } } } } -// Use options to register the network debugger -register(options) +const registration = register(options) +await registration.ready +await registration.dispose() ``` -### port - -- **Description**: Main process port -- **Default value**: `5270` - -### serverPort - -- **Description**: CDP server port for Devtool -- **Link**: [devtools://devtools/bundled/inspector.html?ws=127.0.0.1:${serverPort}](devtools://devtools/bundled/inspector.html?ws=127.0.0.1:${serverPort}) -- **Default value**: `5271` - -### autoOpenDevtool - -- **Description**: Whether to automatically open Devtool -- **Default value**: `true` - -### intercept - -- **Description**: Options for intercepting different types of requests. - If a property is set to `false`, that specific type of request will not be intercepted. - By default, all are intercepted if not explicitly set. - -#### intercept.fetch - -- **Description**: Whether to intercept `fetch` requests. -- **Default value**: `true` +## `mode` -#### intercept.normal +- `auto` (default): prefer a proven Native implementation and expose a + structured reason when Legacy is selected. +- `native`: require Node's experimental Network Inspector and every requested + capability; never fall back. +- `legacy`: install project capture hooks and use the project CDP target. -- **Description**: Whether to intercept `http/https` requests. -- **Default value**: `true` +## `requiredCapabilities` -#### intercept.undici +An array containing any of `http`, `https`, `fetch`, `http2`, `responseBody`, +`requestBody`, `websocketLifecycle`, `websocketFrames`, `sseMessages`, or +`initiator`. Selection fails or falls back if a backend does not provide every +required value. -- **Description**: Options for intercepting `undici` requests. Set to `false` to disable all `undici` interception. Otherwise, configure specific `undici` interception options. -- **Default value**: `false` -- **Options**: - - `fetch`: Whether to intercept `undici`'s `fetch` requests. Defaults to `false`. - - `normal`: Whether to intercept `undici`'s normal requests. Defaults to `false`. +## `inspector` -## ConnectOptions +- `host`: Inspector bind host; defaults to `127.0.0.1`. +- `port`: Inspector port; defaults to `0` for OS assignment. -The `ConnectOptions` interface configures options for connecting to the network debugger. +## `devtools` -### port +- `open`: whether library registration explicitly opens the returned target; + defaults to `false`. -- **Description**: Main process port -- **Default value**: `5270` +The backend never owns or kills the resulting browser process. -## UnregisterOptions +## `session` -The `UnregisterOptions` interface configures options for unregistering the network debugger. +- `directory`: exact output directory for `manifest.json`, `events.ndjson`, and + `bodies/`. It must not already contain Session artifacts. +- `bodyCommandTimeoutMs`: optional positive timeout for each + `Network.getResponseBody` command. +- `har`: `true` writes `session.har` in the Session directory during disposal; + a string writes to that path; false/omitted disables automatic export. -### port +The recorder closes before the backend so outstanding body commands can finish. -- **Description**: Main process port -- **Default value**: `5270` +## `legacy` -## SetRequestInterceptorOptions +### `serverPort` -The `SetRequestInterceptorOptions` interface configures options for setting a request interceptor. +Legacy CDP discovery/WebSocket target port. It defaults to `0`. The application +bridge no longer uses a TCP port. -### port +### `intercept` -- **Description**: Main process port -- **Default value**: `5270` +- `normal`: intercept `http.request/get` and `https.request/get`; default true. +- `fetch`: intercept global Fetch; default true. +- `undici.fetch`: opt into interception of separately installed Undici Fetch; + default false. `undici@^6` is a package peer so this hook observes the + application's module instance; install it explicitly when peer auto-install + is disabled. -### request +Disabled transports are reported as unavailable capabilities for that Legacy +session. -- **Description**: A function to intercept and modify outgoing requests. +### `mock` -## SetResponseInterceptorOptions +An ordered array of Legacy-only request/response rules: -The `SetResponseInterceptorOptions` interface configures options for setting a response interceptor. - -### port - -- **Description**: Main process port -- **Default value**: `5270` - -### response - -- **Description**: A function to intercept and modify incoming responses. - -## RemoveRequestInterceptorOptions - -The `RemoveRequestInterceptorOptions` interface configures options for removing a request interceptor. - -### port - -- **Description**: Main process port -- **Default value**: `5270` +```ts +{ + id: 'fixture', + match: { + url: 'https://api.example.test/*', // exact or `*` glob + method: 'POST', + headers: { 'x-test-mode': 'mock' } + }, + response: { + status: 201, + statusText: 'Created', + headers: { 'content-type': 'application/json' }, + body: '{"mocked":true}', + // bodyBase64: 'AAEC/w==', // binary alternative + delayMs: 10 + } +} +``` -## RemoveResponseInterceptorOptions +Auto selects Legacy when rules exist. Forced Native fails synchronously with +`NND_NATIVE_MOCK_CONFLICT`. -The `RemoveResponseInterceptorOptions` interface configures options for removing a response interceptor. +## Deprecated v1 fields -### port +- `adapter` → `mode` +- `requiredFeatures` → `requiredCapabilities` +- `autoOpenDevtool` → `devtools.open` +- top-level `serverPort` → `legacy.serverPort` +- top-level `intercept` → `legacy.intercept` +- `port` → remove; child IPC replaced the old 5270 WebSocket bridge -- **Description**: Main process port -- **Default value**: `5270` \ No newline at end of file +Compatibility fields still work with diagnostics during the v2 migration. diff --git a/apps/web/docs/zh/get-started.md b/apps/web/docs/zh/get-started.md index 94a95ce..3212fce 100644 --- a/apps/web/docs/zh/get-started.md +++ b/apps/web/docs/zh/get-started.md @@ -2,6 +2,8 @@ Node Network Devtools 是一款软集成了 Chrome Devtools 的网络调试工具。它提供了相当于浏览器的网络调试体验,并且非常容易接入。 +要求 Node.js `>=18.18`。 + ## 安装 ::: code-tabs @@ -28,7 +30,19 @@ npm i -D node-network-devtools ## 使用 -支持 esm 和 commonjs 标准的nodejs程序,只需要在入口文件中引入并调用`register`方法即可。 +推荐使用 CLI 零代码接入。`--open` 会在 Inspector 或 Legacy target 就绪后打开 +准确的调试地址;不传该参数时,CLI 只输出 target,浏览器进程仍由你管理。 + +```bash +npx nnd dev --open src/app.js +npx nnd dev --no-wait --runner tsx src/app.ts -- --port 3000 +npx nnd doctor --json +``` + +Native/Auto 默认会先暂停应用,避免 DevTools 前端错过启动阶段的请求;希望应用立即 +运行时可添加 `--no-wait`。 + +ESM 和 CommonJS 应用也可以使用库 API: ::: code-tabs @@ -36,16 +50,36 @@ npm i -D node-network-devtools ```typescript import { register } from 'node-network-devtools' -register() + +const registration = register({ + mode: 'auto', + devtools: { open: true } +}) + +const ready = await registration.ready +console.log(ready.mode, ready.target.discoveryUrl) + +// 在应用退出流程中调用。 +await registration.dispose() ``` @tab javascript ```javascript const { register } = require('node-network-devtools') -register() + +const registration = register({ + mode: 'legacy', + devtools: { open: true } +}) + +registration.ready.then(({ mode, target }) => { + console.log(mode, target.discoveryUrl) +}) ``` ::: -如果需要使用选项,可以前往 [选项](./options.md) 查看详细说明。 +浏览器打开行为需要显式启用,target 端口默认由操作系统分配。完整配置见 +[选项](./options.md) 和 +[v1 到 v2 迁移指南](https://github.com/GrinZero/node-network-devtools/blob/main/docs/v2-migration.md)。 diff --git a/apps/web/docs/zh/options.md b/apps/web/docs/zh/options.md index 7095a23..75bb8bc 100644 --- a/apps/web/docs/zh/options.md +++ b/apps/web/docs/zh/options.md @@ -1,137 +1,110 @@ -# 选项 +# 配置选项 -## RegisterOptions +v2 API 将后端选择、Inspector target、前端打开方式、Legacy hook 和会话记录分开配置。 -`RegisterOptions` 接口用于配置网络调试器的注册选项。以下是各个选项的详细说明及其默认值。 - -### 示例 - -以下是一个使用 `RegisterOptions` 的示例: - -```typescript -import { RegisterOptions, register } from 'node-network-devtools' +```ts +import { register, type RegisterOptions } from 'node-network-devtools' const options: RegisterOptions = { - port: 5270, - serverPort: 5271, - autoOpenDevtool: true, - intercept: { - fetch: true, - normal: true + mode: 'auto', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false }, + session: { directory: '.nnd/sessions/local', har: true }, + legacy: { + serverPort: 0, + intercept: { normal: true, fetch: true, undici: { fetch: false } } } } -// 使用 options 进行网络调试器的注册 -register(options) +const registration = register(options) +await registration.ready +await registration.dispose() ``` -### port - -- **描述**: 主进程端口 -- **默认值**: `5270` - -### serverPort - -- **描述**: CDP 服务器端口,用于 Devtool -- **链接**: [devtools://devtools/bundled/inspector.html?ws=127.0.0.1:${serverPort}](devtools://devtools/bundled/inspector.html?ws=127.0.0.1:${serverPort}) -- **默认值**: `5271` - -### autoOpenDevtool - -- **描述**: 是否自动打开 Devtool -- **默认值**: `true` - -### intercept - -- **描述**: 用于拦截不同类型请求的选项。 - 如果某个属性设置为 `false`,则不会拦截该特定类型的请求。 - 默认情况下,如果未明确设置,则全部拦截。 - -#### intercept.fetch - -- **描述**: 是否拦截 `fetch` 请求。 -- **默认值**: `true` - -#### intercept.normal - -- **描述**: 是否拦截 `http/https` 请求。 -- **默认值**: `true` +## `mode` -#### intercept.undici +- `auto`(默认):优先选择经过验证的 Native 实现;切换到 Legacy 时会返回结构化原因。 +- `native`:要求 Node 的实验性 Network Inspector 和所有指定能力,绝不静默回退。 +- `legacy`:安装项目自己的捕获 hook,并使用项目提供的标准 CDP target。 -- **描述**: `undici` 请求的拦截选项。设置为 `false` 以禁用所有 `undici` 拦截。否则,请配置特定的 `undici` 拦截选项。 -- **默认值**: `false` -- **选项**: - - `fetch`: 是否拦截 `undici` 的 `fetch` 请求。默认为 `false`。 - - `normal`: 是否拦截 `undici` 的普通请求。默认为 `false`。 +## `requiredCapabilities` -## ConnectOptions +数组成员可以是 `http`、`https`、`fetch`、`http2`、`responseBody`、 +`requestBody`、`websocketLifecycle`、`websocketFrames`、`sseMessages` 或 +`initiator`。如果后端缺少任一必需能力,选择过程会失败或回退。 -`ConnectOptions` 接口配置连接到网络调试器的选项。 +## `inspector` -### port +- `host`:Inspector 绑定地址,默认为 `127.0.0.1`。 +- `port`:Inspector 端口,默认为 `0`,即交给操作系统分配。 -- **描述**: 主进程端口 -- **默认值**: `5270` +## `devtools` -## UnregisterOptions +- `open`:库注册完成后是否显式打开返回的 target,默认为 `false`。 -`UnregisterOptions` 接口配置取消注册网络调试器的选项。 +后端不会持有或结束由此打开的浏览器进程。 -### port +## `session` -- **描述**: 主进程端口 -- **默认值**: `5270` +- `directory`:`manifest.json`、`events.ndjson` 和 `bodies/` 的准确输出目录; + 该目录不能已经包含 Session 产物。 +- `bodyCommandTimeoutMs`:每次 `Network.getResponseBody` 命令的可选正数超时。 +- `har`:`true` 表示在释放时将 `session.har` 写入 Session 目录;字符串表示 + 指定路径;省略或设为 `false` 则不自动导出。 -## SendMessageOptions +记录器会先于后端关闭,以便未完成的 body 命令能够正常结束。 -`SendMessageOptions` 接口配置发送消息的选项。 +## `legacy` -### port +### `serverPort` -- **描述**: 主进程端口 -- **默认值**: `5270` +Legacy CDP discovery/WebSocket target 的端口,默认为 `0`。应用与桥接子进程之间 +已经改用 IPC,不再占用旧的 TCP 端口。 -## SetRequestInterceptorOptions +### `intercept` -`SetRequestInterceptorOptions` 接口配置设置请求拦截器的选项。 +- `normal`:捕获 `http.request/get` 和 `https.request/get`,默认开启。 +- `fetch`:捕获全局 Fetch,默认开启。 +- `undici.fetch`:捕获单独安装的 Undici Fetch,默认关闭,需要显式选择。 + `undici@^6` 是 package peer,确保 hook 使用应用的同一个模块实例;关闭 peer + 自动安装时需要手动安装。 -### port +关闭的传输会在该 Legacy 会话中报告为不可用能力。 -- **描述**: 主进程端口 -- **默认值**: `5270` +### `mock` -### request +按顺序匹配的 Legacy 专用请求/响应规则: -- **描述**: 一个用于拦截和修改传出请求的函数。 - -## SetResponseInterceptorOptions - -`SetResponseInterceptorOptions` 接口配置设置响应拦截器的选项。 - -### port - -- **描述**: 主进程端口 -- **默认值**: `5270` - -### response - -- **描述**: 一个用于拦截和修改传入响应的函数。 - -## RemoveRequestInterceptorOptions - -`RemoveRequestInterceptorOptions` 接口配置移除请求拦截器的选项。 - -### port - -- **描述**: 主进程端口 -- **默认值**: `5270` +```ts +{ + id: 'fixture', + match: { + url: 'https://api.example.test/*', // 精确地址或 `*` glob + method: 'POST', + headers: { 'x-test-mode': 'mock' } + }, + response: { + status: 201, + statusText: 'Created', + headers: { 'content-type': 'application/json' }, + body: '{"mocked":true}', + // bodyBase64: 'AAEC/w==', // 二进制响应可用此字段 + delayMs: 10 + } +} +``` -## RemoveResponseInterceptorOptions +配置规则后,Auto 会选择 Legacy。强制 Native 会同步抛出 +`NND_NATIVE_MOCK_CONFLICT`。 -`RemoveResponseInterceptorOptions` 接口配置移除响应拦截器的选项。 +## 已弃用的 v1 字段 -### port +- `adapter` → `mode` +- `requiredFeatures` → `requiredCapabilities` +- `autoOpenDevtool` → `devtools.open` +- 顶层 `serverPort` → `legacy.serverPort` +- 顶层 `intercept` → `legacy.intercept` +- `port` → 删除;子进程 IPC 已取代旧的 5270 WebSocket bridge -- **描述**: 主进程端口 -- **默认值**: `5270` \ No newline at end of file +迁移到 v2 期间,这些兼容字段仍然可用,并会产生诊断信息。 diff --git a/docs/v2-implementation-plan.md b/docs/v2-implementation-plan.md new file mode 100644 index 0000000..0d82ffb --- /dev/null +++ b/docs/v2-implementation-plan.md @@ -0,0 +1,397 @@ +# Node Network Devtools v2 implementation plan + +Status: in progress + +Started: 2026-08-28 + +Owner: repository maintainers and Codex implementation session + +This document is the authoritative implementation and completion plan for the v2 +architecture. A phase is complete only when its code, tests, documentation, and +acceptance evidence are all present in the current worktree. A passing subset of +tests is not sufficient to mark the overall plan complete. + +## Goals + +1. Make `NodeNativeAdapter` a first-class backend from the first implementation + phase. +2. Replace mocked "CDP correctness" tests with real protocol end-to-end tests. +3. Separate network capture, CDP target creation, and frontend launching. +4. Stop coupling the debug server lifecycle to a Chrome process. +5. Preserve a Legacy backend for capabilities missing from Node's native network + inspector. +6. Improve zero-code setup, diagnostics, configuration, watch-mode behavior, and + package-consumer verification. +7. Add session recording, HAR export, replay, Legacy-only mocking, and trace + correlation after the runtime and connection layers are stable. + +## Explicit non-goals for this plan + +- Security hardening as a dedicated workstream. +- Incoming HTTP/server request inspection. +- A custom DevTools frontend. +- Bun or Deno support. +- Native/Legacy hybrid capture for a single session. +- Pretending that Node Native capabilities exist when the selected Node release + does not provide them. + +## Architectural decisions + +### One complete backend per session + +`NodeNativeAdapter` and `LegacyAdapter` are mutually exclusive complete +backends. Native uses Node's own capture, CDP implementation, and Inspector +target. Legacy uses the existing monkey-patch capture and a project-owned CDP +bridge. They must never emit the same request in one session. + +```text +register / preload / CLI + | + v + RuntimeController + |- ConfigResolver + |- AdapterSelector + `- RegistrationHandle + | + +-----+-----------+ + | | + v v +NodeNativeAdapter LegacyAdapter + | | +Node Inspector Legacy capture + bridge + | | + +--------+--------+ + v + DevtoolsTarget + | | + v v + optional frontend optional ProtocolTap/session pipeline +``` + +### Connection ownership + +The backend owns a debuggable target, not a browser. Core runtime code must not +start a Chrome remote-debugging server, send `Page.navigate`, retain a browser +process handle, or kill a browser during disposal. + +### Capability-driven selection + +Selection is based on an explicit, versioned capability matrix verified by E2E +tests. Forced Native fails if requirements are not met. Only Auto may fall back +to Legacy, and it must expose a structured fallback reason. + +## Public API target + +```ts +const registration = register({ + mode: 'auto', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false } +}) + +const ready = await registration.ready +console.log(ready.mode, ready.target, ready.capabilities) + +await registration.openDevtools() +await registration.dispose() +``` + +During the compatibility period the returned handle remains callable, so the +existing `const unregister = register(); unregister()` form still works. + +Mode semantics: + +- `native`: require the experimental flag and required runtime capabilities; + never silently fall back. +- `legacy`: always use project-owned capture and CDP bridge. +- `auto`: prefer a proven Native baseline, otherwise use Legacy with a visible + fallback diagnostic. + +## Phase 1: Native backend and real Native CDP E2E + +### Deliverables + +- [x] Define runtime, adapter, target, session, diagnostic, and capability types. +- [x] Implement `AdapterSelector`. +- [x] Implement `NodeNativeAdapter` using `node:inspector`. +- [x] Reuse an existing Inspector endpoint without taking ownership of it. +- [x] Open an Inspector on an OS-assigned port when the adapter owns the target. +- [x] Read the canonical target descriptor from Node's `/json/list` endpoint. +- [x] Return a backward-compatible observable registration handle. +- [x] Ensure Native never patches `fetch`, `http.request`, or `https.request`. +- [x] Ensure Native never forks or starts the Legacy 5270/5271 services. +- [x] Add real Native protocol E2E tests against the built package. +- [x] Add a CI quality workflow that runs the first Native E2E gate. + +### Native E2E baseline + +- [x] `Network.enable` returns a response with the same command id. +- [x] A real HTTP request emits a valid lifecycle. +- [x] A real Fetch request emits a valid lifecycle. +- [x] A failed request emits `Network.loadingFailed` only. +- [x] `Network.getResponseBody` returns the actual fixture body where supported. +- [x] `Runtime.evaluate('process.pid')` proves the client is attached to the + target process. +- [x] Initiator data points to a real fixture source location where supported. +- [x] Explicit Native without the required flag fails with an actionable error. +- [x] Auto fallback returns a structured reason. +- [x] Disposal closes only an Inspector created by the adapter. + +## Phase 2: target connection and developer experience + +### Deliverables + +- [x] Add the `nnd` CLI. +- [x] Add a side-effect preload export. +- [x] Add `nnd dev`, `nnd doctor`, and `nnd doctor --json`. +- [x] Launch Native targets with the experimental network-inspection flag. +- [x] Support wait-for-first-frontend and no-wait startup modes. +- [x] Add explicit frontend launching through a separate `FrontendLauncher`. +- [x] Remove the Chrome port 9333 polling and `Page.navigate` implementation. +- [x] Stop retaining or killing a Chrome process. +- [x] Add hosted official DevTools frontend smoke tests. +- [x] Add CJS, ESM, tsx, Nest compiled, and Node watch fixtures. + +### Developer-experience acceptance + +- [x] `nnd dev app.js` starts a Native-capable target with no source edit. +- [x] `nnd dev --open app.js` explicitly opens the returned target URL. +- [x] Library usage does not open a browser by default. +- [x] Ready output contains mode, target, capabilities, and fallback reason. +- [x] Diagnostics use stable codes and provide actionable hints. +- [x] Repeated registration is idempotent for equal configuration and rejects + conflicting configuration. + +## Phase 3: Legacy adapter and real Legacy CDP E2E + +### Deliverables + +- [x] Move current capture behavior behind `LegacyAdapter`. +- [x] Complete Auto/Native/Legacy selection and old-option migration. +- [x] Mark current request hooks as Legacy-only. +- [x] Add real Legacy protocol E2E with no mocked server or manufactured CDP + events. +- [x] Respond to all command ids with a result or a standard CDP error. +- [x] Implement correct `Network.loadingFailed` behavior. +- [x] Preserve HTTP, Fetch, binary, SSE, WebSocket, and initiator behavior. + +### Legacy protocol baseline + +- [x] HTTP GET and Fetch POST. +- [x] Text, gzip, and binary response bodies. +- [x] Redirect, abort, reset, and timeout behavior. +- [x] SSE event name, id, data, and ordering. +- [x] WebSocket handshake, text frame, binary frame, and close. +- [x] Concurrent requests use stable, distinct request ids. +- [x] CJS and ESM package consumers. + +## Phase 4: Legacy transport and discovery + +### Deliverables + +- [x] Replace the application-to-fork 5270 WebSocket with child-process IPC. +- [x] Remove the lock-file and WebSocket health-ping mechanisms. +- [x] Use a single HTTP server for Legacy target discovery and CDP WebSocket + upgrade. +- [x] Implement `/json/list`, `/json/version`, and `/json/protocol`. +- [x] Default to port `0`; never probe a free port before binding. +- [x] Support multiple clients and DevTools refresh/reconnect. +- [x] Ensure abnormal bridge exits produce bounded recovery and visible status. +- [x] Ensure disposal leaves no port, timer, child, or pending promise behind. + +## Phase 5: compatibility and release gates + +### Deliverables + +- [x] Maintain a capability matrix backed by tests rather than runtime skipping. +- [x] Add Node 18/20/22/24/26 runtime coverage as appropriate per adapter. +- [x] Run mandatory Ubuntu protocol E2E on pull requests. +- [x] Run Windows and macOS adapter smoke tests. +- [x] Run a complete OS/runtime matrix nightly. +- [x] Build and `npm pack` once, then test the published artifact as CJS and ESM + consumers. +- [x] Make npm publishing depend on the same reusable quality workflow. +- [x] Document Native/Legacy differences and migration from old options. + +## Phase 6: session and debugging enhancements + +### Deliverables + +- [x] Add a common protocol event journal/tap for both backends. +- [x] Store sessions as `manifest.json`, `events.ndjson`, and external body files. +- [x] Export valid HAR with matching text and binary bodies. +- [x] Replay requests from a session or HAR, including dry-run mode. +- [x] Implement request/response mocking for Legacy only. +- [x] Reject Native plus Mock as an explicit capability conflict. +- [x] Correlate existing `traceparent` values without injecting tracing by + default. +- [x] Add real-network E2E for Session, HAR, Replay, Mock, and Trace. + +## E2E architecture + +Protocol E2E uses a thin raw WebSocket CDP client for both backends. It must +spawn a real packaged consumer, connect to the real endpoint, trigger a real +loopback request, and assert observed protocol invariants. It must not import a +backend plugin directly. + +The fixture controller communicates with target applications over process IPC so +test-control traffic does not pollute Network events. Each scenario uses a unique +URL/query token and waits on explicit events instead of fixed sleeps. + +Frontend smoke tests use the official DevTools frontend bundled with the exact +Playwright Chromium revision pinned in the lockfile. Chromium's loopback +remote-debugging HTTP server serves those generated assets locally. The tests +verify frontend connection, Network model population, response body retrieval, +reconnect, console errors, page errors, and the absence of non-loopback +frontend traffic. The source-only `chrome-devtools-frontend` npm tarball is not +treated as a runnable frontend build. + +Required failure artifacts: + +- Complete CDP inbound/outbound NDJSON journal. +- Target stdout and stderr. +- Session descriptor and capability selection. +- Playwright trace, screenshot, console, and page errors for frontend tests. + +## CI target matrix + +Pull-request minimum: + +| Job | Runtime and platform | +| ---------------- | ------------------------------------------ | +| Unit | Node 20/22/24/26 on Ubuntu | +| Legacy runtime | Node 18/20/22/24/26 on Ubuntu | +| Native runtime | supported Node 22/24/26 releases on Ubuntu | +| Adapter OS smoke | Node 24 on Windows and macOS | +| Frontend smoke | Node 24 on Ubuntu, Native and Legacy | +| Pack consumer | CJS and ESM from the generated tarball | + +The runtime E2E controller should use `node:test` so evidence for Node 18 does not +depend on the Vitest controller's own minimum runtime. + +## Suggested source layout + +```text +packages/network-debugger/ + src/ + runtime/ + adapters/ + node-native/ + legacy/ + target/ + diagnostics/ + config/ + session/ + preload/ + cli/ + legacy-bridge/ + test/e2e/ + fixtures/ + harness/ + contracts/ + protocol/ + frontend/ +``` + +## Final completion audit + +Before declaring the overall plan complete, inspect current evidence for every +checkbox above and additionally prove: + +- [x] Native requests appear exactly once and never pass through Legacy code. +- [x] Native does not change the references of supported network APIs. +- [x] Legacy retains every previously documented capability. +- [x] Both backends connect through actual standard targets. +- [x] The project no longer owns a Chrome process. +- [x] Protocol E2E contains no `vi.mock`, fake WebSocket server, or hand-written + `Network.*` event used as product evidence. +- [x] Both protocol suites pass 50 consecutive runs without a failure or leaked + process. +- [ ] Windows and macOS smoke suites pass 20 consecutive runs. +- [x] Frontend smoke passes 10 consecutive runs. +- [ ] Pull requests and publishing are blocked by the verified quality workflow. +- [x] Documentation describes actual current capabilities, not intended ones. +- [x] Every planned artifact exists in the packed npm output when required. + +## Progress log + +- 2026-08-28: Plan established from repository inspection, Node official + network-inspection capabilities, and a successful local Node 24.16 Native CDP + probe. Phase 1 started. +- 2026-08-28: Phase 1 requirement audit passed. Evidence: 886 unit tests; clean + Vite build plus declaration emit; four real built-package Native CDP E2E + scenarios; ten consecutive E2E repetitions; owned/reused Inspector lifecycle + tests; public forced-Native and Auto-fallback tests; and a pull-request quality + workflow running unit, build, and Native E2E. Node 24.16 emits Native + `wallTime` in epoch milliseconds, so the Native-only E2E records and validates + that upstream deviation without transforming the direct Inspector protocol. +- 2026-08-28: Phase 2 requirement audit passed. Evidence: 910 unit tests; clean + declaration and dual-runtime builds including ESM-only preload; four real + Native protocol scenarios; eight built-package CLI E2E scenarios covering + doctor, real `--open`/Inspector-wait resume, Auto-to-Legacy fallback, CJS, + ESM, tsx, watch, compiled Nest-style startup, signals, and orphan cleanup; + and an official pinned Chromium DevTools frontend smoke that populated its + real Network model, retrieved two response bodies across a reload/reconnect, + rejected non-loopback frontend traffic, and passed ten consecutive runs. The + CI quality job installs that pinned browser and runs all Phase 1/2 gates. +- 2026-08-28: Phase 3 requirement audit passed. Legacy capture is isolated behind + its adapter and uses a real built-package CDP target. Evidence: eight protocol + scenarios pass for both CJS and ESM consumers and ten consecutive repetitions + completed 80/80; coverage includes HTTP, Fetch POST (including multi-chunk + request bodies), text/gzip/binary bodies, redirect/reset/timeout/abort, SSE, + WebSocket text/binary/close, 20 concurrent command ids, response-body retrieval, + standard CDP errors, and initiators. The official frontend also passed ten + consecutive Legacy runs and a combined Native/Legacy reconnect run. +- 2026-08-28: Phase 4 requirement audit passed. The Legacy application bridge now + uses advanced-serialization child IPC and a single loopback HTTP/WebSocket target + on an OS-assigned port; the old 5270 transport, lock file, and health endpoint are + gone. Fifty-five target/discovery tests and 25 IPC lifecycle tests cover bounded + queues/history, multi-client isolation, stable target recovery, child flag + sanitization, and terminal diagnostics. A CLI shutdown race found by full E2E was + fixed by making the dedicated bridge close and exit on parent IPC disconnect; + the focused regression and the complete 8/8 CLI suite leave no matching child. +- 2026-08-28: Phase 6 requirement audit passed. A backend-neutral real CDP + `ProtocolTap` records atomic manifests, NDJSON events, integrity-indexed external + bodies, and existing trace context; HAR 1.2 export preserves text/binary bodies, + while library and `nnd replay` APIs support Session/HAR dry-run and real replay. + Legacy-only HTTP/Fetch/Undici mocks traverse normal capture, Auto exposes a + structured reason, and forced Native fails with `NND_NATIVE_MOCK_CONFLICT`. + Twenty-two Session unit/integration tests and the full unit suite passed. The + built-package enhancement E2E passed 2/2 and then 20/20 across ten repetitions, + covering six real business requests/bodies, HAR, Replay, HTTP+Fetch Mock, + traceparent/tracestate, and zero origin leakage. That gate exposed and verified + the fix for an internal ProtocolTap self-observation recursion: the final + manifest contains exactly six requests, six bodies, zero failures, and no child + process leak. +- 2026-08-28: Phase 5 requirement audit passed. The reusable quality workflow + builds and packs exactly once, then gates isolated CJS/ESM consumers, Ubuntu + Native/Legacy/CLI/enhancement protocol suites, the official frontend, Node + 20/22/24/26 unit lanes, Legacy Node 18/20/22/24/26, Native Node 22/24/26, and + Windows/macOS Node 24 20-round adapter smoke. Nightly adds Legacy on both OSes + for all five runtimes and Native for 22/24/26. Local exact-tarball evidence was + green across those available runtimes and macOS smoke; Node 22's incomplete + Native Fetch body caused the public cross-transport `responseBody` capability + to be conservatively disabled there. Publishing consumes the same SHA-256 + verified artifact through the reusable gate with OIDC/provenance and checks + its release tag. That phase-5 candidate `node-network-devtools-2.0.0.tgz` installed in CJS + and ESM consumers, exposed all five exports/two bins, contained 187 files, and + passed `npm publish --dry-run` without performing a real publish. +- 2026-08-28: Final local audit passed on the post-review tree. Three independent + reviews found and drove fixes for the Node `--import` minimum (`>=18.18`), + side-effect preload declarations, stale published-site instructions, missing + packed LICENSE, finite Legacy/`-e`/`-p` process lifetime, and negotiated + `permessage-deflate` capture. The final local gate passed 60 files/833 unit + tests, declaration plus CJS/ESM builds with no TypeScript diagnostic, all + Native/Legacy/enhancement/CLI/official-frontend E2E, and the nine-page + VuePress build. Native and Legacy protocol suites each passed 50 consecutive + final-tree runs; frontend, enhancement, and CLI suites each passed 10 + consecutive runs; the watcher-specific regression passed 50; macOS packed + Native and Legacy adapters each passed 20 rounds; and no matching process + remained. The current exact `node-network-devtools-2.0.0.tgz` installs in CJS + and ESM consumers, passes packed Native/Legacy runtime tests plus publish + dry-run, contains 190 files including LICENSE, and has SHA-256 + `df5e666727df06563e20194d0f777c2b17cb18942c28eba4be22a9316e8f9df0`. + Windows 20-round evidence and the active required `Quality Gate` repository + ruleset remain deliberately unchecked until the pushed branch succeeds in + GitHub Actions. diff --git a/docs/v2-migration.md b/docs/v2-migration.md new file mode 100644 index 0000000..1b46028 --- /dev/null +++ b/docs/v2-migration.md @@ -0,0 +1,146 @@ +# Migrating to Node Network Devtools v2 + +Version 2 separates runtime selection, network capture, CDP target ownership, and +frontend launching. It keeps the callable v1 cleanup handle, but defaults and +ownership rules are intentionally different. + +## Behavioral changes + +- `register()` no longer opens Chrome by default. Use `devtools.open: true`, + `registration.openDevtools()`, or `nnd dev --open`. +- The project no longer starts, retains, navigates, or kills a Chrome process. +- Legacy application-to-target traffic uses child-process IPC. Port 5270, its + WebSocket bridge, lock file, and health ping no longer exist. +- Native and Legacy are complete, mutually exclusive backends. One request is + never captured by both in a single registration. +- Inspector and Legacy target ports default to `0`, allowing the OS to bind an + available loopback port without a probe/bind race. +- Auto prefers a proven Native runtime, then reports a structured reason when it + uses Legacy. Forced Native never silently falls back. +- The `node-network-devtools/dev` subpath remains as a deprecated compatibility + alias, but now resolves to the same published `dist` entry as the package root. + +## Option mapping + +| v1 option | v2 option | Notes | +| ------------------ | ---------------------- | ---------------------------------------------------- | +| `adapter` | `mode` | `adapter` still works with a deprecation diagnostic. | +| `requiredFeatures` | `requiredCapabilities` | Old name remains compatible. | +| `autoOpenDevtool` | `devtools.open` | Default changed from implicit opening to `false`. | +| `serverPort` | `legacy.serverPort` | Default is now `0`. | +| `intercept` | `legacy.intercept` | Hooks are installed only when Legacy is selected. | +| `port` | Remove | The old application bridge port is unused. | + +Before: + +```ts +const unregister = register({ + serverPort: 5271, + autoOpenDevtool: true, + intercept: { normal: true, fetch: true } +}) +``` + +After: + +```ts +const registration = register({ + mode: 'auto', + devtools: { open: true }, + legacy: { + serverPort: 0, + intercept: { normal: true, fetch: true } + } +}) + +await registration.ready +await registration.dispose() +``` + +The old `unregister()` call remains valid, but `await registration.dispose()` is +preferred when teardown order matters. + +## Backend selection + +Use required capabilities to express behavior the application actually needs: + +```ts +register({ + mode: 'auto', + requiredCapabilities: ['requestBody', 'websocketFrames'] +}) +``` + +Those requirements select Legacy today. Native capability values are derived +from both the running Node version and available Inspector methods. + +Notable verified boundaries: + +- Native network inspection first appears behind the experimental flag in Node + 20.18 and 22.6. +- Auto's proven Native baseline is Node 24.7 and newer. +- Native HTTP/2 capture requires the later runtime implementations (for example, + Node 24.8+). +- Node 22.22 can retrieve Native HTTP response bodies, but Fetch + `Network.getResponseBody` returns an empty body in the package E2E. Because the + public `responseBody` capability spans transports, v2 conservatively reports + it as false on Node 22 and true only on the verified Node 24+ baseline. +- Native request bodies, WebSocket frames, SSE message parsing, and Mock are not + advertised. Select Legacy when these are required. + +Node 22 and 24 are LTS and Node 26 is Current at the time this plan was +implemented. Node 18 and 20 are EOL; the package retains `>=18.18` compatibility +and CI lanes so existing applications can migrate, but new deployments should +use a maintained release. + +## Zero-code startup + +Instead of editing the application entry point, prefer: + +```bash +nnd dev --open src/server.js +nnd dev --runner tsx src/server.ts -- --port 3000 +nnd doctor --json +``` + +The CLI supplies the correct preloads and Native flag, supports wait/no-wait and +watch behavior, forwards application arguments/signals, and prints the canonical +target selected by the backend. + +## Session, HAR, Replay, and Mock + +Recording is backend-neutral: + +```ts +const registration = register({ + session: { directory: '.nnd/sessions/run-001', har: true } +}) +await registration.ready +// application traffic +await registration.dispose() +``` + +Disposal closes the recorder and body commands, exports HAR when requested, then +closes the backend even when recording fails. The exact output directory must +not already contain `manifest.json` or `events.ndjson`. + +Replay can validate without I/O or issue real HTTP(S) requests: + +```bash +nnd replay --dry-run --json .nnd/sessions/run-001 +nnd replay capture.har +``` + +Mock rules belong under `legacy.mock`. Configuring them in Auto selects Legacy +with `NND_AUTO_LEGACY_MOCK_REQUIRED`; configuring them with forced Native throws +`NND_NATIVE_MOCK_CONFLICT` before an adapter starts. + +## Release gates + +The v2 gate builds and packs once, then installs that exact tarball into isolated +CJS and ESM consumers. Pull requests run mandatory Ubuntu protocol tests and a +supported runtime matrix; Node 24 also runs the complete Native, Legacy, CLI, +frontend, Session/HAR/Replay/Mock/Trace gates. Windows and macOS run adapter +smoke loops, while the larger OS/runtime matrix runs nightly. Publishing calls +the same reusable quality workflow and publishes the verified tarball with npm +trusted publishing/provenance rather than rebuilding it. diff --git a/package.json b/package.json index 1333ecb..f88d9ab 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,13 @@ "private": true, "scripts": { "build": "turbo build", + "test": "pnpm --filter node-network-devtools test", + "test:e2e:native": "pnpm --filter node-network-devtools test:e2e:native", + "test:e2e:legacy": "pnpm --filter node-network-devtools test:e2e:legacy", + "test:e2e:enhancements": "pnpm --filter node-network-devtools test:e2e:enhancements", + "test:e2e:cli": "pnpm --filter node-network-devtools test:e2e:cli", + "test:e2e:frontend": "pnpm --filter node-network-devtools test:e2e:frontend", + "quality": "pnpm --filter node-network-devtools test:ci", "dev": "turbo dev", "lint": "turbo lint", "start": "turbo start", @@ -26,6 +33,6 @@ }, "packageManager": "pnpm@9.12.2", "engines": { - "node": ">=18" + "node": ">=18.18" } } diff --git a/packages/network-debugger/LICENSE b/packages/network-debugger/LICENSE new file mode 100644 index 0000000..f6126a2 --- /dev/null +++ b/packages/network-debugger/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 bugyaluwang + +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/network-debugger/README.md b/packages/network-debugger/README.md index d6c366a..a5bfdf9 100644 --- a/packages/network-debugger/README.md +++ b/packages/network-debugger/README.md @@ -1,82 +1,206 @@ -
-

- -
Node Network Devtools

- -

🔮 Use chrome network devtool to debugger nodejs

-

🦎 Similar web crawler experience to browsers

-

⚙️ Powered by CDP

-

-

- NodeJs - Chrome - TypeScript -

-

- -
- ---- - -English | [简体中文](README-zh_CN.md) - -## 📖 Introduction - -As you can see, the node program opened with the `--inspect` option does not support network tags because it does not proxy user requests. -Node network devtools is designed to address this issue by allowing you to debug requests made by nodejs using the network tab of Chrome devtools, making the debugging process equivalent to a web crawler experience in the browser. - -Node v22.6.0 experimentally supports network debugging. This library supports use before node v22.6.0, but the specific supported versions are unknown. - -## 🎮 Features - -- [x] HTTP/HTTPS - - [x] req/res headers - - [x] payload - - [x] json str response body - - [x] binary response body - - [x] stack follow - - [x] show stack - - [x] click to jump - - [x] base - - [x] Sourcemap -- [x] WebSocket - - [x] messages - - [x] payload - - [x] headers -- [ ] Compatibility - - [x] commonjs - - [x] esmodule - - [ ] Bun - - [ ] Deno -- Maybe nice to PR to Deno -- [ ] Undici - - [ ] undici.request - - [x] undici.fetch - -## 👀 Preview - -![img](https://github.com/GrinZero/node-network-devtools/assets/70185413/5338d8f2-bb54-46fd-b243-a7a5b4af3031) - -## 📦 Quick Start - -### 1. Install +# Node Network Devtools + +Inspect outbound Node.js network traffic with the standard Chrome DevTools +Network panel. Version 2 provides two complete, mutually exclusive backends: + +- **Native** connects DevTools directly to Node's experimental Network Inspector. +- **Legacy** captures outbound APIs in-process and exposes a standard CDP target + through an isolated child-process bridge. + +The runtime owns a debuggable target, not a Chrome process. Opening DevTools is +explicit and disposal never kills a browser. + +## Requirements + +- Node.js `>=18.18`. +- Native mode requires a Node release with + `--experimental-network-inspection`; use `nnd doctor` to inspect the exact + runtime capability matrix. +- Node 18 and 20 are retained as compatibility lanes even though they are EOL. +- `undici@^6` is a peer dependency so the opt-in Legacy hook observes the same + package instance as the application. Package managers that disable automatic + peer installation must install it explicitly, even when that hook stays off. + +## Install ```bash -# npm -npm install node-network-devtools -D -# or pnpm -pnpm add node-network-devtools -D -# or yarn -yarn add node-network-devtools -D +npm install --save-dev node-network-devtools ``` -### 2. Usage +## Zero-code CLI + +```bash +# Start a target and wait for a debugger before running the entry point. +npx nnd dev src/app.js -Just add the following code to the entry file of your project. +# Open the target explicitly. +npx nnd dev --open src/app.js -```typescript +# Start immediately, use tsx, or force a backend. +npx nnd dev --no-wait --runner tsx --mode legacy src/app.ts + +# Machine-readable environment and selection diagnostics. +npx nnd doctor --json +``` + +`nnd dev` supports CJS, ESM, tsx, compiled Nest-style applications, application +arguments, signals, and watch restarts without a source-code registration edit. + +## Library API + +```ts import { register } from 'node-network-devtools' -process.env.NODE_ENV === 'development' && register() +const registration = register({ + mode: 'auto', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false } +}) + +const ready = await registration.ready +console.log(ready.mode, ready.target, ready.capabilities, ready.fallbackReason) + +await registration.openDevtools() +await registration.dispose() +``` + +The returned handle remains callable for v1 compatibility: + +```ts +const unregister = register() +unregister() +``` + +Equal repeated registrations return the same handle. A conflicting concurrent +registration fails with `NND_ALREADY_REGISTERED`. + +## Backend capabilities + +| Capability | Native | Legacy | +| ---------------------- | ----------------- | ------ | +| HTTP / HTTPS lifecycle | Yes | Yes | +| Fetch lifecycle | Runtime-dependent | Yes | +| HTTP/2 | Runtime-dependent | No | +| Response bodies | Runtime-dependent | Yes | +| Request bodies | Not advertised | Yes | +| WebSocket lifecycle | Runtime-dependent | Yes | +| WebSocket frames | No | Yes | +| SSE messages | No | Yes | +| Initiator stack | Yes | Yes | +| Request/response Mock | No | Yes | + +Native capabilities are probed from the running Node version and Inspector API; +the package does not pretend missing upstream features exist. Forced Native +fails when requirements cannot be met. Auto prefers a proven Native baseline +and otherwise exposes a structured Legacy fallback reason. + +Node 22 can expose Native HTTP response bodies while returning an empty Fetch +body. Because `responseBody` covers all advertised transports, the package +conservatively reports that capability as false on Node 22 and enables it only +on the verified Node 24+ baseline. + +Legacy interception can be narrowed: + +```ts +register({ + mode: 'legacy', + legacy: { + intercept: { normal: true, fetch: true, undici: { fetch: true } } + } +}) +``` + +## Session, HAR, and Replay + +Record either backend to a portable Session directory and optionally export HAR +during disposal: + +```ts +const registration = register({ + session: { + directory: '.nnd/sessions/run-001', + har: true + } +}) + +const ready = await registration.ready +console.log(ready.session) +await registration.dispose() +``` + +The directory contains `manifest.json`, `events.ndjson`, and external files in +`bodies/`. Existing W3C `traceparent`/`tracestate` headers are correlated in the +manifest and HAR without injecting or modifying tracing headers. + +Session APIs are also exported directly: + +```ts +import { buildHar, exportHar, replay, SessionRecorder } from 'node-network-devtools' + +await exportHar('.nnd/sessions/run-001', 'capture.har') +const plan = await replay('capture.har', { dryRun: true }) +const result = await replay('.nnd/sessions/run-001') +``` + +Replay accepts a Session directory, HAR file, or HAR object. It only reissues +HTTP(S), uses manual redirect handling, and removes hop-by-hop plus runtime-owned +`Host`/`Content-Length` headers. The CLI exposes the same operation: + +```bash +npx nnd replay --dry-run --json capture.har +npx nnd replay --stop-on-error .nnd/sessions/run-001 +``` + +## Legacy-only Mock + +```ts +const registration = register({ + mode: 'auto', + legacy: { + mock: [ + { + id: 'fixture', + match: { + url: 'https://api.example.test/v1/*', + method: 'POST', + headers: { 'x-test-mode': 'mock' } + }, + response: { + status: 201, + headers: { 'content-type': 'application/json' }, + body: '{"mocked":true}' + } + } + ] + } +}) +``` + +URL matchers support `*` globs. Use `bodyBase64` for binary responses. Auto +selects Legacy with diagnostic `NND_AUTO_LEGACY_MOCK_REQUIRED`; forcing Native +with rules fails explicitly with `NND_NATIVE_MOCK_CONFLICT`. Mocked HTTP, HTTPS, +global Fetch, and opted-in `undici.fetch` responses still traverse the normal +Network capture lifecycle. + +## Configuration file + +`nnd.config.mjs`, `nnd.config.cjs`, and `nnd.config.json` are discovered in the +working directory. Precedence is CLI > `NND_*` environment > config file > +defaults. + +```js +export default { + mode: 'auto', + open: false, + wait: true, + inspector: { host: '127.0.0.1', port: 0 }, + requiredCapabilities: ['responseBody'], + session: { directory: '.nnd/sessions/local', har: true }, + legacy: { serverPort: 0 } +} ``` -![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2FGrinZero%2Fnode-network-devtools&labelColor=%237fa1f7&countColor=%23697689) +See the repository's +[v2 migration guide](https://github.com/GrinZero/node-network-devtools/blob/main/docs/v2-migration.md) +for old-option mappings and release compatibility details. diff --git a/packages/network-debugger/package.json b/packages/network-debugger/package.json index 0e5aeca..17d9181 100644 --- a/packages/network-debugger/package.json +++ b/packages/network-debugger/package.json @@ -1,28 +1,54 @@ { "name": "node-network-devtools", - "version": "1.0.30", + "version": "2.0.0", "description": "Inspecting Node.js's Network with Chrome DevTools", "homepage": "https://grinzero.github.io/node-network-devtools/", "main": "./dist/index.js", "module": "./dist/index.mjs", - "types": "./dist/src/index.d.ts", + "types": "./dist/index.d.ts", + "bin": { + "nnd": "./dist/cli.mjs", + "node-network-devtools": "./dist/cli.mjs" + }, "exports": { ".": { - "types": "./dist/src/index.d.ts", + "types": "./dist/index.d.ts", "import": "./dist/index.mjs", "require": "./dist/index.js" }, "./dev": { - "types": "./src/index.ts", - "import": "./src/index.ts", - "require": "./src/index.ts" + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./register": { + "types": "./dist/preload/register.d.ts", + "import": "./dist/register.mjs", + "default": "./dist/register.mjs" + }, + "./preload": { + "types": "./dist/preload/register.d.ts", + "import": "./dist/register.mjs", + "default": "./dist/register.mjs" + }, + "./config": { + "types": "./dist/config/index.d.ts", + "import": "./dist/config.mjs", + "require": "./dist/config.js" } }, "scripts": { - "test": "vitest", + "test": "vitest run", + "test:unit": "vitest run", + "test:e2e:native": "node --test test/e2e/native-protocol.test.mjs", + "test:e2e:legacy": "node --test test/e2e/legacy/legacy-protocol.test.mjs", + "test:e2e:enhancements": "node --test test/e2e/enhancements/enhancements.test.mjs", + "test:e2e:cli": "node --test test/e2e/cli/cli.test.mjs", + "test:e2e:frontend": "playwright test -c test/e2e/frontend/playwright.config.mjs", + "test:ci": "pnpm run test:unit && pnpm run build && pnpm run test:e2e:native && pnpm run test:e2e:legacy && pnpm run test:e2e:enhancements && pnpm run test:e2e:cli && pnpm run test:e2e:frontend", "test:coverage": "vitest run --coverage", "test:watch": "vitest --watch", - "build": "vite build", + "build": "vite build && vite build --config vite.preload.config.ts", "dev": "vite build --watch --mode development" }, "keywords": [ @@ -47,7 +73,11 @@ }, "author": "bugyaluwang (https://github.com/GrinZero)", "license": "MIT", + "engines": { + "node": ">=18.18" + }, "devDependencies": { + "@playwright/test": "1.62.1", "@types/node": "^20.11.0", "@types/ws": "^8.5.10", "@typescript-eslint/eslint-plugin": "^6.14.0", @@ -57,6 +87,7 @@ "fast-check": "^4.5.3", "memfs": "^4.56.10", "tslib": "2.6.2", + "tsx": "4.23.12", "vite": "^5.2.10", "vite-plugin-dts": "^3.8.3", "vitest": "^4.0.18" @@ -64,7 +95,6 @@ "dependencies": { "bufferutil": "^4.0.9", "iconv-lite": "^0.7.0", - "inspector": "^0.5.0", "open": "^8.4.2", "ws": "^8.17.1" }, diff --git a/packages/network-debugger/src/adapters/legacy/index.test.ts b/packages/network-debugger/src/adapters/legacy/index.test.ts new file mode 100644 index 0000000..41c8db8 --- /dev/null +++ b/packages/network-debugger/src/adapters/legacy/index.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, test } from 'vitest' +import { LEGACY_CAPABILITIES, LegacyAdapter } from '.' + +describe('LegacyAdapter capabilities', () => { + test('advertises the tested default Legacy feature set', () => { + expect(new LegacyAdapter().probe().capabilities).toEqual(LEGACY_CAPABILITIES) + }) + + test('does not advertise transports explicitly disabled by interception config', () => { + expect( + new LegacyAdapter({ intercept: { normal: false, fetch: true } }).probe().capabilities + ).toMatchObject({ + http: false, + https: false, + fetch: true, + websocketLifecycle: false, + websocketFrames: false, + sseMessages: true, + responseBody: true + }) + + expect( + new LegacyAdapter({ intercept: { normal: false, fetch: false } }).probe().capabilities + ).toMatchObject({ + http: false, + https: false, + fetch: false, + responseBody: false, + requestBody: false, + sseMessages: false, + initiator: false + }) + }) +}) diff --git a/packages/network-debugger/src/adapters/legacy/index.ts b/packages/network-debugger/src/adapters/legacy/index.ts new file mode 100644 index 0000000..c2802a3 --- /dev/null +++ b/packages/network-debugger/src/adapters/legacy/index.ts @@ -0,0 +1,195 @@ +import http from 'http' +import https from 'https' +import { syncBuiltinESMExports } from 'node:module' +import { type InterceptOptions } from '../../common' +import { MainProcess } from '../../core/fork' +import { proxyFetch } from '../../core/fetch' +import { getProxyFactory, requestProxyFactory, type RequestFn } from '../../core/request' +import { undiciFetchProxy } from '../../core/undici' +import { mockableRequestHandler, type LegacyMockRule } from '../../mock' +import { generateHash } from '../../utils' +import type { + AdapterProbe, + AdapterSession, + AdapterStartOptions, + CapabilityMap, + DebugAdapter, + Diagnostic +} from '../types' + +export const LEGACY_CAPABILITIES: CapabilityMap = Object.freeze({ + http: true, + https: true, + fetch: true, + http2: false, + responseBody: true, + requestBody: true, + websocketLifecycle: true, + websocketFrames: true, + sseMessages: true, + initiator: true +}) + +export interface LegacyAdapterOptions { + port?: number + serverPort?: number + autoOpenDevtool?: boolean + intercept?: InterceptOptions + mock?: readonly LegacyMockRule[] + diagnostics?: readonly Diagnostic[] +} + +function capabilitiesFor(intercept: InterceptOptions = {}): CapabilityMap { + const normal = intercept.normal !== false + const fetch = intercept.fetch !== false || Boolean(intercept.undici && intercept.undici.fetch) + const anyRequest = normal || fetch + return Object.freeze({ + http: normal, + https: normal, + fetch, + http2: false, + responseBody: anyRequest, + requestBody: anyRequest, + websocketLifecycle: normal, + websocketFrames: normal, + sseMessages: fetch, + initiator: anyRequest + }) +} + +/** + * Compatibility wrapper around the original capture path. + * + * All application capture patches live here, while a child-process IPC bridge + * owns the project CDP target. Native sessions therefore cannot accidentally + * activate any Legacy interception. + */ +export class LegacyAdapter implements DebugAdapter { + readonly kind = 'legacy' as const + + constructor(private readonly options: LegacyAdapterOptions = {}) {} + + probe(_options?: AdapterStartOptions): AdapterProbe { + return { + kind: this.kind, + available: true, + autoSelectable: true, + capabilities: capabilitiesFor(this.options.intercept), + diagnostics: [] + } + } + + async start(_options?: AdapterStartOptions): Promise { + const port = this.options.port + const serverPort = this.options.serverPort ?? 0 + const autoOpenDevtool = this.options.autoOpenDevtool ?? false + const intercept = this.options.intercept ?? {} + const mockRules = this.options.mock ?? [] + const { + fetch: interceptFetch = true, + normal: interceptNormal = true, + undici: interceptUndici = false + } = intercept + const interceptUndiciFetch = Boolean(interceptUndici && interceptUndici.fetch) + const capabilities = capabilitiesFor(intercept) + const key = generateHash(JSON.stringify({ port, serverPort, autoOpenDevtool })) + const mainProcess = new MainProcess({ port, serverPort, autoOpenDevtool, key }) + + const unsetFetchProxy = interceptFetch + ? mockRules.length > 0 + ? proxyFetch(mainProcess, mockRules) + : proxyFetch(mainProcess) + : undefined + const originalRequests = new Map< + typeof http | typeof https, + { request: RequestFn; get: RequestFn; proxyRequest: RequestFn; proxyGet: RequestFn } + >() + const agents = [http, https] as const + + if (interceptNormal) { + for (const agent of agents) { + const request = agent.request as RequestFn + const get = agent.get as RequestFn + const requestHandler = + mockRules.length > 0 + ? mockableRequestHandler(request, agent === https, mockRules) + : request + const proxyRequest = requestProxyFactory.call( + agent, + requestHandler, + agent === https, + mainProcess + ) + const proxyGet = getProxyFactory(proxyRequest) + originalRequests.set(agent, { request, get, proxyRequest, proxyGet }) + agent.request = proxyRequest as typeof agent.request + agent.get = proxyGet as typeof agent.get + } + syncBuiltinESMExports() + } + + const unsetUndiciFetch = interceptUndiciFetch + ? mockRules.length > 0 + ? undiciFetchProxy(mainProcess, mockRules) + : undiciFetchProxy(mainProcess) + : undefined + let disposed = false + + const restoreCapture = () => { + unsetFetchProxy?.() + if (interceptNormal) { + for (const agent of agents) { + const original = originalRequests.get(agent) + if (!original) continue + if (agent.request === original.proxyRequest) { + agent.request = original.request as typeof agent.request + } + if (agent.get === original.proxyGet) { + agent.get = original.get as typeof agent.get + } + } + originalRequests.clear() + syncBuiltinESMExports() + } + unsetUndiciFetch?.() + } + + let target + try { + target = await mainProcess.ready + } catch (error) { + restoreCapture() + await mainProcess.dispose().catch(() => {}) + throw error + } + + const diagnostics: Diagnostic[] = [...(this.options.diagnostics ?? [])] + if (port !== undefined) { + diagnostics.push({ + code: 'NND_LEGACY_BRIDGE_PORT_DEPRECATED', + level: 'warn', + message: 'Legacy bridge port is no longer used because capture now uses child-process IPC.', + hint: 'Remove legacy.port (or the deprecated top-level port option). Use legacy.serverPort only to pin the CDP target port.' + }) + } + + return { + kind: this.kind, + capabilities, + diagnostics, + target, + onDiagnostic(listener: (diagnostic: Diagnostic) => void) { + return mainProcess.onDiagnostic(listener) + }, + onFailure(listener: (error: Error) => void) { + return mainProcess.onFailure(listener) + }, + async dispose() { + if (disposed) return + disposed = true + restoreCapture() + await mainProcess.dispose() + } + } + } +} diff --git a/packages/network-debugger/src/adapters/node-native/capability.test.ts b/packages/network-debugger/src/adapters/node-native/capability.test.ts new file mode 100644 index 0000000..cf28982 --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/capability.test.ts @@ -0,0 +1,123 @@ +import { describe, expect, test, vi } from 'vitest' +import { + NATIVE_CAPABILITIES, + getMissingCapabilities, + getNativeCapabilities, + hasNativeInspectionFlag, + isNativeAutoBaseline, + parseNodeVersion, + supportsNativeNetworkInspection, + type NativeNetworkApi +} from './capability' + +const lifecycleNetwork = (): NativeNetworkApi => ({ + requestWillBeSent: vi.fn(), + responseReceived: vi.fn(), + loadingFinished: vi.fn(), + loadingFailed: vi.fn() +}) + +describe('native capability detection', () => { + test('publishes a conservative maximum capability set', () => { + expect(NATIVE_CAPABILITIES).toMatchObject({ + http: true, + https: true, + fetch: true, + http2: true, + responseBody: true, + requestBody: false, + websocketLifecycle: true, + websocketFrames: false, + sseMessages: false, + initiator: true + }) + }) + + test.each([ + ['20.17.0', false], + ['20.18.0', true], + ['21.7.3', false], + ['22.5.0', false], + ['22.6.0', true], + ['23.0.0', true], + ['24.0.0', true] + ])('detects native inspection runtime support for Node %s', (text, expected) => { + expect(supportsNativeNetworkInspection(parseNodeVersion(text))).toBe(expected) + }) + + test.each([ + ['24.6.0', false], + ['24.7.0', true], + ['25.0.0', true], + ['22.22.0', false] + ])('uses a stricter Auto baseline for Node %s', (text, expected) => { + expect(isNativeAutoBaseline(parseNodeVersion(text))).toBe(expected) + }) + + test('rejects malformed versions', () => { + expect(parseNodeVersion('nightly')).toBeNull() + }) + + test('detects the experimental flag without accepting lookalikes', () => { + expect(hasNativeInspectionFlag(['--experimental-network-inspection'])).toBe(true) + expect(hasNativeInspectionFlag(['--experimental-network-inspection=true'])).toBe(true) + expect(hasNativeInspectionFlag(['--experimental-network-inspection-extra'])).toBe(false) + }) + + test('derives optional capabilities from runtime methods and versions', () => { + const network: NativeNetworkApi = { + ...lifecycleNetwork(), + dataReceived: vi.fn(), + dataSent: vi.fn(), + webSocketCreated: vi.fn(), + webSocketHandshakeResponseReceived: vi.fn(), + webSocketClosed: vi.fn() + } + const capabilities = getNativeCapabilities(parseNodeVersion('24.8.0'), network) + + expect(capabilities).toMatchObject({ + http: true, + https: true, + fetch: true, + http2: true, + responseBody: true, + requestBody: false, + websocketLifecycle: true, + websocketFrames: false, + sseMessages: false, + initiator: true + }) + }) + + test('does not infer HTTP request-body support from dataSent', () => { + const capabilities = getNativeCapabilities(parseNodeVersion('26.1.0'), { + ...lifecycleNetwork(), + dataSent: vi.fn() + }) + expect(capabilities.requestBody).toBe(false) + }) + + test('does not advertise cross-transport response bodies on Node 22', () => { + const capabilities = getNativeCapabilities(parseNodeVersion('22.22.3'), { + ...lifecycleNetwork(), + dataReceived: vi.fn() + }) + expect(capabilities).toMatchObject({ fetch: true, responseBody: false }) + }) + + test('turns protocol capabilities off when lifecycle methods are incomplete', () => { + const capabilities = getNativeCapabilities(parseNodeVersion('26.1.0'), { + requestWillBeSent: vi.fn() + }) + expect(capabilities.http).toBe(false) + expect(capabilities.fetch).toBe(false) + expect(capabilities.initiator).toBe(false) + }) + + test('reports required capabilities that are unavailable', () => { + const capabilities = getNativeCapabilities(parseNodeVersion('24.7.0'), lifecycleNetwork()) + expect( + getMissingCapabilities(capabilities, ['http', 'responseBody', 'websocketFrames']) + ).toEqual(['responseBody', 'websocketFrames']) + }) +}) diff --git a/packages/network-debugger/src/adapters/node-native/capability.ts b/packages/network-debugger/src/adapters/node-native/capability.ts new file mode 100644 index 0000000..18fba63 --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/capability.ts @@ -0,0 +1,159 @@ +import type { CapabilityMap, NetworkCapability } from '../types' + +export const NATIVE_NETWORK_INSPECTION_FLAG = '--experimental-network-inspection' + +/** + * The maximum capability set currently exposed by Node's native inspector. + * Runtime probing may turn individual capabilities off for older Node releases. + * + * `requestBody` is intentionally false: Node's native HTTP/1 inspector does not + * yet provide request bodies consistently, so the adapter must not advertise a + * capability which only works for some transports. + */ +export const NATIVE_CAPABILITIES: CapabilityMap = Object.freeze({ + http: true, + https: true, + fetch: true, + http2: true, + responseBody: true, + requestBody: false, + websocketLifecycle: true, + websocketFrames: false, + sseMessages: false, + initiator: true +}) + +export const REQUIRED_NATIVE_NETWORK_METHODS = [ + 'requestWillBeSent', + 'responseReceived', + 'loadingFinished', + 'loadingFailed' +] as const + +export const OPTIONAL_NATIVE_NETWORK_METHODS = [ + 'dataReceived', + 'dataSent', + 'webSocketCreated', + 'webSocketHandshakeResponseReceived', + 'webSocketClosed' +] as const + +export type NativeNetworkMethod = + | (typeof REQUIRED_NATIVE_NETWORK_METHODS)[number] + | (typeof OPTIONAL_NATIVE_NETWORK_METHODS)[number] + +export type NativeNetworkApi = Partial unknown>> + +export interface NodeVersion { + major: number + minor: number + patch: number +} + +export function parseNodeVersion(version: string): NodeVersion | null { + const match = /^(?:v)?(\d+)\.(\d+)\.(\d+)/.exec(version.trim()) + if (!match) return null + + return { + major: Number(match[1]), + minor: Number(match[2]), + patch: Number(match[3]) + } +} + +function atLeast(version: NodeVersion, major: number, minor: number, patch = 0) { + if (version.major !== major) return version.major > major + if (version.minor !== minor) return version.minor > minor + return version.patch >= patch +} + +/** The flag first shipped in Node 20.18 and Node 22.6. */ +export function supportsNativeNetworkInspection(version: NodeVersion | null) { + if (!version) return false + if (version.major === 20) return atLeast(version, 20, 18) + if (version.major === 21) return false + if (version.major === 22) return atLeast(version, 22, 6) + return version.major >= 23 +} + +/** + * Auto selection deliberately has a stricter, proven baseline than explicit + * Native selection. Older supported releases remain available when requested + * explicitly, but Auto should prefer Legacy there. + */ +export function isNativeAutoBaseline(version: NodeVersion | null) { + if (!version) return false + if (version.major > 24) return true + return version.major === 24 && atLeast(version, 24, 7) +} + +function supportsNativeFetch(version: NodeVersion | null) { + if (!version) return false + if (version.major === 22) return atLeast(version, 22, 14) + if (version.major === 23) return atLeast(version, 23, 7) + return version.major >= 24 +} + +function supportsNativeHttp2(version: NodeVersion | null) { + if (!version) return false + if (version.major === 22) return atLeast(version, 22, 20) + if (version.major === 24) return atLeast(version, 24, 8) + return version.major >= 25 +} + +/** + * Node 22 exposes dataReceived but its Fetch getResponseBody result can be + * empty. The public capability spans every advertised transport, so only the + * verified Node 24+ baseline may claim complete response-body support. + */ +function supportsCompleteNativeResponseBodies(version: NodeVersion | null) { + return version !== null && version.major >= 24 +} + +export function hasRequiredNativeMethods(network: NativeNetworkApi | undefined) { + return REQUIRED_NATIVE_NETWORK_METHODS.every((method) => typeof network?.[method] === 'function') +} + +export function getNativeCapabilities( + version: NodeVersion | null, + network: NativeNetworkApi | undefined +): CapabilityMap { + const lifecycle = hasRequiredNativeMethods(network) + const websocketLifecycle = + lifecycle && + typeof network?.webSocketCreated === 'function' && + typeof network.webSocketHandshakeResponseReceived === 'function' && + typeof network.webSocketClosed === 'function' + + return Object.freeze({ + http: lifecycle, + https: lifecycle, + fetch: lifecycle && supportsNativeFetch(version), + http2: lifecycle && supportsNativeHttp2(version), + responseBody: + lifecycle && + supportsCompleteNativeResponseBodies(version) && + typeof network?.dataReceived === 'function', + // Deliberately not inferred from dataSent; HTTP/1 request bodies remain incomplete. + requestBody: false, + websocketLifecycle, + websocketFrames: false, + sseMessages: false, + initiator: lifecycle + }) +} + +export function getMissingCapabilities( + capabilities: CapabilityMap, + required: readonly NetworkCapability[] = [] +) { + return required.filter((capability) => capabilities[capability] !== true) +} + +export function hasNativeInspectionFlag(execArgv: readonly string[]) { + return execArgv.some( + (argument) => + argument === NATIVE_NETWORK_INSPECTION_FLAG || + argument.startsWith(`${NATIVE_NETWORK_INSPECTION_FLAG}=`) + ) +} diff --git a/packages/network-debugger/src/adapters/node-native/errors.ts b/packages/network-debugger/src/adapters/node-native/errors.ts new file mode 100644 index 0000000..5a2d7f1 --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/errors.ts @@ -0,0 +1,31 @@ +import type { Diagnostic } from '../types' + +export class NodeNativeAdapterError extends Error { + readonly code: string + readonly hint?: string + readonly diagnostics: readonly Diagnostic[] + + constructor(diagnostic: Diagnostic, diagnostics: readonly Diagnostic[] = [diagnostic]) { + super(diagnostic.message) + this.name = 'NodeNativeAdapterError' + this.code = diagnostic.code + this.hint = diagnostic.hint + this.diagnostics = diagnostics + } +} + +export function nativeDiagnostic( + code: string, + message: string, + hint?: string, + details?: Readonly>, + level: Diagnostic['level'] = 'error' +): Diagnostic { + return { + code, + level, + message, + ...(hint ? { hint } : {}), + ...(details ? { details } : {}) + } +} diff --git a/packages/network-debugger/src/adapters/node-native/index.test.ts b/packages/network-debugger/src/adapters/node-native/index.test.ts new file mode 100644 index 0000000..6d2639e --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/index.test.ts @@ -0,0 +1,234 @@ +import { describe, expect, test, vi } from 'vitest' +import type { NativeNetworkApi } from './capability' +import { NodeNativeAdapter, NodeNativeAdapterError, type NativeInspectorApi } from './index' + +const inspectorUrl = 'ws://127.0.0.1:9229/target-id' + +function createNetwork(overrides: NativeNetworkApi = {}): NativeNetworkApi { + return { + requestWillBeSent: vi.fn(), + responseReceived: vi.fn(), + loadingFinished: vi.fn(), + loadingFailed: vi.fn(), + dataReceived: vi.fn(), + dataSent: vi.fn(), + webSocketCreated: vi.fn(), + webSocketHandshakeResponseReceived: vi.fn(), + webSocketClosed: vi.fn(), + ...overrides + } +} + +function descriptor(url = inspectorUrl) { + return [ + { + id: 'target-id', + title: 'node[123]', + type: 'node', + url: 'file:///app.js', + webSocketDebuggerUrl: url, + devtoolsFrontendUrl: 'devtools://native-target' + } + ] +} + +function createInspector(initialUrl: string | null = inspectorUrl) { + let currentUrl = initialUrl ?? undefined + const inspector: NativeInspectorApi = { + url: vi.fn(() => currentUrl), + open: vi.fn(() => { + currentUrl = inspectorUrl + }), + close: vi.fn(), + Network: createNetwork() + } + return inspector +} + +function createAdapter( + inspector: NativeInspectorApi | null, + overrides: ConstructorParameters[0] = {} +) { + return new NodeNativeAdapter({ + inspector, + inspectorAvailable: inspector !== null, + execArgv: ['--experimental-network-inspection'], + nodeVersion: '24.8.0', + requestJson: vi.fn().mockResolvedValue(descriptor()), + ...overrides + }) +} + +describe('NodeNativeAdapter probe', () => { + test('reports a supported runtime as available and Auto-selectable', () => { + const probe = createAdapter(createInspector()).probe() + expect(probe.available).toBe(true) + expect(probe.autoSelectable).toBe(true) + expect(probe.diagnostics).toEqual([]) + }) + + test('reports missing Inspector support with a stable code', () => { + const probe = createAdapter(null).probe() + expect(probe.available).toBe(false) + expect(probe.diagnostics).toContainEqual( + expect.objectContaining({ code: 'NND_NATIVE_INSPECTOR_UNAVAILABLE' }) + ) + }) + + test('reports an unsupported runtime', () => { + const probe = createAdapter(createInspector(), { nodeVersion: '18.20.0' }).probe() + expect(probe.available).toBe(false) + expect(probe.diagnostics).toContainEqual( + expect.objectContaining({ code: 'NND_NATIVE_RUNTIME_UNSUPPORTED' }) + ) + }) + + test('requires the experimental flag', () => { + const probe = createAdapter(createInspector(), { execArgv: [] }).probe() + expect(probe.available).toBe(false) + expect(probe.diagnostics).toContainEqual( + expect.objectContaining({ + code: 'NND_NATIVE_FLAG_REQUIRED', + hint: expect.stringContaining('--experimental-network-inspection') + }) + ) + }) + + test('requires the native lifecycle methods', () => { + const inspector = createInspector() + inspector.Network = { requestWillBeSent: vi.fn() } + const probe = createAdapter(inspector).probe() + expect(probe.available).toBe(false) + expect(probe.diagnostics).toContainEqual( + expect.objectContaining({ code: 'NND_NATIVE_METHODS_UNAVAILABLE' }) + ) + }) + + test('validates required capabilities', () => { + const probe = createAdapter(createInspector()).probe({ + requiredCapabilities: ['websocketFrames', 'requestBody'] + }) + expect(probe.available).toBe(false) + expect(probe.diagnostics).toContainEqual( + expect.objectContaining({ + code: 'NND_NATIVE_REQUIRED_CAPABILITY_UNAVAILABLE', + details: { missingCapabilities: ['websocketFrames', 'requestBody'] } + }) + ) + }) + + test('keeps older supported runtimes explicit-only', () => { + const probe = createAdapter(createInspector(), { nodeVersion: '22.20.0' }).probe() + expect(probe.available).toBe(true) + expect(probe.autoSelectable).toBe(false) + expect(probe.diagnostics).toContainEqual( + expect.objectContaining({ + code: 'NND_NATIVE_AUTO_BASELINE_UNPROVEN', + level: 'warn' + }) + ) + }) +}) + +describe('NodeNativeAdapter start and ownership', () => { + test('forced start exposes the first actionable probe error', async () => { + const adapter = createAdapter(createInspector(), { execArgv: [] }) + await expect(adapter.start()).rejects.toMatchObject({ + code: 'NND_NATIVE_FLAG_REQUIRED', + hint: expect.stringContaining('--experimental-network-inspection') + }) + }) + + test('reuses an existing target without opening or closing it', async () => { + const inspector = createInspector() + const requestJson = vi.fn().mockResolvedValue(descriptor()) + const session = await createAdapter(inspector, { requestJson }).start() + + expect(inspector.open).not.toHaveBeenCalled() + expect(session.target.webSocketDebuggerUrl).toBe(inspectorUrl) + expect(requestJson).toHaveBeenCalledWith('http://127.0.0.1:9229/json/list', 500) + + await session.dispose() + expect(inspector.close).not.toHaveBeenCalled() + }) + + test('opens an OS-assigned target and disposes only its owned handle', async () => { + const inspector = createInspector(null) + const disposeSymbol = (Symbol as unknown as { dispose?: symbol }).dispose ?? Symbol('dispose') + const dispose = vi.fn() + ;(inspector.open as ReturnType).mockImplementation(() => { + ;(inspector.url as ReturnType).mockReturnValue(inspectorUrl) + return { [disposeSymbol]: dispose } + }) + + const originalSymbolDispose = (Symbol as unknown as { dispose?: symbol }).dispose + if (!originalSymbolDispose) { + Object.defineProperty(Symbol, 'dispose', { value: disposeSymbol, configurable: true }) + } + + try { + const session = await createAdapter(inspector).start({ + inspector: { host: 'localhost', port: 0 } + }) + expect(inspector.open).toHaveBeenCalledWith(0, 'localhost', false) + + await session.dispose() + await session.dispose() + expect(dispose).toHaveBeenCalledTimes(1) + expect(inspector.close).not.toHaveBeenCalled() + } finally { + if (!originalSymbolDispose) { + delete (Symbol as unknown as { dispose?: symbol }).dispose + } + } + }) + + test('closes an owned Inspector when target discovery fails', async () => { + const inspector = createInspector(null) + const adapter = createAdapter(inspector, { + requestJson: vi.fn().mockRejectedValue(new Error('connection refused')), + discovery: { attempts: 1 } + }) + + await expect(adapter.start()).rejects.toMatchObject({ + code: 'NND_NATIVE_TARGET_DISCOVERY_FAILED' + }) + expect(inspector.close).toHaveBeenCalledTimes(1) + }) + + test('does not close a reused Inspector when target discovery fails', async () => { + const inspector = createInspector() + const adapter = createAdapter(inspector, { + requestJson: vi.fn().mockRejectedValue(new Error('connection refused')), + discovery: { attempts: 1 } + }) + + await expect(adapter.start()).rejects.toMatchObject({ + code: 'NND_NATIVE_TARGET_DISCOVERY_FAILED' + }) + expect(inspector.open).not.toHaveBeenCalled() + expect(inspector.close).not.toHaveBeenCalled() + }) + + test('closes an owned Inspector that does not publish a URL', async () => { + const inspector = createInspector(null) + ;(inspector.open as ReturnType).mockImplementation(() => undefined) + + await expect(createAdapter(inspector).start()).rejects.toMatchObject({ + code: 'NND_NATIVE_TARGET_URL_UNAVAILABLE' + }) + expect(inspector.close).toHaveBeenCalledTimes(1) + }) + + test('reports Inspector open failures with a stable code', async () => { + const inspector = createInspector(null) + ;(inspector.open as ReturnType).mockImplementation(() => { + throw new Error('address in use') + }) + + await expect(createAdapter(inspector).start()).rejects.toMatchObject({ + code: 'NND_NATIVE_TARGET_OPEN_FAILED', + hint: expect.stringContaining('--inspect=0') + }) + }) +}) diff --git a/packages/network-debugger/src/adapters/node-native/index.ts b/packages/network-debugger/src/adapters/node-native/index.ts new file mode 100644 index 0000000..71b9967 --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/index.ts @@ -0,0 +1,251 @@ +import * as nodeInspector from 'node:inspector' +import type { + AdapterProbe, + AdapterSession, + AdapterStartOptions, + DebugAdapter, + Diagnostic +} from '../types' +import { + NATIVE_CAPABILITIES, + NATIVE_NETWORK_INSPECTION_FLAG, + type NativeNetworkApi, + getMissingCapabilities, + getNativeCapabilities, + hasNativeInspectionFlag, + hasRequiredNativeMethods, + isNativeAutoBaseline, + parseNodeVersion, + supportsNativeNetworkInspection +} from './capability' +import { NodeNativeAdapterError, nativeDiagnostic } from './errors' +import { + discoverInspectorTarget, + type TargetDiscoveryDependencies, + type TargetDiscoveryOptions +} from './inspector-target' + +export * from './capability' +export * from './errors' +export * from './inspector-target' + +export interface InspectorDisposable { + [key: symbol]: unknown +} + +export interface NativeInspectorApi { + url(): string | undefined + open(port?: number, host?: string, wait?: boolean): void | InspectorDisposable + close(): void + Network?: NativeNetworkApi +} + +export interface NodeNativeAdapterDependencies extends TargetDiscoveryDependencies { + inspector?: NativeInspectorApi | null + inspectorAvailable?: boolean | (() => boolean) + execArgv?: readonly string[] | (() => readonly string[]) + nodeVersion?: string | (() => string) + discovery?: TargetDiscoveryOptions +} + +function resolveValue(value: T | (() => T)): T { + return typeof value === 'function' ? (value as () => T)() : value +} + +function defaultInspectorAvailable() { + return process.features?.inspector !== false +} + +function errorDiagnostic( + code: string, + message: string, + hint: string, + details?: Readonly> +) { + return nativeDiagnostic(code, message, hint, details) +} + +export class NodeNativeAdapter implements DebugAdapter { + readonly kind = 'native' as const + private readonly dependencies: NodeNativeAdapterDependencies + + constructor(dependencies: NodeNativeAdapterDependencies = {}) { + this.dependencies = dependencies + } + + probe(options: AdapterStartOptions = {}): AdapterProbe { + const diagnostics: Diagnostic[] = [] + const inspector = + this.dependencies.inspector === undefined + ? (nodeInspector as unknown as NativeInspectorApi) + : this.dependencies.inspector + const inspectorAvailable = resolveValue( + this.dependencies.inspectorAvailable ?? defaultInspectorAvailable + ) + const nodeVersionText = resolveValue( + this.dependencies.nodeVersion ?? (() => process.versions.node) + ) + const version = parseNodeVersion(nodeVersionText) + const execArgv = resolveValue(this.dependencies.execArgv ?? (() => process.execArgv)) + const network = inspector?.Network + const capabilities = getNativeCapabilities(version, network) + + if (!inspectorAvailable || !inspector) { + diagnostics.push( + errorDiagnostic( + 'NND_NATIVE_INSPECTOR_UNAVAILABLE', + 'This Node.js runtime was built without Inspector support.', + 'Use an official Node.js build with Inspector support, or select the Legacy adapter.' + ) + ) + } + + if (!supportsNativeNetworkInspection(version)) { + diagnostics.push( + errorDiagnostic( + 'NND_NATIVE_RUNTIME_UNSUPPORTED', + `Node.js ${nodeVersionText} does not support native network inspection.`, + 'Upgrade to Node.js 20.18+, 22.6+, or a newer release, or select the Legacy adapter.', + { nodeVersion: nodeVersionText } + ) + ) + } + + if (!hasNativeInspectionFlag(execArgv)) { + diagnostics.push( + errorDiagnostic( + 'NND_NATIVE_FLAG_REQUIRED', + `Native network inspection requires ${NATIVE_NETWORK_INSPECTION_FLAG}.`, + `Restart with: node --inspect=0 ${NATIVE_NETWORK_INSPECTION_FLAG} `, + { execArgv: [...execArgv] } + ) + ) + } + + if (inspector && !hasRequiredNativeMethods(network)) { + diagnostics.push( + errorDiagnostic( + 'NND_NATIVE_METHODS_UNAVAILABLE', + 'The required node:inspector Network methods are unavailable in this runtime.', + 'Upgrade Node.js or select the Legacy adapter.' + ) + ) + } + + const missingCapabilities = getMissingCapabilities(capabilities, options.requiredCapabilities) + if (missingCapabilities.length > 0) { + diagnostics.push( + errorDiagnostic( + 'NND_NATIVE_REQUIRED_CAPABILITY_UNAVAILABLE', + `Native network inspection cannot provide: ${missingCapabilities.join(', ')}.`, + 'Remove the unsupported requirement or select an adapter that provides it.', + { missingCapabilities } + ) + ) + } + + const runtimeSupported = supportsNativeNetworkInspection(version) + if (runtimeSupported && !isNativeAutoBaseline(version)) { + diagnostics.push( + nativeDiagnostic( + 'NND_NATIVE_AUTO_BASELINE_UNPROVEN', + `Node.js ${nodeVersionText} supports explicit Native mode but is below the proven Auto baseline.`, + 'Use Node.js 24.7+ for Auto selection, or explicitly select Native mode.', + { nodeVersion: nodeVersionText }, + 'warn' + ) + ) + } + + const available = !diagnostics.some((diagnostic) => diagnostic.level === 'error') + return { + kind: this.kind, + available, + autoSelectable: available && isNativeAutoBaseline(version), + capabilities, + diagnostics + } + } + + async start(options: AdapterStartOptions = {}): Promise { + const probe = this.probe(options) + if (!probe.available) { + const diagnostic = probe.diagnostics.find((item) => item.level === 'error')! + throw new NodeNativeAdapterError(diagnostic, probe.diagnostics) + } + + const inspector = ( + this.dependencies.inspector === undefined + ? (nodeInspector as unknown as NativeInspectorApi) + : this.dependencies.inspector + )! + let inspectorUrl = inspector.url() + let owned = false + let disposable: void | InspectorDisposable = undefined + + if (!inspectorUrl) { + const port = options.inspector?.port ?? 0 + const host = options.inspector?.host ?? '127.0.0.1' + try { + disposable = inspector.open(port, host, false) + owned = true + inspectorUrl = inspector.url() + } catch (error) { + const diagnostic = errorDiagnostic( + 'NND_NATIVE_TARGET_OPEN_FAILED', + `Unable to open the Node Inspector on ${host}:${port}.`, + 'Choose another Inspector port or start Node with --inspect=0.', + { cause: error instanceof Error ? error.message : String(error), host, port } + ) + throw new NodeNativeAdapterError(diagnostic, [...probe.diagnostics, diagnostic]) + } + + if (!inspectorUrl) { + this.closeOwnedInspector(inspector, disposable) + const diagnostic = errorDiagnostic( + 'NND_NATIVE_TARGET_URL_UNAVAILABLE', + 'Node Inspector opened without publishing a target URL.', + 'Start Node with --inspect=0 and retry.' + ) + throw new NodeNativeAdapterError(diagnostic, [...probe.diagnostics, diagnostic]) + } + } + + try { + const target = await discoverInspectorTarget( + inspectorUrl, + this.dependencies.discovery, + this.dependencies + ) + let disposed = false + + return { + kind: this.kind, + capabilities: probe.capabilities, + target, + diagnostics: probe.diagnostics, + dispose: async () => { + if (disposed) return + disposed = true + if (owned) this.closeOwnedInspector(inspector, disposable) + } + } + } catch (error) { + if (owned) this.closeOwnedInspector(inspector, disposable) + throw error + } + } + + private closeOwnedInspector( + inspector: NativeInspectorApi, + disposable: void | InspectorDisposable + ) { + const disposeSymbol = (Symbol as unknown as { dispose?: symbol }).dispose + const dispose = disposeSymbol && disposable?.[disposeSymbol] + if (typeof dispose === 'function') { + dispose.call(disposable) + return + } + inspector.close() + } +} diff --git a/packages/network-debugger/src/adapters/node-native/inspector-target.test.ts b/packages/network-debugger/src/adapters/node-native/inspector-target.test.ts new file mode 100644 index 0000000..084dae6 --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/inspector-target.test.ts @@ -0,0 +1,95 @@ +import { describe, expect, test, vi } from 'vitest' +import { NodeNativeAdapterError } from './errors' +import { discoverInspectorTarget, getInspectorDiscoveryUrl } from './inspector-target' + +describe('Inspector target discovery', () => { + test('maps an Inspector WebSocket URL to the standard discovery endpoint', () => { + expect(getInspectorDiscoveryUrl('ws://127.0.0.1:9229/target-id')).toBe( + 'http://127.0.0.1:9229/json/list' + ) + }) + + test('rejects non-Inspector protocols', () => { + expect(() => getInspectorDiscoveryUrl('http://127.0.0.1:9229/target-id')).toThrow( + 'Unsupported Inspector URL protocol' + ) + expect(() => getInspectorDiscoveryUrl('wss://localhost:9443/target-id')).toThrow( + 'Unsupported Inspector URL protocol' + ) + }) + + test('selects the descriptor matching the Inspector target id', async () => { + const requestJson = vi.fn().mockResolvedValue([ + { + id: 'different', + title: 'different', + type: 'node', + url: 'file://', + webSocketDebuggerUrl: 'ws://127.0.0.1:9229/different' + }, + { + id: 'target-id', + title: 'node[123]', + type: 'node', + url: 'file:///app.js', + webSocketDebuggerUrl: 'ws://localhost:9229/target-id', + devtoolsFrontendUrl: 'devtools://native-target' + } + ]) + + const target = await discoverInspectorTarget( + 'ws://127.0.0.1:9229/target-id', + { attempts: 1 }, + { requestJson } + ) + + expect(target).toEqual({ + id: 'target-id', + title: 'node[123]', + type: 'node', + url: 'file:///app.js', + webSocketDebuggerUrl: 'ws://localhost:9229/target-id', + devtoolsFrontendUrl: 'devtools://native-target', + discoveryUrl: 'http://127.0.0.1:9229/json/list' + }) + }) + + test('retries discovery with bounded attempts', async () => { + const requestJson = vi + .fn() + .mockRejectedValueOnce(new Error('not listening')) + .mockResolvedValueOnce([ + { + id: 'target-id', + webSocketDebuggerUrl: 'ws://127.0.0.1:9229/target-id' + } + ]) + const sleep = vi.fn().mockResolvedValue(undefined) + + const target = await discoverInspectorTarget( + 'ws://127.0.0.1:9229/target-id', + { attempts: 2, requestTimeoutMs: 10, retryDelayMs: 1 }, + { requestJson, sleep } + ) + + expect(target.id).toBe('target-id') + expect(requestJson).toHaveBeenCalledTimes(2) + expect(requestJson).toHaveBeenCalledWith('http://127.0.0.1:9229/json/list', 10) + expect(sleep).toHaveBeenCalledWith(1) + }) + + test('fails with a stable discovery code after exhausting retries', async () => { + const requestJson = vi.fn().mockRejectedValue(new Error('connection refused')) + + await expect( + discoverInspectorTarget( + 'ws://127.0.0.1:9229/target-id', + { attempts: 2, retryDelayMs: 0 }, + { requestJson, sleep: vi.fn().mockResolvedValue(undefined) } + ) + ).rejects.toMatchObject({ + code: 'NND_NATIVE_TARGET_DISCOVERY_FAILED' + }) + expect(requestJson).toHaveBeenCalledTimes(2) + }) +}) diff --git a/packages/network-debugger/src/adapters/node-native/inspector-target.ts b/packages/network-debugger/src/adapters/node-native/inspector-target.ts new file mode 100644 index 0000000..4be3e32 --- /dev/null +++ b/packages/network-debugger/src/adapters/node-native/inspector-target.ts @@ -0,0 +1,159 @@ +import * as http from 'node:http' +import type { DevtoolsTarget } from '../types' +import { NodeNativeAdapterError, nativeDiagnostic } from './errors' + +export interface RawInspectorTarget { + id?: unknown + title?: unknown + type?: unknown + url?: unknown + webSocketDebuggerUrl?: unknown + devtoolsFrontendUrl?: unknown + devtoolsFrontendUrlCompat?: unknown +} + +export interface TargetDiscoveryOptions { + attempts?: number + requestTimeoutMs?: number + retryDelayMs?: number +} + +export interface TargetDiscoveryDependencies { + requestJson?: (url: string, timeoutMs: number) => Promise + sleep?: (milliseconds: number) => Promise +} + +const DEFAULT_DISCOVERY_OPTIONS: Required = { + attempts: 5, + requestTimeoutMs: 500, + retryDelayMs: 25 +} + +function requestJson(url: string, timeoutMs: number): Promise { + return new Promise((resolve, reject) => { + const parsed = new URL(url) + const request = http.get(parsed, (response) => { + const chunks: Buffer[] = [] + + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.on('end', () => { + const statusCode = response.statusCode ?? 0 + if (statusCode < 200 || statusCode >= 300) { + reject(new Error(`Inspector discovery returned HTTP ${statusCode}`)) + return + } + + try { + resolve(JSON.parse(Buffer.concat(chunks).toString('utf8'))) + } catch (error) { + reject(error) + } + }) + }) + + request.setTimeout(timeoutMs, () => { + request.destroy(new Error(`Inspector discovery timed out after ${timeoutMs}ms`)) + }) + request.on('error', reject) + }) +} + +function sleep(milliseconds: number) { + return new Promise((resolve) => setTimeout(resolve, milliseconds)) +} + +export function getInspectorDiscoveryUrl(webSocketUrl: string) { + const parsed = new URL(webSocketUrl) + // node:inspector exposes a local, non-TLS WebSocket endpoint. Supporting + // arbitrary remote WSS proxies here would make target ownership ambiguous. + if (parsed.protocol !== 'ws:') { + throw new Error(`Unsupported Inspector URL protocol: ${parsed.protocol}`) + } + parsed.protocol = 'http:' + parsed.pathname = '/json/list' + parsed.search = '' + parsed.hash = '' + return parsed.toString() +} + +function isString(value: unknown): value is string { + return typeof value === 'string' +} + +function normalizeTarget( + rawTarget: RawInspectorTarget, + discoveryUrl: string +): DevtoolsTarget | null { + if (!isString(rawTarget.id) || !isString(rawTarget.webSocketDebuggerUrl)) return null + + return { + id: rawTarget.id, + title: isString(rawTarget.title) ? rawTarget.title : 'Node.js', + type: isString(rawTarget.type) ? rawTarget.type : 'node', + url: isString(rawTarget.url) ? rawTarget.url : '', + webSocketDebuggerUrl: rawTarget.webSocketDebuggerUrl, + ...(isString(rawTarget.devtoolsFrontendUrl) + ? { devtoolsFrontendUrl: rawTarget.devtoolsFrontendUrl } + : {}), + ...(isString(rawTarget.devtoolsFrontendUrlCompat) + ? { devtoolsFrontendUrlCompat: rawTarget.devtoolsFrontendUrlCompat } + : {}), + discoveryUrl + } +} + +function selectTarget(payload: unknown, inspectorUrl: string, discoveryUrl: string) { + if (!Array.isArray(payload)) return null + + const targets = payload + .map((target) => normalizeTarget(target as RawInspectorTarget, discoveryUrl)) + .filter((target): target is DevtoolsTarget => target !== null) + + const inspectorId = new URL(inspectorUrl).pathname.replace(/^\//, '') + return ( + targets.find((target) => target.webSocketDebuggerUrl === inspectorUrl) ?? + targets.find((target) => target.id === inspectorId) ?? + targets.find((target) => target.type === 'node') ?? + targets[0] ?? + null + ) +} + +export async function discoverInspectorTarget( + inspectorUrl: string, + options: TargetDiscoveryOptions = {}, + dependencies: TargetDiscoveryDependencies = {} +): Promise { + const normalizedOptions = { ...DEFAULT_DISCOVERY_OPTIONS, ...options } + const fetchJson = dependencies.requestJson ?? requestJson + const wait = dependencies.sleep ?? sleep + const discoveryUrl = getInspectorDiscoveryUrl(inspectorUrl) + let lastError: unknown + + for (let attempt = 1; attempt <= normalizedOptions.attempts; attempt++) { + try { + const payload = await fetchJson(discoveryUrl, normalizedOptions.requestTimeoutMs) + const target = selectTarget(payload, inspectorUrl, discoveryUrl) + if (target) return target + throw new Error('Inspector discovery did not return a matching Node target') + } catch (error) { + lastError = error + if (attempt < normalizedOptions.attempts) { + await wait(normalizedOptions.retryDelayMs) + } + } + } + + const diagnostic = nativeDiagnostic( + 'NND_NATIVE_TARGET_DISCOVERY_FAILED', + `Unable to discover the Node Inspector target at ${discoveryUrl}.`, + 'Verify that the Inspector endpoint is still running and retry.', + { + inspectorUrl, + discoveryUrl, + attempts: normalizedOptions.attempts, + cause: lastError instanceof Error ? lastError.message : String(lastError) + } + ) + throw new NodeNativeAdapterError(diagnostic) +} diff --git a/packages/network-debugger/src/adapters/selector.test.ts b/packages/network-debugger/src/adapters/selector.test.ts new file mode 100644 index 0000000..9bf4439 --- /dev/null +++ b/packages/network-debugger/src/adapters/selector.test.ts @@ -0,0 +1,479 @@ +import { describe, expect, test, vi } from 'vitest' +import { AdapterSelectionError, AdapterSelector, type AdapterSelectionErrorCode } from './selector' +import { + NETWORK_CAPABILITIES, + type AdapterKind, + type AdapterProbe, + type CapabilityMap, + type DebugAdapter, + type Diagnostic, + type NetworkCapability +} from './types' + +const capabilities = ( + enabled: readonly NetworkCapability[] = NETWORK_CAPABILITIES +): CapabilityMap => { + const enabledSet = new Set(enabled) + return Object.fromEntries( + NETWORK_CAPABILITIES.map((capability) => [capability, enabledSet.has(capability)]) + ) as unknown as CapabilityMap +} + +const diagnostic = (code: string): Diagnostic => ({ + code, + level: 'warn', + message: code +}) + +const adapter = ( + kind: AdapterKind, + probe: AdapterProbe | (() => AdapterProbe | Promise) +): DebugAdapter => ({ + kind, + probe: vi.fn(typeof probe === 'function' ? probe : () => probe), + start: vi.fn(async () => ({ + kind, + capabilities: capabilities(), + target: { + id: kind, + title: kind, + type: 'node', + url: 'file://', + webSocketDebuggerUrl: `ws://127.0.0.1/${kind}`, + discoveryUrl: 'http://127.0.0.1/json/list' + }, + diagnostics: [], + dispose: async () => {} + })) as DebugAdapter['start'] +}) + +const probe = ( + kind: AdapterKind, + options: { + available?: boolean + enabled?: readonly NetworkCapability[] + diagnostics?: readonly Diagnostic[] + autoSelectable?: boolean + } = {} +): AdapterProbe => ({ + kind, + available: options.available ?? true, + ...(options.autoSelectable === undefined ? {} : { autoSelectable: options.autoSelectable }), + capabilities: capabilities(options.enabled), + diagnostics: options.diagnostics ?? [] +}) + +const expectSelectionError = async ( + promise: Promise, + code: AdapterSelectionErrorCode +): Promise => { + try { + await promise + } catch (error) { + expect(error).toBeInstanceOf(AdapterSelectionError) + expect((error as AdapterSelectionError).code).toBe(code) + return error as AdapterSelectionError + } + throw new Error(`Expected ${code}`) +} + +describe('AdapterSelector', () => { + test('auto prefers a capable native adapter and does not probe legacy', async () => { + const native = adapter('native', probe('native')) + const legacy = adapter('legacy', probe('legacy')) + + const selection = await new AdapterSelector([legacy, native]).select({ + mode: 'auto', + requiredCapabilities: ['fetch', 'responseBody'] + }) + + expect(selection).toEqual({ + adapter: native, + probe: probe('native') + }) + expect(native.probe).toHaveBeenCalledOnce() + expect(native.probe).toHaveBeenCalledWith({ + requiredCapabilities: ['fetch', 'responseBody'] + }) + expect(legacy.probe).not.toHaveBeenCalled() + }) + + test('auto is the default mode and supports a synchronous probe', async () => { + const nativeProbe = probe('native') + const native = adapter('native', () => nativeProbe) + + const selection = await new AdapterSelector([native]).select() + + expect(selection.adapter).toBe(native) + expect(selection.probe).toBe(nativeProbe) + expect(selection.fallbackReason).toBeUndefined() + }) + + test('supports an asynchronous probe and forwards inspector options', async () => { + const nativeProbe = probe('native') + const native = adapter('native', async () => nativeProbe) + + const selection = await new AdapterSelector([native]).select({ + mode: 'native', + inspector: { host: '127.0.0.1', port: 9230 } + }) + + expect(selection.probe).toBe(nativeProbe) + expect(native.probe).toHaveBeenCalledWith({ + inspector: { host: '127.0.0.1', port: 9230 } + }) + }) + + test('normalizes duplicate and unordered required capabilities deterministically', async () => { + const native = adapter('native', probe('native')) + + await new AdapterSelector([native]).select({ + mode: 'native', + requiredCapabilities: ['responseBody', 'http', 'responseBody'] + }) + + expect(native.probe).toHaveBeenCalledWith({ + requiredCapabilities: ['http', 'responseBody'] + }) + }) + + test('forced native fails with a stable unavailable error when not registered', async () => { + const error = await expectSelectionError( + new AdapterSelector([]).select({ mode: 'native' }), + 'NND_ADAPTER_UNAVAILABLE' + ) + + expect(error.message).toBe('Adapter "native" is not registered.') + expect(error.details).toEqual({ + kind: 'native', + requiredCapabilities: [], + reason: 'not_registered' + }) + }) + + test('forced native fails with a stable unavailable error and retains diagnostics', async () => { + const native = adapter( + 'native', + probe('native', { + available: false, + diagnostics: [diagnostic('NND_NATIVE_FLAG_MISSING')] + }) + ) + + const error = await expectSelectionError( + new AdapterSelector([native]).select({ mode: 'native' }), + 'NND_ADAPTER_UNAVAILABLE' + ) + + expect(error.message).toBe('Adapter "native" is unavailable.') + expect(error.details).toEqual({ + kind: 'native', + requiredCapabilities: [], + reason: 'unavailable', + diagnosticCodes: ['NND_NATIVE_FLAG_MISSING'], + diagnostics: [diagnostic('NND_NATIVE_FLAG_MISSING')] + }) + }) + + test('forced legacy fails with missing capabilities in canonical order', async () => { + const legacy = adapter( + 'legacy', + probe('legacy', { + enabled: ['https'] + }) + ) + + const error = await expectSelectionError( + new AdapterSelector([legacy]).select({ + mode: 'legacy', + requiredCapabilities: ['responseBody', 'http', 'fetch'] + }), + 'NND_ADAPTER_CAPABILITY_MISSING' + ) + + expect(error.message).toBe( + 'Adapter "legacy" does not provide required capabilities: http, fetch, responseBody.' + ) + expect(error.details).toEqual({ + kind: 'legacy', + requiredCapabilities: ['http', 'fetch', 'responseBody'], + reason: 'missing_capabilities', + missingCapabilities: ['http', 'fetch', 'responseBody'], + diagnosticCodes: [] + }) + }) + + test('forced mode wraps a rejected probe in a stable error', async () => { + const native = adapter('native', async () => { + throw new Error('probe exploded') + }) + + const error = await expectSelectionError( + new AdapterSelector([native]).select({ mode: 'native' }), + 'NND_ADAPTER_PROBE_FAILED' + ) + + expect(error.message).toBe('Adapter "native" probe failed: probe exploded.') + expect(error.details).toEqual({ + kind: 'native', + requiredCapabilities: [], + reason: 'probe_failed', + error: 'probe exploded' + }) + }) + + test('forced mode rejects a probe whose kind does not match its adapter', async () => { + const native = adapter('native', probe('legacy')) + + const error = await expectSelectionError( + new AdapterSelector([native]).select({ mode: 'native' }), + 'NND_INVALID_ADAPTER_PROBE' + ) + + expect(error.details).toEqual({ + kind: 'native', + requiredCapabilities: [], + reason: 'invalid_probe', + error: 'Expected "native", received "legacy".' + }) + }) + + test('auto falls back when native is unavailable with a deterministic diagnostic', async () => { + const native = adapter( + 'native', + probe('native', { + available: false, + diagnostics: [diagnostic('NND_NATIVE_FLAG_MISSING')] + }) + ) + const legacyProbe = probe('legacy') + const legacy = adapter('legacy', legacyProbe) + + const selection = await new AdapterSelector([native, legacy]).select({ + requiredCapabilities: ['fetch'] + }) + + expect(selection.adapter).toBe(legacy) + expect(selection.probe).toBe(legacyProbe) + expect(selection.fallbackReason).toEqual({ + code: 'NND_AUTO_FALLBACK', + level: 'warn', + message: 'Native adapter cannot satisfy this selection; using legacy adapter.', + hint: 'Use mode "native" to fail instead of falling back.', + details: { + from: 'native', + to: 'legacy', + reason: 'unavailable', + requiredCapabilities: ['fetch'], + diagnosticCodes: ['NND_NATIVE_FLAG_MISSING'], + diagnostics: [diagnostic('NND_NATIVE_FLAG_MISSING')] + } + }) + }) + + test('auto falls back when native is available but not auto-selectable', async () => { + const baselineDiagnostic = diagnostic('NND_NATIVE_AUTO_BASELINE_UNMET') + const nativeProbe = probe('native', { + autoSelectable: false, + diagnostics: [baselineDiagnostic] + }) + const native = adapter('native', nativeProbe) + const legacy = adapter('legacy', probe('legacy')) + + const selection = await new AdapterSelector([native, legacy]).select({ + requiredCapabilities: ['http', 'fetch'] + }) + + expect(selection.adapter).toBe(legacy) + expect(selection.fallbackReason?.details).toEqual({ + from: 'native', + to: 'legacy', + reason: 'not_auto_selectable', + requiredCapabilities: ['http', 'fetch'], + diagnosticCodes: ['NND_NATIVE_AUTO_BASELINE_UNMET'], + diagnostics: [baselineDiagnostic] + }) + }) + + test('forced native ignores autoSelectable while still enforcing capabilities', async () => { + const nativeProbe = probe('native', { + autoSelectable: false, + enabled: ['http'], + diagnostics: [diagnostic('NND_NATIVE_AUTO_BASELINE_UNMET')] + }) + const native = adapter('native', nativeProbe) + + const selection = await new AdapterSelector([native]).select({ + mode: 'native', + requiredCapabilities: ['http'] + }) + + expect(selection).toEqual({ adapter: native, probe: nativeProbe }) + }) + + test('auto falls back when native lacks requirements and explains which ones', async () => { + const native = adapter( + 'native', + probe('native', { + enabled: ['http'] + }) + ) + const legacy = adapter('legacy', probe('legacy')) + + const selection = await new AdapterSelector([native, legacy]).select({ + requiredCapabilities: ['responseBody', 'http', 'fetch'] + }) + + expect(selection.adapter).toBe(legacy) + expect(selection.fallbackReason?.details).toEqual({ + from: 'native', + to: 'legacy', + reason: 'missing_capabilities', + requiredCapabilities: ['http', 'fetch', 'responseBody'], + missingCapabilities: ['fetch', 'responseBody'], + diagnosticCodes: [] + }) + }) + + test('auto falls back when native is not registered', async () => { + const legacy = adapter('legacy', probe('legacy')) + + const selection = await new AdapterSelector([legacy]).select() + + expect(selection.adapter).toBe(legacy) + expect(selection.fallbackReason?.details).toEqual({ + from: 'native', + to: 'legacy', + reason: 'not_registered', + requiredCapabilities: [] + }) + }) + + test('auto falls back after a native probe failure', async () => { + const native = adapter('native', () => { + throw 'synchronous failure' + }) + const legacy = adapter('legacy', probe('legacy')) + + const selection = await new AdapterSelector([native, legacy]).select() + + expect(selection.adapter).toBe(legacy) + expect(selection.fallbackReason?.details).toEqual({ + from: 'native', + to: 'legacy', + reason: 'probe_failed', + requiredCapabilities: [], + error: 'synchronous failure' + }) + }) + + test('auto fails explicitly with deterministic attempts when neither adapter is capable', async () => { + const native = adapter( + 'native', + probe('native', { + available: false, + diagnostics: [diagnostic('NND_NATIVE_UNAVAILABLE')] + }) + ) + const legacy = adapter( + 'legacy', + probe('legacy', { + enabled: ['http'] + }) + ) + + const error = await expectSelectionError( + new AdapterSelector([legacy, native]).select({ + requiredCapabilities: ['fetch', 'responseBody'] + }), + 'NND_NO_CAPABLE_ADAPTER' + ) + + expect(error.message).toBe( + 'No available adapter satisfies required capabilities: fetch, responseBody.' + ) + expect(error.details).toEqual({ + requiredCapabilities: ['fetch', 'responseBody'], + attempts: [ + { + kind: 'native', + reason: 'unavailable', + diagnosticCodes: ['NND_NATIVE_UNAVAILABLE'], + diagnostics: [diagnostic('NND_NATIVE_UNAVAILABLE')] + }, + { + kind: 'legacy', + reason: 'missing_capabilities', + missingCapabilities: ['fetch', 'responseBody'], + diagnosticCodes: [] + } + ] + }) + }) + + test('auto does not select a legacy adapter that explicitly opts out', async () => { + const legacyDiagnostic = diagnostic('NND_LEGACY_AUTO_DISABLED') + const legacy = adapter( + 'legacy', + probe('legacy', { + autoSelectable: false, + diagnostics: [legacyDiagnostic] + }) + ) + + const error = await expectSelectionError( + new AdapterSelector([legacy]).select(), + 'NND_NO_CAPABLE_ADAPTER' + ) + + expect(error.details).toEqual({ + requiredCapabilities: [], + attempts: [ + { kind: 'native', reason: 'not_registered' }, + { + kind: 'legacy', + reason: 'not_auto_selectable', + diagnosticCodes: ['NND_LEGACY_AUTO_DISABLED'], + diagnostics: [legacyDiagnostic] + } + ] + }) + }) + + test('auto reports no available adapter when none are registered', async () => { + const error = await expectSelectionError( + new AdapterSelector([]).select(), + 'NND_NO_CAPABLE_ADAPTER' + ) + + expect(error.message).toBe('No available adapter satisfies required capabilities: (none).') + expect(error.details).toEqual({ + requiredCapabilities: [], + attempts: [ + { kind: 'native', reason: 'not_registered' }, + { kind: 'legacy', reason: 'not_registered' } + ] + }) + }) + + test('constructor rejects duplicate adapter kinds deterministically', () => { + const first = adapter('native', probe('native')) + const second = adapter('native', probe('native')) + + expect(() => new AdapterSelector([first, second])).toThrowError( + expect.objectContaining({ + code: 'NND_DUPLICATE_ADAPTER', + message: 'Adapter "native" is registered more than once.', + details: { kind: 'native' } + }) + ) + }) + + test('selection never starts an adapter', async () => { + const native = adapter('native', probe('native')) + + await new AdapterSelector([native]).select({ mode: 'native' }) + + expect(native.start).not.toHaveBeenCalled() + }) +}) diff --git a/packages/network-debugger/src/adapters/selector.ts b/packages/network-debugger/src/adapters/selector.ts new file mode 100644 index 0000000..557dd87 --- /dev/null +++ b/packages/network-debugger/src/adapters/selector.ts @@ -0,0 +1,350 @@ +import { + NETWORK_CAPABILITIES, + type AdapterKind, + type AdapterMode, + type AdapterProbe, + type AdapterSelection, + type AdapterStartOptions, + type DebugAdapter, + type Diagnostic, + type NetworkCapability +} from './types' + +export interface AdapterSelectionOptions extends AdapterStartOptions { + /** + * `auto` prefers the native adapter and falls back to legacy only when the + * native adapter is unavailable or cannot provide every required capability. + * + * @default 'auto' + */ + mode?: AdapterMode +} + +export type AdapterSelectionErrorCode = + | 'NND_DUPLICATE_ADAPTER' + | 'NND_ADAPTER_UNAVAILABLE' + | 'NND_ADAPTER_PROBE_FAILED' + | 'NND_ADAPTER_CAPABILITY_MISSING' + | 'NND_INVALID_ADAPTER_PROBE' + | 'NND_NO_CAPABLE_ADAPTER' + +export type AdapterSelectionFailureReason = + | 'not_registered' + | 'probe_failed' + | 'unavailable' + | 'not_auto_selectable' + | 'missing_capabilities' + | 'invalid_probe' + +export interface AdapterSelectionAttempt { + kind: AdapterKind + reason: AdapterSelectionFailureReason + missingCapabilities?: readonly NetworkCapability[] + diagnosticCodes?: readonly string[] + diagnostics?: readonly Diagnostic[] + error?: string +} + +export class AdapterSelectionError extends Error { + readonly code: AdapterSelectionErrorCode + readonly details: Readonly> + readonly cause?: unknown + + constructor( + code: AdapterSelectionErrorCode, + message: string, + details: Readonly> = {}, + cause?: unknown + ) { + super(message) + this.name = 'AdapterSelectionError' + this.code = code + this.details = details + this.cause = cause + } +} + +interface SuccessfulProbe { + adapter: DebugAdapter + probe: AdapterProbe +} + +interface FailedProbe { + adapter?: DebugAdapter + attempt: AdapterSelectionAttempt +} + +type ProbeResult = SuccessfulProbe | FailedProbe + +const isSuccessfulProbe = (result: ProbeResult): result is SuccessfulProbe => 'probe' in result + +const normalizeRequiredCapabilities = ( + capabilities: readonly NetworkCapability[] | undefined +): readonly NetworkCapability[] => { + if (!capabilities?.length) return [] + + const requested = new Set(capabilities) + return NETWORK_CAPABILITIES.filter((capability) => requested.has(capability)) +} + +const getMissingCapabilities = ( + probe: AdapterProbe, + requiredCapabilities: readonly NetworkCapability[] +): readonly NetworkCapability[] => + requiredCapabilities.filter((capability) => !probe.capabilities[capability]) + +const errorMessage = (error: unknown): string => { + if (error instanceof Error) return error.message + return String(error) +} + +const diagnosticCodes = (probe: AdapterProbe): readonly string[] => + probe.diagnostics.map((diagnostic) => diagnostic.code) + +/** + * Selects a runtime adapter without starting it. + * + * Selection is deliberately deterministic: adapters are addressed by kind, + * `auto` always probes native first, and capability lists use the canonical + * NETWORK_CAPABILITIES order. + */ +export class AdapterSelector { + private readonly adapters: ReadonlyMap + + constructor(adapters: readonly DebugAdapter[]) { + const byKind = new Map() + + for (const adapter of adapters) { + if (byKind.has(adapter.kind)) { + throw new AdapterSelectionError( + 'NND_DUPLICATE_ADAPTER', + `Adapter "${adapter.kind}" is registered more than once.`, + { kind: adapter.kind } + ) + } + byKind.set(adapter.kind, adapter) + } + + this.adapters = byKind + } + + async select(options: AdapterSelectionOptions = {}): Promise { + const mode = options.mode ?? 'auto' + const requiredCapabilities = normalizeRequiredCapabilities(options.requiredCapabilities) + const probeOptions: AdapterStartOptions = { + ...(options.inspector ? { inspector: options.inspector } : {}), + ...(requiredCapabilities.length > 0 ? { requiredCapabilities } : {}) + } + + if (mode === 'native' || mode === 'legacy') { + return this.selectForced(mode, requiredCapabilities, probeOptions) + } + + return this.selectAuto(requiredCapabilities, probeOptions) + } + + private async selectForced( + kind: AdapterKind, + requiredCapabilities: readonly NetworkCapability[], + probeOptions: AdapterStartOptions + ): Promise { + const result = await this.probe(kind, requiredCapabilities, probeOptions) + + if (isSuccessfulProbe(result)) { + return { + adapter: result.adapter, + probe: result.probe + } + } + + const { attempt } = result + const details = { + ...attempt, + requiredCapabilities + } + + switch (attempt.reason) { + case 'not_registered': + throw new AdapterSelectionError( + 'NND_ADAPTER_UNAVAILABLE', + `Adapter "${kind}" is not registered.`, + details + ) + case 'unavailable': + throw new AdapterSelectionError( + 'NND_ADAPTER_UNAVAILABLE', + `Adapter "${kind}" is unavailable.`, + details + ) + case 'missing_capabilities': + throw new AdapterSelectionError( + 'NND_ADAPTER_CAPABILITY_MISSING', + `Adapter "${kind}" does not provide required capabilities: ${attempt.missingCapabilities!.join(', ')}.`, + details + ) + case 'not_auto_selectable': + // This result is only produced by auto-mode probes. + throw new AdapterSelectionError( + 'NND_ADAPTER_UNAVAILABLE', + `Adapter "${kind}" is not eligible for automatic selection.`, + details + ) + case 'invalid_probe': + throw new AdapterSelectionError( + 'NND_INVALID_ADAPTER_PROBE', + `Adapter "${kind}" returned a probe for a different adapter kind.`, + details + ) + case 'probe_failed': + throw new AdapterSelectionError( + 'NND_ADAPTER_PROBE_FAILED', + `Adapter "${kind}" probe failed: ${attempt.error}.`, + details, + attempt.error + ) + } + } + + private async selectAuto( + requiredCapabilities: readonly NetworkCapability[], + probeOptions: AdapterStartOptions + ): Promise { + const nativeResult = await this.probe('native', requiredCapabilities, probeOptions, true) + + if (isSuccessfulProbe(nativeResult)) { + return { + adapter: nativeResult.adapter, + probe: nativeResult.probe + } + } + + const legacyResult = await this.probe('legacy', requiredCapabilities, probeOptions, true) + + if (isSuccessfulProbe(legacyResult)) { + return { + adapter: legacyResult.adapter, + probe: legacyResult.probe, + fallbackReason: this.createFallbackDiagnostic(nativeResult.attempt, requiredCapabilities) + } + } + + const attempts = [nativeResult.attempt, legacyResult.attempt] + const requirementText = requiredCapabilities.length ? requiredCapabilities.join(', ') : '(none)' + + throw new AdapterSelectionError( + 'NND_NO_CAPABLE_ADAPTER', + `No available adapter satisfies required capabilities: ${requirementText}.`, + { + requiredCapabilities, + attempts + } + ) + } + + private async probe( + kind: AdapterKind, + requiredCapabilities: readonly NetworkCapability[], + options: AdapterStartOptions, + requireAutoSelectable = false + ): Promise { + const adapter = this.adapters.get(kind) + + if (!adapter) { + return { + attempt: { + kind, + reason: 'not_registered' + } + } + } + + let probe: AdapterProbe + try { + probe = await adapter.probe(options) + } catch (error) { + return { + adapter, + attempt: { + kind, + reason: 'probe_failed', + error: errorMessage(error) + } + } + } + + if (probe.kind !== kind) { + return { + adapter, + attempt: { + kind, + reason: 'invalid_probe', + error: `Expected "${kind}", received "${probe.kind}".` + } + } + } + + if (!probe.available) { + return { + adapter, + attempt: { + kind, + reason: 'unavailable', + diagnosticCodes: diagnosticCodes(probe), + ...(probe.diagnostics.length ? { diagnostics: probe.diagnostics } : {}) + } + } + } + + if (requireAutoSelectable && probe.autoSelectable === false) { + return { + adapter, + attempt: { + kind, + reason: 'not_auto_selectable', + diagnosticCodes: diagnosticCodes(probe), + ...(probe.diagnostics.length ? { diagnostics: probe.diagnostics } : {}) + } + } + } + + const missingCapabilities = getMissingCapabilities(probe, requiredCapabilities) + if (missingCapabilities.length > 0) { + return { + adapter, + attempt: { + kind, + reason: 'missing_capabilities', + missingCapabilities, + diagnosticCodes: diagnosticCodes(probe), + ...(probe.diagnostics.length ? { diagnostics: probe.diagnostics } : {}) + } + } + } + + return { adapter, probe } + } + + private createFallbackDiagnostic( + attempt: AdapterSelectionAttempt, + requiredCapabilities: readonly NetworkCapability[] + ): Diagnostic { + return { + code: 'NND_AUTO_FALLBACK', + level: 'warn', + message: 'Native adapter cannot satisfy this selection; using legacy adapter.', + hint: 'Use mode "native" to fail instead of falling back.', + details: { + from: 'native', + to: 'legacy', + reason: attempt.reason, + requiredCapabilities, + ...(attempt.missingCapabilities + ? { missingCapabilities: attempt.missingCapabilities } + : {}), + ...(attempt.diagnosticCodes ? { diagnosticCodes: attempt.diagnosticCodes } : {}), + ...(attempt.diagnostics ? { diagnostics: attempt.diagnostics } : {}), + ...(attempt.error ? { error: attempt.error } : {}) + } + } + } +} diff --git a/packages/network-debugger/src/adapters/types.ts b/packages/network-debugger/src/adapters/types.ts new file mode 100644 index 0000000..4582d48 --- /dev/null +++ b/packages/network-debugger/src/adapters/types.ts @@ -0,0 +1,81 @@ +export const NETWORK_CAPABILITIES = [ + 'http', + 'https', + 'fetch', + 'http2', + 'responseBody', + 'requestBody', + 'websocketLifecycle', + 'websocketFrames', + 'sseMessages', + 'initiator' +] as const + +export type NetworkCapability = (typeof NETWORK_CAPABILITIES)[number] +export type CapabilityMap = Readonly> +export type AdapterKind = 'native' | 'legacy' +export type AdapterMode = 'auto' | AdapterKind + +export type DiagnosticLevel = 'info' | 'warn' | 'error' + +export interface Diagnostic { + code: string + level: DiagnosticLevel + message: string + hint?: string + details?: Readonly> +} + +export interface DevtoolsTarget { + id: string + title: string + type: string + url: string + webSocketDebuggerUrl: string + devtoolsFrontendUrl?: string + devtoolsFrontendUrlCompat?: string + discoveryUrl: string +} + +export interface InspectorTargetOptions { + host?: string + port?: number +} + +export interface AdapterStartOptions { + inspector?: InspectorTargetOptions + requiredCapabilities?: readonly NetworkCapability[] +} + +export interface AdapterProbe { + kind: AdapterKind + available: boolean + /** Whether Auto mode may select this adapter as a proven default baseline. */ + autoSelectable?: boolean + capabilities: CapabilityMap + diagnostics: readonly Diagnostic[] +} + +export interface AdapterSession { + kind: AdapterKind + capabilities: CapabilityMap + target: DevtoolsTarget + diagnostics: readonly Diagnostic[] + /** Optional live diagnostics emitted after the initial target is ready. */ + onDiagnostic?(listener: (diagnostic: Diagnostic) => void): () => void + /** Optional terminal backend failure emitted after initial readiness. */ + onFailure?(listener: (error: Error) => void): () => void + dispose(): Promise +} + +export interface DebugAdapter { + readonly kind: AdapterKind + probe(options?: AdapterStartOptions): AdapterProbe | Promise + start(options?: AdapterStartOptions): Promise +} + +export interface AdapterSelection { + adapter: DebugAdapter + probe: AdapterProbe + fallbackReason?: Diagnostic +} diff --git a/packages/network-debugger/src/cli/args.test.ts b/packages/network-debugger/src/cli/args.test.ts new file mode 100644 index 0000000..2e6efe4 --- /dev/null +++ b/packages/network-debugger/src/cli/args.test.ts @@ -0,0 +1,98 @@ +import { describe, expect, it } from 'vitest' +import { parseCliArgs } from './args' + +describe('CLI argument parsing', () => { + it('parses the documented dev syntax and preserves application arguments', () => { + expect( + parseCliArgs([ + 'dev', + '--open', + '--no-wait', + '--watch', + '--runner', + 'tsx', + '--mode=native', + '--inspect-port', + '0', + '--require=responseBody', + 'src/app.ts', + '--', + '--port', + '3000' + ]) + ).toEqual({ + command: 'dev', + entry: 'src/app.ts', + applicationArgs: ['--port', '3000'], + config: { + open: true, + wait: false, + watch: true, + runner: 'tsx', + mode: 'native', + inspector: { port: 0 }, + requiredCapabilities: ['responseBody'] + } + }) + }) + + it('parses doctor JSON, config, and bounded probe wait', () => { + expect( + parseCliArgs([ + 'doctor', + '--json', + '--probe-wait=1500', + '--config', + 'custom.mjs', + '--mode', + 'legacy' + ]) + ).toEqual({ + command: 'doctor', + json: true, + probeWaitMs: 1500, + configFile: 'custom.mjs', + config: { mode: 'legacy' } + }) + }) + + it('returns help and version commands', () => { + expect(parseCliArgs([])).toEqual({ command: 'help' }) + expect(parseCliArgs(['--version'])).toEqual({ command: 'version' }) + }) + + it('parses replay dry-run and execution controls', () => { + expect( + parseCliArgs([ + 'replay', + '--dry-run', + '--json', + '--stop-on-error', + '--timeout=2500', + '.nnd/session' + ]) + ).toEqual({ + command: 'replay', + source: '.nnd/session', + dryRun: true, + stopOnError: true, + timeoutMs: 2500, + json: true + }) + }) + + it('uses stable errors for missing entries and invalid flags', () => { + expect(() => parseCliArgs(['dev', '--open'])).toThrowError( + expect.objectContaining({ code: 'NND_CLI_USAGE' }) + ) + expect(() => parseCliArgs(['dev', '--runner', 'bun', 'app.js'])).toThrowError( + expect.objectContaining({ code: 'NND_CLI_INVALID_OPTION' }) + ) + expect(() => parseCliArgs(['doctor', '--probe-wait', '-1'])).toThrowError( + expect.objectContaining({ code: 'NND_CLI_INVALID_OPTION' }) + ) + expect(() => parseCliArgs(['replay', '--dry-run'])).toThrowError( + expect.objectContaining({ code: 'NND_CLI_USAGE' }) + ) + }) +}) diff --git a/packages/network-debugger/src/cli/args.ts b/packages/network-debugger/src/cli/args.ts new file mode 100644 index 0000000..ea6924a --- /dev/null +++ b/packages/network-debugger/src/cli/args.ts @@ -0,0 +1,348 @@ +import type { AdapterMode, NetworkCapability } from '../adapters/types' +import { NETWORK_CAPABILITIES } from '../adapters/types' +import type { NndConfig, NndRunner } from '../config' +import { NndCliError } from './errors' + +export interface DevInvocation { + command: 'dev' + entry: string + applicationArgs: readonly string[] + config: NndConfig + configFile?: string +} + +export interface DoctorInvocation { + command: 'doctor' + json: boolean + probeWaitMs: number + config: NndConfig + configFile?: string +} + +export interface ReplayInvocation { + command: 'replay' + source: string + dryRun: boolean + stopOnError: boolean + timeoutMs?: number + json: boolean +} + +export type CliInvocation = + | DevInvocation + | DoctorInvocation + | ReplayInvocation + | { command: 'help' } + | { command: 'version' } + +const MODES = new Set(['auto', 'native', 'legacy']) +const RUNNERS = new Set(['node', 'tsx']) +const CAPABILITIES = new Set(NETWORK_CAPABILITIES) + +interface ParsedOption { + name: string + inlineValue?: string +} + +function splitOption(argument: string): ParsedOption { + const equals = argument.indexOf('=') + if (equals === -1) return { name: argument } + return { name: argument.slice(0, equals), inlineValue: argument.slice(equals + 1) } +} + +function requiredValue( + option: ParsedOption, + args: readonly string[], + index: number +): { value: string; consumed: number } { + if (option.inlineValue !== undefined) { + if (!option.inlineValue) { + throw new NndCliError('NND_CLI_USAGE', `${option.name} requires a value.`) + } + return { value: option.inlineValue, consumed: 0 } + } + const value = args[index + 1] + if (value === undefined || value === '--') { + throw new NndCliError('NND_CLI_USAGE', `${option.name} requires a value.`) + } + return { value, consumed: 1 } +} + +function parseNonNegativeInteger(value: string, option: string, maximum?: number): number { + const number = Number(value) + if (!Number.isInteger(number) || number < 0 || (maximum !== undefined && number > maximum)) { + throw new NndCliError( + 'NND_CLI_INVALID_OPTION', + `${option} must be an integer from 0${maximum === undefined ? '' : ` to ${maximum}`}.`, + { option, value } + ) + } + return number +} + +interface CommonParseState { + config: NndConfig + configFile?: string +} + +function applyCommonOption( + option: ParsedOption, + args: readonly string[], + index: number, + state: CommonParseState +): number | undefined { + switch (option.name) { + case '--open': + state.config.open = true + return 0 + case '--no-open': + state.config.open = false + return 0 + case '--wait': + state.config.wait = true + return 0 + case '--no-wait': + state.config.wait = false + return 0 + case '--watch': + state.config.watch = true + return 0 + case '--no-watch': + state.config.watch = false + return 0 + case '--runner': { + const parsed = requiredValue(option, args, index) + if (!RUNNERS.has(parsed.value as NndRunner)) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--runner must be node or tsx.', { + value: parsed.value + }) + } + state.config.runner = parsed.value as NndRunner + return parsed.consumed + } + case '--mode': { + const parsed = requiredValue(option, args, index) + if (!MODES.has(parsed.value as AdapterMode)) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--mode must be auto, native, or legacy.', { + value: parsed.value + }) + } + state.config.mode = parsed.value as AdapterMode + return parsed.consumed + } + case '--config': { + const parsed = requiredValue(option, args, index) + state.configFile = parsed.value + return parsed.consumed + } + case '--inspect-host': { + const parsed = requiredValue(option, args, index) + if (!parsed.value) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--inspect-host cannot be empty.') + } + state.config.inspector = { ...state.config.inspector, host: parsed.value } + return parsed.consumed + } + case '--inspect-port': { + const parsed = requiredValue(option, args, index) + state.config.inspector = { + ...state.config.inspector, + port: parseNonNegativeInteger(parsed.value, '--inspect-port', 65_535) + } + return parsed.consumed + } + case '--require': + case '--required-capability': { + const parsed = requiredValue(option, args, index) + if (!CAPABILITIES.has(parsed.value)) { + throw new NndCliError( + 'NND_CLI_INVALID_OPTION', + `Unknown network capability: ${parsed.value}.`, + { value: parsed.value, allowed: [...NETWORK_CAPABILITIES] } + ) + } + state.config.requiredCapabilities = [ + ...(state.config.requiredCapabilities ?? []), + parsed.value as NetworkCapability + ] + return parsed.consumed + } + default: + return undefined + } +} + +function parseDev(args: readonly string[]): DevInvocation { + const state: CommonParseState = { config: {} } + let entry: string | undefined + let applicationArgs: string[] = [] + + for (let index = 0; index < args.length; index += 1) { + const argument = args[index] + if (argument === '--') { + if (!entry) { + entry = args[index + 1] + if (!entry) break + applicationArgs = args.slice(index + 2) + } else { + applicationArgs = args.slice(index + 1) + } + break + } + + if (!entry && argument.startsWith('-')) { + if (argument === '-h' || argument === '--help') { + throw new NndCliError('NND_CLI_USAGE', 'Use `nnd help` for usage.') + } + const option = splitOption(argument) + const consumed = applyCommonOption(option, args, index, state) + if (consumed === undefined) { + throw new NndCliError('NND_CLI_INVALID_OPTION', `Unknown option: ${option.name}.`, { + option: option.name + }) + } + index += consumed + continue + } + + if (!entry) { + entry = argument + } else { + applicationArgs = args.slice(index) + break + } + } + + if (!entry) { + throw new NndCliError('NND_CLI_USAGE', 'nnd dev requires an entry file.') + } + + return { + command: 'dev', + entry, + applicationArgs, + config: state.config, + ...(state.configFile ? { configFile: state.configFile } : {}) + } +} + +function parseDoctor(args: readonly string[]): DoctorInvocation { + const state: CommonParseState = { config: {} } + let json = false + let probeWaitMs = 0 + + for (let index = 0; index < args.length; index += 1) { + const argument = args[index] + const option = splitOption(argument) + if (option.name === '--json') { + if (option.inlineValue !== undefined) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--json does not accept a value.') + } + json = true + continue + } + if (option.name === '--probe-wait') { + const parsed = requiredValue(option, args, index) + probeWaitMs = parseNonNegativeInteger(parsed.value, '--probe-wait', 60_000) + index += parsed.consumed + continue + } + + const consumed = applyCommonOption(option, args, index, state) + if (consumed === undefined) { + throw new NndCliError('NND_CLI_INVALID_OPTION', `Unknown doctor option: ${option.name}.`, { + option: option.name + }) + } + index += consumed + } + + return { + command: 'doctor', + json, + probeWaitMs, + config: state.config, + ...(state.configFile ? { configFile: state.configFile } : {}) + } +} + +function parseReplay(args: readonly string[]): ReplayInvocation { + let source: string | undefined + let dryRun = false + let stopOnError = false + let timeoutMs: number | undefined + let json = false + + for (let index = 0; index < args.length; index += 1) { + const argument = args[index] + if (!source && argument.startsWith('-')) { + const option = splitOption(argument) + if (option.name === '--dry-run') { + if (option.inlineValue !== undefined) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--dry-run does not accept a value.') + } + dryRun = true + continue + } + if (option.name === '--stop-on-error') { + if (option.inlineValue !== undefined) { + throw new NndCliError( + 'NND_CLI_INVALID_OPTION', + '--stop-on-error does not accept a value.' + ) + } + stopOnError = true + continue + } + if (option.name === '--json') { + if (option.inlineValue !== undefined) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--json does not accept a value.') + } + json = true + continue + } + if (option.name === '--timeout') { + const parsed = requiredValue(option, args, index) + timeoutMs = parseNonNegativeInteger(parsed.value, '--timeout', 3_600_000) + if (timeoutMs === 0) { + throw new NndCliError('NND_CLI_INVALID_OPTION', '--timeout must be greater than zero.') + } + index += parsed.consumed + continue + } + throw new NndCliError('NND_CLI_INVALID_OPTION', `Unknown replay option: ${option.name}.`, { + option: option.name + }) + } + if (source) { + throw new NndCliError('NND_CLI_USAGE', 'nnd replay accepts exactly one source path.') + } + source = argument + } + + if (!source) { + throw new NndCliError('NND_CLI_USAGE', 'nnd replay requires a Session directory or HAR file.') + } + return { + command: 'replay', + source, + dryRun, + stopOnError, + ...(timeoutMs !== undefined ? { timeoutMs } : {}), + json + } +} + +export function parseCliArgs(args: readonly string[]): CliInvocation { + const [command, ...rest] = args + if (!command || command === 'help' || command === '--help' || command === '-h') { + return { command: 'help' } + } + if (command === '--version' || command === '-v' || command === 'version') { + return { command: 'version' } + } + if (command === 'dev') return parseDev(rest) + if (command === 'doctor') return parseDoctor(rest) + if (command === 'replay') return parseReplay(rest) + throw new NndCliError('NND_CLI_USAGE', `Unknown command: ${command}.`, { command }) +} diff --git a/packages/network-debugger/src/cli/bin.ts b/packages/network-debugger/src/cli/bin.ts new file mode 100644 index 0000000..0451851 --- /dev/null +++ b/packages/network-debugger/src/cli/bin.ts @@ -0,0 +1,6 @@ +#!/usr/bin/env node +import { runCli } from './main' + +void runCli(process.argv.slice(2)).then((exitCode) => { + process.exitCode = exitCode +}) diff --git a/packages/network-debugger/src/cli/dev.test.ts b/packages/network-debugger/src/cli/dev.test.ts new file mode 100644 index 0000000..6169c74 --- /dev/null +++ b/packages/network-debugger/src/cli/dev.test.ts @@ -0,0 +1,358 @@ +import { EventEmitter } from 'node:events' +import { PassThrough } from 'node:stream' +import type { ChildProcess } from 'node:child_process' +import { describe, expect, it, vi } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' +import type { ResolvedNndConfig } from '../config' +import { NND_PRELOAD_CONFIG_ENV } from '../config' +import { NND_READY_PREFIX } from '../preload' +import { + InspectorUrlParser, + ReadyMessageParser, + buildDevCommand, + runDevCommand, + shouldLaunchInspector, + type DevCommand +} from './dev' + +function config(overrides: Partial = {}): ResolvedNndConfig { + return { + mode: 'auto', + open: false, + wait: true, + watch: false, + runner: 'node', + inspector: { host: '127.0.0.1', port: 0 }, + requiredCapabilities: [], + legacy: {}, + ...overrides + } +} + +function fakeChild() { + const child = new EventEmitter() as ChildProcess + Object.assign(child, { + stderr: new PassThrough(), + kill: vi.fn(() => true) + }) + return child +} + +const target = (url: string): DevtoolsTarget => ({ + id: url.split('/').at(-1)!, + title: 'target', + type: 'node', + url: '', + webSocketDebuggerUrl: url, + discoveryUrl: 'http://127.0.0.1/json/list', + devtoolsFrontendUrl: `devtools://devtools/bundled/inspector.html?ws=${url.slice(5)}` +}) + +function command(overrides: Partial = {}): DevCommand { + return { + executable: '/node', + args: ['app.js'], + cwd: '/project', + env: {}, + open: false, + wait: false, + ...overrides + } +} + +describe('dev command construction', () => { + it('injects native flags and the absolute preload URL without changing NODE_OPTIONS', () => { + const built = buildDevCommand({ + entry: 'src/app.ts', + applicationArgs: ['--port', '3000'], + config: config({ open: true, watch: true, runner: 'tsx' }), + cwd: '/project', + env: { NODE_OPTIONS: '--trace-warnings' }, + execPath: '/usr/bin/node', + preloadUrl: 'file:///package/dist/register.mjs' + }) + + expect(built).toMatchObject({ + executable: '/usr/bin/node', + cwd: '/project', + open: true, + wait: true + }) + expect(built.args).toEqual([ + '--experimental-network-inspection', + '--inspect-wait=127.0.0.1:0', + '--watch', + '--import=file:///package/dist/register.mjs', + '--import=tsx', + 'src/app.ts', + '--port', + '3000' + ]) + expect(built.env.NODE_OPTIONS).toBe('--trace-warnings') + expect(built.env.NODE_OPTIONS).not.toContain('experimental-network-inspection') + expect(JSON.parse(built.env[NND_PRELOAD_CONFIG_ENV]!)).toMatchObject({ mode: 'auto' }) + }) + + it('uses --inspect for no-wait and omits all Inspector flags for forced Legacy', () => { + expect( + buildDevCommand({ + entry: 'app.js', + config: config({ wait: false }), + preloadUrl: 'file:///register.mjs' + }).args + ).toEqual([ + '--experimental-network-inspection', + '--inspect=127.0.0.1:0', + '--import=file:///register.mjs', + 'app.js' + ]) + + const legacy = buildDevCommand({ + entry: 'app.js', + config: config({ mode: 'legacy', wait: true }), + preloadUrl: 'file:///register.mjs' + }) + expect(legacy.args).toEqual(['--import=file:///register.mjs', 'app.js']) + expect(legacy.wait).toBe(false) + }) + + it('starts Auto directly on Legacy when the native baseline or requirements are unmet', () => { + const oldRuntime = buildDevCommand({ + entry: 'app.js', + config: config(), + nodeVersion: '18.20.8', + preloadUrl: 'file:///register.mjs' + }) + expect(oldRuntime.args).toEqual(['--import=file:///register.mjs', 'app.js']) + expect(oldRuntime.wait).toBe(false) + + const missingCapability = buildDevCommand({ + entry: 'app.js', + config: config({ requiredCapabilities: ['requestBody'] }), + nodeVersion: '24.16.0', + inspectorNetwork: { + requestWillBeSent: vi.fn(), + responseReceived: vi.fn(), + loadingFinished: vi.fn(), + loadingFailed: vi.fn(), + dataReceived: vi.fn() + }, + preloadUrl: 'file:///register.mjs' + }) + expect(missingCapability.args).toEqual(['--import=file:///register.mjs', 'app.js']) + expect(missingCapability.wait).toBe(false) + }) + + it('uses the shared Native Auto baseline at Node 18/20/24.6/24.7 boundaries', () => { + const network = { + requestWillBeSent: vi.fn(), + responseReceived: vi.fn(), + loadingFinished: vi.fn(), + loadingFailed: vi.fn(), + dataReceived: vi.fn() + } + for (const nodeVersion of ['18.20.8', '20.19.5', '24.6.0']) { + expect(shouldLaunchInspector(config(), { nodeVersion, inspectorNetwork: network })).toBe( + false + ) + } + expect( + shouldLaunchInspector(config(), { + nodeVersion: '24.7.0', + inspectorNetwork: network, + inspectorAvailable: true + }) + ).toBe(true) + expect( + shouldLaunchInspector(config(), { + nodeVersion: '24.7.0', + inspectorNetwork: network, + inspectorAvailable: false + }) + ).toBe(false) + }) + + it('rejects forced Native before spawn when the runtime does not recognize the flag', () => { + for (const nodeVersion of ['18.20.8', '20.17.0', '21.7.3', '22.5.1']) { + expect(() => + buildDevCommand({ + entry: 'app.js', + config: config({ mode: 'native' }), + nodeVersion, + preloadUrl: 'file:///register.mjs' + }) + ).toThrowError( + expect.objectContaining({ + code: 'NND_CLI_NATIVE_UNSUPPORTED', + message: expect.stringContaining('use --mode auto/legacy') + }) + ) + } + }) + + it('injects forced Native flags at the Node 20.18 and 22.6 support boundaries', () => { + for (const nodeVersion of ['20.18.0', '22.6.0']) { + const native = buildDevCommand({ + entry: 'app.js', + config: config({ mode: 'native' }), + nodeVersion, + preloadUrl: 'file:///register.mjs' + }) + expect(native.args.slice(0, 2)).toEqual([ + '--experimental-network-inspection', + '--inspect-wait=127.0.0.1:0' + ]) + } + }) +}) + +describe('stderr protocol parsers', () => { + it('waits for a complete Debugger listening line across chunks', () => { + const parser = new InspectorUrlParser() + expect(parser.push('Debugger listening on ws://127.0.0.1:1234/')).toEqual([]) + expect(parser.push('abc\nFor help, see docs\n')).toEqual(['ws://127.0.0.1:1234/abc']) + expect( + parser.push(`${NND_READY_PREFIX}{"target":{"webSocketDebuggerUrl":"ws://wrong"}}\n`) + ).toEqual([]) + }) + + it('parses split ready messages and ignores malformed data', () => { + const parser = new ReadyMessageParser() + const ready = { + mode: 'legacy', + target: target('ws://127.0.0.1:5271'), + capabilities: { http: true } + } + const line = `${NND_READY_PREFIX}${JSON.stringify(ready)}\n` + expect(parser.push(line.slice(0, 20))).toEqual([]) + expect(parser.push(line.slice(20))).toEqual([ready]) + expect(parser.push(`${NND_READY_PREFIX}{nope}\n`)).toEqual([]) + }) +}) + +describe('dev child lifecycle', () => { + it('forwards parent signals, maps signal exit codes, and removes listeners', async () => { + const child = fakeChild() + const signals = new EventEmitter() + const result = runDevCommand(command(), { + spawn: vi.fn(() => child), + stderr: { write: vi.fn(() => true) }, + signals + }) + + signals.emit('SIGINT') + expect(child.kill).toHaveBeenCalledWith('SIGINT') + child.emit('exit', null, 'SIGINT') + await expect(result).resolves.toBe(130) + expect(signals.listenerCount('SIGINT')).toBe(0) + expect(signals.listenerCount('SIGTERM')).toBe(0) + expect(signals.listenerCount('SIGHUP')).toBe(0) + }) + + it('prints an actionable status when default wait has no automatic frontend', async () => { + const child = fakeChild() + const stderr = { write: vi.fn(() => true) } + const result = runDevCommand(command({ wait: true }), { + spawn: vi.fn(() => child), + stderr, + signals: new EventEmitter() + }) + expect(stderr.write).toHaveBeenCalledWith(expect.stringContaining('NND_WAITING_FOR_FRONTEND')) + child.emit('exit', 0, null) + await expect(result).resolves.toBe(0) + }) + + it('opens the preliminary waiting target once, then a different fallback ready target', async () => { + const child = fakeChild() + const openInspector = vi.fn(async () => undefined) + const openTarget = vi.fn(async () => undefined) + const result = runDevCommand(command({ open: true, wait: true }), { + spawn: vi.fn(() => child), + stderr: { write: vi.fn(() => true) }, + signals: new EventEmitter(), + openInspector, + openTarget + }) + const nativeUrl = 'ws://127.0.0.1:1234/native' + child.stderr!.emit('data', `Debugger listening on ${nativeUrl}\n`) + child.stderr!.emit( + 'data', + `${NND_READY_PREFIX}${JSON.stringify({ + mode: 'native', + target: target(nativeUrl), + capabilities: { http: true } + })}\n` + ) + const legacyTarget = target('ws://127.0.0.1:5271/legacy') + child.stderr!.emit( + 'data', + `${NND_READY_PREFIX}${JSON.stringify({ + mode: 'legacy', + target: legacyTarget, + capabilities: { http: true } + })}\n` + ) + + await Promise.resolve() + expect(openInspector).toHaveBeenCalledTimes(1) + expect(openInspector).toHaveBeenCalledWith(nativeUrl) + expect(openTarget).toHaveBeenCalledTimes(1) + expect(openTarget).toHaveBeenCalledWith(legacyTarget) + child.emit('exit', 0, null) + await expect(result).resolves.toBe(0) + }) + + it('opens only the authoritative ready target in Legacy/no-wait mode', async () => { + const child = fakeChild() + const openInspector = vi.fn(async () => undefined) + const openTarget = vi.fn(async () => undefined) + const result = runDevCommand(command({ open: true, wait: false }), { + spawn: vi.fn(() => child), + stderr: { write: vi.fn(() => true) }, + signals: new EventEmitter(), + openInspector, + openTarget + }) + const readyTarget = target('ws://127.0.0.1:5271/legacy') + child.stderr!.emit('data', `Debugger listening on ws://127.0.0.1:1234/native\n`) + child.stderr!.emit( + 'data', + `${NND_READY_PREFIX}${JSON.stringify({ + mode: 'legacy', + target: readyTarget, + capabilities: { http: true } + })}\n` + ) + await Promise.resolve() + + expect(openInspector).not.toHaveBeenCalled() + expect(openTarget).toHaveBeenCalledWith(readyTarget) + child.emit('exit', 0, null) + await expect(result).resolves.toBe(0) + }) + + it('returns one and terminates the child when frontend launch fails', async () => { + const child = fakeChild() + const result = runDevCommand(command({ open: true, wait: false }), { + spawn: vi.fn(() => child), + stderr: { write: vi.fn(() => true) }, + signals: new EventEmitter(), + openTarget: vi.fn(async () => { + throw new Error('browser failed') + }) + }) + child.stderr!.emit( + 'data', + `${NND_READY_PREFIX}${JSON.stringify({ + mode: 'native', + target: target('ws://127.0.0.1:1234/native'), + capabilities: { http: true } + })}\n` + ) + await Promise.resolve() + await Promise.resolve() + expect(child.kill).toHaveBeenCalledWith('SIGTERM') + child.emit('exit', null, 'SIGTERM') + await expect(result).resolves.toBe(1) + }) +}) diff --git a/packages/network-debugger/src/cli/dev.ts b/packages/network-debugger/src/cli/dev.ts new file mode 100644 index 0000000..dff6c8e --- /dev/null +++ b/packages/network-debugger/src/cli/dev.ts @@ -0,0 +1,328 @@ +import { spawn as nodeSpawn, type ChildProcess, type SpawnOptions } from 'node:child_process' +import * as nodeInspector from 'node:inspector' +import type { Writable } from 'node:stream' +import { discoverInspectorTarget } from '../adapters/node-native' +import { + NATIVE_NETWORK_INSPECTION_FLAG, + getNativeCapabilities, + hasRequiredNativeMethods, + isNativeAutoBaseline, + parseNodeVersion, + supportsNativeNetworkInspection, + type NativeNetworkApi +} from '../adapters/node-native/capability' +import { NND_PRELOAD_CONFIG_ENV, serializePreloadConfig, type ResolvedNndConfig } from '../config' +import type { DevtoolsTarget } from '../adapters/types' +import { NND_PRELOAD_REPORT_ENV, NND_READY_PREFIX } from '../preload' +import { openDevtoolsTarget } from '../target/frontend-launcher' +import { NndCliError, formatCliError } from './errors' + +export interface DevCommand { + executable: string + args: readonly string[] + cwd: string + env: NodeJS.ProcessEnv + open: boolean + wait: boolean +} + +export interface BuildDevCommandOptions { + entry: string + applicationArgs?: readonly string[] + config: ResolvedNndConfig + cwd?: string + env?: NodeJS.ProcessEnv + execPath?: string + preloadUrl?: string + nodeVersion?: string + inspectorNetwork?: NativeNetworkApi + inspectorAvailable?: boolean +} + +export function defaultPreloadUrl(moduleUrl: string = import.meta.url): string { + return new URL('./register.mjs', moduleUrl).href +} + +export function shouldLaunchInspector( + config: ResolvedNndConfig, + options: Pick< + BuildDevCommandOptions, + 'nodeVersion' | 'inspectorNetwork' | 'inspectorAvailable' + > = {} +): boolean { + if (config.mode === 'legacy') return false + if (config.mode === 'native') return true + + const version = parseNodeVersion(options.nodeVersion ?? process.versions.node) + if (!isNativeAutoBaseline(version)) return false + const inspectorAvailable = options.inspectorAvailable ?? process.features?.inspector !== false + if (!inspectorAvailable) return false + const network = + options.inspectorNetwork ?? (nodeInspector as unknown as { Network?: NativeNetworkApi }).Network + if (!hasRequiredNativeMethods(network)) return false + const capabilities = getNativeCapabilities(version, network) + return config.requiredCapabilities.every((capability) => capabilities[capability]) +} + +export function buildDevCommand(options: BuildDevCommandOptions): DevCommand { + const { config } = options + const nodeVersionText = options.nodeVersion ?? process.versions.node + if ( + config.mode === 'native' && + !supportsNativeNetworkInspection(parseNodeVersion(nodeVersionText)) + ) { + throw new NndCliError( + 'NND_CLI_NATIVE_UNSUPPORTED', + `Node.js ${nodeVersionText} does not support ${NATIVE_NETWORK_INSPECTION_FLAG}. Upgrade to Node.js 20.18+, 22.6+, or a newer release, or use --mode auto/legacy.`, + { + nodeVersion: nodeVersionText, + flag: NATIVE_NETWORK_INSPECTION_FLAG, + supportedBaselines: ['20.18+', '22.6+', '23+'] + } + ) + } + const inspectorAddress = `${config.inspector.host}:${config.inspector.port}` + const usesInspector = shouldLaunchInspector(config, options) + const args = usesInspector + ? [ + NATIVE_NETWORK_INSPECTION_FLAG, + `${config.wait ? '--inspect-wait' : '--inspect'}=${inspectorAddress}` + ] + : [] + + if (config.watch) args.push('--watch') + args.push(`--import=${options.preloadUrl ?? defaultPreloadUrl()}`) + if (config.runner === 'tsx') args.push('--import=tsx') + args.push(options.entry, ...(options.applicationArgs ?? [])) + + return { + executable: options.execPath ?? process.execPath, + args, + cwd: options.cwd ?? process.cwd(), + env: { + ...(options.env ?? process.env), + [NND_PRELOAD_CONFIG_ENV]: serializePreloadConfig(config), + [NND_PRELOAD_REPORT_ENV]: '1' + }, + open: config.open, + wait: usesInspector && config.wait + } +} + +type SupportedSignal = 'SIGINT' | 'SIGTERM' | 'SIGHUP' + +const SIGNAL_EXIT_CODES: Readonly> = { + SIGINT: 130, + SIGTERM: 143, + SIGHUP: 129 +} + +export interface SignalSource { + on(event: SupportedSignal, listener: () => void): unknown + off(event: SupportedSignal, listener: () => void): unknown +} + +export interface RunDevDependencies { + spawn?: (command: string, args: readonly string[], options: SpawnOptions) => ChildProcess + stderr?: Pick + signals?: SignalSource + openInspector?: (inspectorUrl: string) => Promise + openTarget?: (target: DevtoolsTarget) => Promise +} + +async function defaultOpenInspector(inspectorUrl: string): Promise { + const target = await discoverInspectorTarget(inspectorUrl) + await openDevtoolsTarget(target) +} + +/** Extracts complete Inspector WebSocket URLs even when stderr arrives in chunks. */ +export class InspectorUrlParser { + private pending = '' + private emitted = new Set() + + push(chunk: string): readonly string[] { + this.pending = `${this.pending}${chunk}`.slice(-8192) + const lastNewline = this.pending.lastIndexOf('\n') + if (lastNewline < 0) return [] + const complete = this.pending.slice(0, lastNewline + 1) + this.pending = this.pending.slice(lastNewline + 1) + const found = complete + .split(/\r?\n/) + .filter((line) => line.includes('Debugger listening on ')) + .flatMap((line) => line.match(/ws:\/\/[^\s]+/g) ?? []) + const fresh = found + .map((url) => url.replace(/[),.;]+$/, '')) + .filter((url) => { + if (this.emitted.has(url)) return false + this.emitted.add(url) + return true + }) + return fresh + } +} + +export interface NndReadyMessage { + mode: 'native' | 'legacy' + target: DevtoolsTarget + capabilities: Readonly> + fallbackReason?: unknown +} + +export class ReadyMessageParser { + private pending = '' + + push(chunk: string): readonly NndReadyMessage[] { + this.pending = `${this.pending}${chunk}`.slice(-65_536) + const lastNewline = this.pending.lastIndexOf('\n') + if (lastNewline < 0) return [] + const lines = this.pending.slice(0, lastNewline + 1).split(/\r?\n/) + this.pending = this.pending.slice(lastNewline + 1) + const messages: NndReadyMessage[] = [] + for (const line of lines) { + const index = line.indexOf(NND_READY_PREFIX) + if (index < 0) continue + try { + const value = JSON.parse(line.slice(index + NND_READY_PREFIX.length)) as NndReadyMessage + if ( + (value.mode === 'native' || value.mode === 'legacy') && + value.target && + typeof value.target.webSocketDebuggerUrl === 'string' && + value.capabilities && + typeof value.capabilities === 'object' + ) { + messages.push(value) + } + } catch { + // The original stderr line remains visible; malformed status data must + // not crash or hide the child process. + } + } + return messages + } +} + +export function runDevCommand( + command: DevCommand, + dependencies: RunDevDependencies = {} +): Promise { + const spawn = dependencies.spawn ?? nodeSpawn + const stderr = dependencies.stderr ?? process.stderr + const signals = dependencies.signals ?? process + const openInspector = dependencies.openInspector ?? defaultOpenInspector + const openTarget = dependencies.openTarget ?? openDevtoolsTarget + if (command.wait && !command.open) { + stderr.write( + '[nnd:NND_WAITING_FOR_FRONTEND] Application entry is paused; attach to the Inspector URL or rerun with --open/--no-wait.\n' + ) + } + let child: ChildProcess + + try { + child = spawn(command.executable, command.args, { + cwd: command.cwd, + env: command.env, + stdio: ['inherit', 'inherit', 'pipe'] + }) + } catch (error) { + return Promise.reject( + new NndCliError( + 'NND_CLI_SPAWN_FAILED', + `Unable to start ${command.executable}.`, + { executable: command.executable }, + error + ) + ) + } + + return new Promise((resolvePromise, rejectPromise) => { + const urlParser = new InspectorUrlParser() + const readyParser = new ReadyMessageParser() + let requestedSignal: SupportedSignal | undefined + let frontendError = false + let settled = false + const openedTargets = new Set() + + const signalListeners = new Map void>() + const cleanup = () => { + for (const [signal, listener] of signalListeners) signals.off(signal, listener) + signalListeners.clear() + } + const settle = (action: () => void) => { + if (settled) return + settled = true + cleanup() + action() + } + + for (const signal of Object.keys(SIGNAL_EXIT_CODES) as SupportedSignal[]) { + const listener = () => { + requestedSignal = signal + child.kill(signal) + } + signalListeners.set(signal, listener) + signals.on(signal, listener) + } + + child.stderr?.on('data', (chunk: Buffer | string) => { + const text = chunk.toString() + stderr.write(text) + const inspectorUrls = urlParser.push(text) + const readyMessages = readyParser.push(text) + if (!command.open) return + + const open = (key: string, action: () => Promise) => { + if (openedTargets.has(key)) return + openedTargets.add(key) + void action().catch((error) => { + frontendError = true + stderr.write( + `${formatCliError( + new NndCliError( + 'NND_CLI_FRONTEND_OPEN_FAILED', + `Unable to open DevTools for ${key}.`, + { target: key }, + error + ) + )}\n` + ) + child.kill('SIGTERM') + }) + } + + // A waiting Native/Auto process must first be attached so preload can + // execute. No-wait and Legacy modes wait for the authoritative ready target. + if (command.wait) { + for (const inspectorUrl of inspectorUrls) { + open(inspectorUrl, () => openInspector(inspectorUrl)) + } + } + for (const ready of readyMessages) { + open(ready.target.webSocketDebuggerUrl, () => openTarget(ready.target)) + } + }) + + child.once('error', (error) => { + settle(() => + rejectPromise( + new NndCliError( + 'NND_CLI_SPAWN_FAILED', + `Unable to start ${command.executable}: ${error.message}`, + { executable: command.executable }, + error + ) + ) + ) + }) + child.once('exit', (code, signal) => { + settle(() => { + if (frontendError) return resolvePromise(1) + if (typeof code === 'number') return resolvePromise(code) + if (requestedSignal) return resolvePromise(SIGNAL_EXIT_CODES[requestedSignal]) + if (signal && signal in SIGNAL_EXIT_CODES) { + return resolvePromise(SIGNAL_EXIT_CODES[signal as SupportedSignal]) + } + return resolvePromise(1) + }) + }) + }) +} diff --git a/packages/network-debugger/src/cli/errors.ts b/packages/network-debugger/src/cli/errors.ts new file mode 100644 index 0000000..60d77de --- /dev/null +++ b/packages/network-debugger/src/cli/errors.ts @@ -0,0 +1,27 @@ +export type NndCliErrorCode = + | 'NND_CLI_USAGE' + | 'NND_CLI_INVALID_OPTION' + | 'NND_CLI_NATIVE_UNSUPPORTED' + | 'NND_CLI_SPAWN_FAILED' + | 'NND_CLI_FRONTEND_OPEN_FAILED' + +export class NndCliError extends Error { + constructor( + readonly code: NndCliErrorCode, + message: string, + readonly details: Readonly> = {}, + readonly cause?: unknown + ) { + super(message) + this.name = 'NndCliError' + } +} + +export function formatCliError(error: unknown): string { + const code = + typeof error === 'object' && error !== null && 'code' in error + ? String((error as { code: unknown }).code) + : 'NND_CLI_FAILED' + const message = error instanceof Error ? error.message : String(error) + return `[nnd:${code}] ${message}` +} diff --git a/packages/network-debugger/src/cli/help.ts b/packages/network-debugger/src/cli/help.ts new file mode 100644 index 0000000..157558a --- /dev/null +++ b/packages/network-debugger/src/cli/help.ts @@ -0,0 +1,31 @@ +export const CLI_HELP = `Node Network Devtools + +Usage: + nnd dev [options] [-- args...] + nnd doctor [--json] [--probe-wait ] + nnd replay [--dry-run] [--json] [--timeout ] + +Dev options: + --open Open DevTools when the Inspector target appears + --no-wait Start the application immediately (default: wait) + --watch Restart the application when files change + --runner Select the application runner (default: node) + --mode + --config Use an explicit nnd.config.mjs/cjs/json file + --inspect-host Inspector bind host (default: 127.0.0.1) + --inspect-port Inspector port; 0 asks the OS to choose + --require Require an adapter capability; may be repeated + +Replay options: + --dry-run Validate and print the request plan without I/O + --stop-on-error Stop after the first HTTP or transport failure + --timeout Per-request timeout (default: 30000) + --json Print the complete machine-readable report + +Configuration precedence: + explicit CLI > NND_* environment > config file > defaults + +By default, Native/Auto targets pause before the application entry runs. Attach +a debugger to the printed Inspector URL, pass --open to attach automatically, +or pass --no-wait to run immediately. Forced Legacy mode never starts Inspector. +` diff --git a/packages/network-debugger/src/cli/index.ts b/packages/network-debugger/src/cli/index.ts new file mode 100644 index 0000000..1004dcd --- /dev/null +++ b/packages/network-debugger/src/cli/index.ts @@ -0,0 +1,5 @@ +export * from './args' +export * from './dev' +export * from './errors' +export * from './help' +export * from './main' diff --git a/packages/network-debugger/src/cli/main.test.ts b/packages/network-debugger/src/cli/main.test.ts new file mode 100644 index 0000000..491115a --- /dev/null +++ b/packages/network-debugger/src/cli/main.test.ts @@ -0,0 +1,176 @@ +import { EventEmitter } from 'node:events' +import { PassThrough } from 'node:stream' +import type { ChildProcess } from 'node:child_process' +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { runCli } from './main' + +const temporaryDirectories: string[] = [] + +afterEach(() => { + for (const directory of temporaryDirectories.splice(0)) { + rmSync(directory, { recursive: true, force: true }) + } +}) + +function output() { + let value = '' + return { + stream: { write: vi.fn((chunk: unknown) => ((value += String(chunk)), true)) }, + value: () => value + } +} + +describe('runCli', () => { + it('prints help and package version without spawning', async () => { + const stdout = output() + await expect(runCli([], { stdout: stdout.stream, stderr: output().stream })).resolves.toBe(0) + expect(stdout.value()).toContain('nnd dev [options] ') + + const version = output() + await expect( + runCli(['--version'], { + stdout: version.stream, + stderr: output().stream, + packageVersion: '9.8.7' + }) + ).resolves.toBe(0) + expect(version.value()).toBe('9.8.7\n') + }) + + it('prints a machine-readable doctor report', async () => { + const stdout = output() + const exitCode = await runCli(['doctor', '--json', '--mode', 'legacy'], { + stdout: stdout.stream, + stderr: output().stream, + cwd: process.cwd(), + env: {}, + packageVersion: '1.0.30' + }) + const report = JSON.parse(stdout.value()) as { + schemaVersion: number + ok: boolean + selection: { selected: string } + } + expect(exitCode).toBe(0) + expect(report).toMatchObject({ + schemaVersion: 1, + ok: true, + selection: { selected: 'legacy' } + }) + }) + + it('prints a machine-readable replay dry-run without network I/O', async () => { + const cwd = mkdtempSync(join(tmpdir(), 'nnd-cli-replay-')) + temporaryDirectories.push(cwd) + const harPath = join(cwd, 'fixture.har') + writeFileSync( + harPath, + JSON.stringify({ + log: { + version: '1.2', + creator: { name: 'fixture', version: '1' }, + pages: [], + entries: [ + { + request: { + method: 'GET', + url: 'http://127.0.0.1:9/never-opened', + headers: [], + queryString: [], + cookies: [], + headersSize: -1, + bodySize: 0 + }, + response: {}, + cache: {}, + timings: {}, + _requestId: 'dry-run' + } + ] + } + }) + ) + const stdout = output() + + await expect( + runCli(['replay', '--dry-run', '--json', 'fixture.har'], { + cwd, + stdout: stdout.stream, + stderr: output().stream + }) + ).resolves.toBe(0) + expect(JSON.parse(stdout.value())).toMatchObject({ + dryRun: true, + succeeded: 1, + failed: 0, + requests: [{ requestId: 'dry-run', method: 'GET' }] + }) + }) + + it('resolves config and launches the built dev command', async () => { + const child = new EventEmitter() as ChildProcess + Object.assign(child, { stderr: new PassThrough(), kill: vi.fn(() => true) }) + const spawn = vi.fn(() => { + queueMicrotask(() => child.emit('exit', 7, null)) + return child + }) + const stderr = output() + const exitCode = await runCli( + ['dev', '--no-wait', '--runner', 'tsx', 'app.ts', '--', '--port', '3'], + { + cwd: '/project', + env: {}, + execPath: '/node', + preloadUrl: 'file:///dist/register.mjs', + spawn, + signals: new EventEmitter(), + stdout: output().stream, + stderr: stderr.stream + } + ) + + expect(exitCode).toBe(7) + expect(spawn).toHaveBeenCalledWith( + '/node', + [ + '--experimental-network-inspection', + '--inspect=127.0.0.1:0', + '--import=file:///dist/register.mjs', + '--import=tsx', + 'app.ts', + '--port', + '3' + ], + expect.objectContaining({ cwd: '/project' }) + ) + }) + + it('formats parser failures with stable codes', async () => { + const stderr = output() + await expect(runCli(['wat'], { stderr: stderr.stream, stdout: output().stream })).resolves.toBe( + 1 + ) + expect(stderr.value()).toContain('[nnd:NND_CLI_USAGE]') + }) + + it('does not spawn forced Native on a runtime that cannot parse its flag', async () => { + const stderr = output() + const spawn = vi.fn() + const exitCode = await runCli(['dev', '--mode', 'native', 'app.js'], { + cwd: '/project', + env: {}, + nodeVersion: '18.20.8', + spawn, + stdout: output().stream, + stderr: stderr.stream + }) + + expect(exitCode).toBe(1) + expect(spawn).not.toHaveBeenCalled() + expect(stderr.value()).toContain('[nnd:NND_CLI_NATIVE_UNSUPPORTED]') + expect(stderr.value()).toContain('Node.js 18.20.8') + }) +}) diff --git a/packages/network-debugger/src/cli/main.ts b/packages/network-debugger/src/cli/main.ts new file mode 100644 index 0000000..417190a --- /dev/null +++ b/packages/network-debugger/src/cli/main.ts @@ -0,0 +1,100 @@ +import type { Writable } from 'node:stream' +import { resolve } from 'node:path' +import { resolveConfig } from '../config' +import { detectPackageVersion, formatDoctorReport, runDoctor } from '../diagnostics' +import { replay } from '../replay' +import { parseCliArgs } from './args' +import { buildDevCommand, runDevCommand, type RunDevDependencies } from './dev' +import { formatCliError } from './errors' +import { CLI_HELP } from './help' + +export interface RunCliOptions extends RunDevDependencies { + cwd?: string + env?: NodeJS.ProcessEnv + execPath?: string + /** Dependency override used by compatibility checks and tests. */ + nodeVersion?: string + preloadUrl?: string + stdout?: Pick + packageVersion?: string +} + +export async function runCli( + args: readonly string[], + options: RunCliOptions = {} +): Promise { + const stdout = options.stdout ?? process.stdout + const stderr = options.stderr ?? process.stderr + + try { + const invocation = parseCliArgs(args) + if (invocation.command === 'help') { + stdout.write(CLI_HELP) + return 0 + } + if (invocation.command === 'version') { + stdout.write(`${options.packageVersion ?? detectPackageVersion()}\n`) + return 0 + } + if (invocation.command === 'doctor') { + const report = await runDoctor({ + cwd: options.cwd, + env: options.env, + config: invocation.config, + configFile: invocation.configFile, + probeWaitMs: invocation.probeWaitMs, + packageVersion: options.packageVersion + }) + stdout.write(formatDoctorReport(report, invocation.json)) + return report.ok ? 0 : 1 + } + if (invocation.command === 'replay') { + const report = await replay(resolve(options.cwd ?? process.cwd(), invocation.source), { + dryRun: invocation.dryRun, + stopOnError: invocation.stopOnError, + timeoutMs: invocation.timeoutMs + }) + if (invocation.json) { + stdout.write(`${JSON.stringify(report, null, 2)}\n`) + } else { + stdout.write( + `${invocation.dryRun ? 'Planned' : 'Replayed'} ${report.results.length} request(s): ${report.succeeded} succeeded, ${report.failed} failed.\n` + ) + for (const result of report.results) { + const outcome = result.ok + ? (result.status ?? 'ready') + : (result.error ?? result.status ?? 'failed') + stdout.write(`${result.request.method} ${result.request.url} -> ${outcome}\n`) + } + } + return report.failed === 0 ? 0 : 1 + } + + const resolution = await resolveConfig({ + cwd: options.cwd, + env: options.env, + cli: invocation.config, + configFile: invocation.configFile + }) + const command = buildDevCommand({ + entry: invocation.entry, + applicationArgs: invocation.applicationArgs, + config: resolution.config, + cwd: options.cwd, + env: options.env, + execPath: options.execPath, + nodeVersion: options.nodeVersion, + preloadUrl: options.preloadUrl + }) + return await runDevCommand(command, { + spawn: options.spawn, + stderr, + signals: options.signals, + openInspector: options.openInspector, + openTarget: options.openTarget + }) + } catch (error) { + stderr.write(`${formatCliError(error)}\n`) + return 1 + } +} diff --git a/packages/network-debugger/src/common.test.ts b/packages/network-debugger/src/common.test.ts index 80a8137..76ac349 100644 --- a/packages/network-debugger/src/common.test.ts +++ b/packages/network-debugger/src/common.test.ts @@ -1,21 +1,5 @@ import { vi, describe, beforeEach, test, expect } from 'vitest' -import { - RequestDetail, - PORT, - SERVER_PORT, - REMOTE_DEBUGGER_PORT, - IS_DEV_MODE, - READY_MESSAGE, - NETWORK_CONTEXT_KEY, - WS_PROTOCOL, - CONTEXT_KEY_PORT, - CONTEXT_KEY_SERVER_PORT, - CONTEXT_KEY_AUTO_OPEN_DEVTOOL, - CONTEXT_KEY_INTERCEPT_NORMAL, - CONTEXT_KEY_INTERCEPT_FETCH, - CONTEXT_KEY_INTERCEPT_UNDICI_FETCH, - CONTEXT_KEY_HASH -} from './common' +import { RequestDetail } from './common' describe('RequestDetail', () => { beforeEach(() => { @@ -254,164 +238,22 @@ describe('RequestDetail', () => { }) }) - describe('isHiden', () => { - test('should return true for ws://127.0.0.1/ websocket connections', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = 'ws://127.0.0.1/' - - expect(requestDetail.isHiden()).toBe(true) - }) - - test('should return true for http://127.0.0.1/ websocket connections', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = 'http://127.0.0.1/' - - expect(requestDetail.isHiden()).toBe(true) - }) - - test('should return false for non-127.0.0.1 websocket connections', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = 'ws://example.com/' - - expect(requestDetail.isHiden()).toBe(false) - }) - - test('should return false for non-websocket 127.0.0.1 connections', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { 'Content-Type': 'application/json' } - requestDetail.url = 'http://127.0.0.1/' - - expect(requestDetail.isHiden()).toBe(false) - }) - - test('should return false for websocket with different 127.0.0.1 path', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = 'ws://127.0.0.1/api' - - expect(requestDetail.isHiden()).toBe(false) - }) - - test('should return false for websocket with 127.0.0.1 and port', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = 'ws://127.0.0.1:8080/' - - expect(requestDetail.isHiden()).toBe(false) - }) - - test('should return false when url is undefined', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = undefined - - expect(requestDetail.isHiden()).toBe(false) - }) - - test('should return false for wss://127.0.0.1/ (secure websocket)', () => { - const requestDetail = new RequestDetail() - requestDetail.requestHeaders = { Upgrade: 'websocket' } - requestDetail.url = 'wss://127.0.0.1/' - - expect(requestDetail.isHiden()).toBe(false) - }) - }) - describe('default property values', () => { - test('should have undefined optional properties by default', () => { + test('initializes mutable header/info containers and leaves scalar fields undefined', () => { const requestDetail = new RequestDetail() expect(requestDetail.url).toBeUndefined() expect(requestDetail.method).toBeUndefined() expect(requestDetail.cookies).toBeUndefined() - expect(requestDetail.requestHeaders).toBeUndefined() + expect(requestDetail.requestHeaders).toEqual({}) expect(requestDetail.requestData).toBeUndefined() expect(requestDetail.responseData).toBeUndefined() expect(requestDetail.responseStatusCode).toBeUndefined() - expect(requestDetail.responseHeaders).toBeUndefined() + expect(requestDetail.responseHeaders).toEqual({}) + expect(requestDetail.responseInfo).toEqual({}) expect(requestDetail.requestStartTime).toBeUndefined() expect(requestDetail.requestEndTime).toBeUndefined() expect(requestDetail.initiator).toBeUndefined() }) }) }) - -describe('常量导出', () => { - describe('端口常量', () => { - test('PORT 应该是数字类型', () => { - expect(typeof PORT).toBe('number') - }) - - test('SERVER_PORT 应该是数字类型', () => { - expect(typeof SERVER_PORT).toBe('number') - }) - - test('REMOTE_DEBUGGER_PORT 应该是数字类型', () => { - expect(typeof REMOTE_DEBUGGER_PORT).toBe('number') - }) - - test('默认端口值应该正确', () => { - // 如果没有设置环境变量,应该使用默认值 - if (!process.env.NETWORK_PORT) { - expect(PORT).toBe(5270) - } - if (!process.env.NETWORK_SERVER_PORT) { - expect(SERVER_PORT).toBe(5271) - } - if (!process.env.REMOTE_DEBUGGER_PORT) { - expect(REMOTE_DEBUGGER_PORT).toBe(9333) - } - }) - }) - - describe('模式常量', () => { - test('IS_DEV_MODE 应该是布尔类型', () => { - expect(typeof IS_DEV_MODE).toBe('boolean') - }) - - test('READY_MESSAGE 应该是字符串 "ready"', () => { - expect(READY_MESSAGE).toBe('ready') - }) - }) - - describe('上下文键常量', () => { - test('NETWORK_CONTEXT_KEY 应该正确', () => { - expect(NETWORK_CONTEXT_KEY).toBe('x-network-context') - }) - - test('WS_PROTOCOL 应该正确', () => { - expect(WS_PROTOCOL).toBe('ws') - }) - - test('CONTEXT_KEY_PORT 应该正确', () => { - expect(CONTEXT_KEY_PORT).toBe('x-network-context-port') - }) - - test('CONTEXT_KEY_SERVER_PORT 应该正确', () => { - expect(CONTEXT_KEY_SERVER_PORT).toBe('x-network-context-server-port') - }) - - test('CONTEXT_KEY_AUTO_OPEN_DEVTOOL 应该正确', () => { - expect(CONTEXT_KEY_AUTO_OPEN_DEVTOOL).toBe('x-network-context-auto-open-devtools') - }) - - test('CONTEXT_KEY_INTERCEPT_NORMAL 应该正确', () => { - expect(CONTEXT_KEY_INTERCEPT_NORMAL).toBe('x-network-context-intercept-normal') - }) - - test('CONTEXT_KEY_INTERCEPT_FETCH 应该正确', () => { - expect(CONTEXT_KEY_INTERCEPT_FETCH).toBe('x-network-context-intercept-fetch') - }) - - test('CONTEXT_KEY_INTERCEPT_UNDICI_FETCH 应该正确', () => { - expect(CONTEXT_KEY_INTERCEPT_UNDICI_FETCH).toBe('x-network-context-intercept-undici-fetch') - }) - - test('CONTEXT_KEY_HASH 应该正确', () => { - expect(CONTEXT_KEY_HASH).toBe('x-network-context-hash') - }) - }) -}) diff --git a/packages/network-debugger/src/common.ts b/packages/network-debugger/src/common.ts index 86889d4..d07c285 100644 --- a/packages/network-debugger/src/common.ts +++ b/packages/network-debugger/src/common.ts @@ -2,6 +2,8 @@ import { fileURLToPath } from 'url' import { getStackFrames, initiatorStackPipe } from './utils/stack' import { dirname } from 'path' import { generateUUID } from './utils' +import type { AdapterMode, InspectorTargetOptions, NetworkCapability } from './adapters/types' +import type { LegacyMockRule } from './mock' export interface CDPCallFrame { columnNumber: number @@ -21,6 +23,8 @@ export class RequestDetail { } else { this.id = generateUUID() this.responseInfo = {} + this.requestHeaders = {} + this.responseHeaders = {} } } @@ -46,10 +50,6 @@ export class RequestDetail { } } - isHiden() { - return this.isWebSocket() && ['http://127.0.0.1/', 'ws://127.0.0.1/'].includes(this.url!) - } - isWebSocket() { return ( this.requestHeaders?.['Upgrade'] === 'websocket' || @@ -66,6 +66,7 @@ export class RequestDetail { responseData: any responseStatusCode?: number + responseStatusText?: string responseHeaders: any responseInfo: Partial<{ encodedDataLength: number @@ -82,137 +83,83 @@ export class RequestDetail { } } } -export const PORT = Number(process.env.NETWORK_PORT || 5270) -export const SERVER_PORT = Number(process.env.NETWORK_SERVER_PORT || 5271) -export const REMOTE_DEBUGGER_PORT = Number(process.env.REMOTE_DEBUGGER_PORT || 9333) -export const IS_DEV_MODE = process.env.NETWORK_DEBUG_MODE === 'true' -export const READY_MESSAGE = 'ready' - export const __filename = fileURLToPath(import.meta.url) export const __dirname = dirname(__filename) +export interface InterceptOptions { + /** Whether to intercept the global Fetch implementation. */ + fetch?: boolean + /** Whether to intercept `http.request` and `https.request`. */ + normal?: boolean + /** Optional interception for the separately installed `undici` package. */ + undici?: + | false + | { + fetch?: false | true | Record + normal?: false | true | Record + } +} + export interface RegisterOptions { - /** - * @description Main Process Port - * @default 5270 - */ - port?: number - /** - * @description CDP Server Port, used for Devtool - * @link devtools://devtools/bundled/inspector.html?ws=127.0.0.1:${serverPort} - * @default 5271 - */ - serverPort?: number + /** Select the complete capture/backend implementation. Defaults to `auto`. */ + mode?: AdapterMode - /** - * @description Whether to automatically open Devtool - * @default true - */ - autoOpenDevtool?: boolean + /** @deprecated Use `mode`. */ + adapter?: AdapterMode - /** - * @description Options for intercepting different types of requests. - * If a property is set to `false`, that specific type of request will not be intercepted. - * By default, all are intercepted if not explicitly set. - */ - intercept?: { - /** - * @description Whether to intercept `fetch` requests. - * @default true - */ - fetch?: boolean - /** - * @description Whether to intercept `http/https` requests. - * @default true - */ - normal?: boolean - /** - * @description Options for intercepting `undici` requests. - * Set to `false` to disable all undici interception. - * Otherwise, configure specific undici interception options. - * @default false - */ - undici?: - | false - | { - /** - * @description Whether to intercept `undici`'s `fetch` requests. - * @default false - */ - fetch?: false | {} - /** - * @description Whether to intercept `undici`'s normal requests. - * @default false - */ - normal?: false | {} - } + /** Capabilities that the selected backend must provide. */ + requiredCapabilities?: readonly NetworkCapability[] + + /** @deprecated Use `requiredCapabilities`. */ + requiredFeatures?: readonly NetworkCapability[] + + /** Settings used when a Node Inspector target must be created. */ + inspector?: InspectorTargetOptions + + /** Frontend behavior is opt-in and independent from target ownership. */ + devtools?: { + open?: boolean } -} -export const NETWORK_CONTEXT_KEY = 'x-network-context' -export const WS_PROTOCOL = 'ws' - -export const CONTEXT_KEY_PORT = 'x-network-context-port' -export const CONTEXT_KEY_SERVER_PORT = 'x-network-context-server-port' -export const CONTEXT_KEY_AUTO_OPEN_DEVTOOL = 'x-network-context-auto-open-devtools' -export const CONTEXT_KEY_INTERCEPT_NORMAL = 'x-network-context-intercept-normal' -export const CONTEXT_KEY_INTERCEPT_FETCH = 'x-network-context-intercept-fetch' -export const CONTEXT_KEY_INTERCEPT_UNDICI_FETCH = 'x-network-context-intercept-undici-fetch' -export const CONTEXT_KEY_HASH = 'x-network-context-hash' - -export interface ConnectOptions { - /** - * @description Main Process Port - * @default 5270 - */ - port?: number -} -export interface UnregisterOptions { - /** - * @description Main Process Port - * @default 5270 - */ - port?: number -} + /** Persist backend-neutral CDP events and response bodies for later export/replay. */ + session?: { + /** Exact output directory. It must not already contain Session artifacts. */ + directory: string + bodyCommandTimeoutMs?: number + /** Export HAR during disposal. `true` writes `/session.har`. */ + har?: boolean | string + } -export interface SendMessageOptions { - /** - * @description Main Process Port - * @default 5270 - */ - port?: number -} -export type RequestPipe = (req: RequestDetail) => RequestDetail | null + /** Namespaced Legacy settings. Top-level legacy fields remain supported. */ + legacy?: { + /** @deprecated The application bridge now uses child-process IPC. */ + port?: number + /** Legacy CDP target port. Defaults to `0` (an OS-assigned loopback port). */ + serverPort?: number + intercept?: InterceptOptions + /** Deterministic outbound request/response mocks. Legacy backend only. */ + mock?: readonly LegacyMockRule[] + } -export interface SetRequestInterceptorOptions { /** - * @description Main Process Port - * @default 5270 + * @deprecated The application bridge now uses child-process IPC. Move other + * Legacy settings under `legacy`. */ port?: number - request?: RequestPipe -} -export interface SetResponseInterceptorOptions { /** - * @description Main Process Port - * @default 5270 + * @deprecated Use `legacy.serverPort`. Defaults to `0`. */ - port?: number - response?: RequestPipe -} + serverPort?: number -export interface RemoveRequestInterceptorOptions { /** - * @description Main Process Port - * @default 5270 + * @deprecated Use `devtools.open`. Defaults to `false`. */ - port?: number -} + autoOpenDevtool?: boolean -export interface RemoveResponseInterceptorOptions { /** - * @description Main Process Port - * @default 5270 + * @description Options for intercepting different types of requests. + * If a property is set to `false`, that specific type of request will not be intercepted. + * By default, all are intercepted if not explicitly set. */ - port?: number + intercept?: InterceptOptions } diff --git a/packages/network-debugger/src/config/errors.ts b/packages/network-debugger/src/config/errors.ts new file mode 100644 index 0000000..c05aff2 --- /dev/null +++ b/packages/network-debugger/src/config/errors.ts @@ -0,0 +1,17 @@ +export type NndConfigErrorCode = + | 'NND_CONFIG_NOT_FOUND' + | 'NND_CONFIG_LOAD_FAILED' + | 'NND_CONFIG_INVALID' + | 'NND_CONFIG_ENV_INVALID' + +export class NndConfigError extends Error { + constructor( + readonly code: NndConfigErrorCode, + message: string, + readonly details: Readonly> = {}, + readonly cause?: unknown + ) { + super(message) + this.name = 'NndConfigError' + } +} diff --git a/packages/network-debugger/src/config/index.ts b/packages/network-debugger/src/config/index.ts new file mode 100644 index 0000000..b363a5a --- /dev/null +++ b/packages/network-debugger/src/config/index.ts @@ -0,0 +1,11 @@ +export * from './errors' +export * from './loader' +export * from './preload-config' +export * from './types' + +import type { NndConfig } from './types' + +/** Type helper for nnd.config.mjs/cjs files. */ +export function defineConfig(config: T): T { + return config +} diff --git a/packages/network-debugger/src/config/loader.test.ts b/packages/network-debugger/src/config/loader.test.ts new file mode 100644 index 0000000..77136d4 --- /dev/null +++ b/packages/network-debugger/src/config/loader.test.ts @@ -0,0 +1,176 @@ +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { afterEach, describe, expect, it } from 'vitest' +import { NndConfigError } from './errors' +import { findConfigFile, loadConfigFile, resolveConfig } from './loader' + +const temporaryDirectories: string[] = [] + +function temporaryDirectory(): string { + const directory = mkdtempSync(join(tmpdir(), 'nnd-config-')) + temporaryDirectories.push(directory) + return directory +} + +afterEach(() => { + for (const directory of temporaryDirectories.splice(0)) { + rmSync(directory, { recursive: true, force: true }) + } +}) + +describe('NND config loader', () => { + it('merges defaults, file, environment, and CLI in documented precedence', async () => { + const cwd = temporaryDirectory() + writeFileSync( + join(cwd, 'nnd.config.json'), + JSON.stringify({ + mode: 'legacy', + open: true, + wait: false, + runner: 'tsx', + inspector: { host: 'file-host', port: 1111 }, + requiredCapabilities: ['requestBody'], + session: { directory: '.nnd/session', har: true }, + legacy: { port: 5000, serverPort: 5001 } + }) + ) + + const result = await resolveConfig({ + cwd, + env: { + NND_MODE: 'native', + NND_OPEN: 'false', + NND_INSPECTOR_PORT: '2222', + NND_WATCH: 'true' + }, + cli: { + mode: 'auto', + wait: true, + inspector: { host: 'cli-host' }, + requiredCapabilities: ['responseBody'] + } + }) + + expect(result.config).toEqual({ + mode: 'auto', + open: false, + wait: true, + watch: true, + runner: 'tsx', + inspector: { host: 'cli-host', port: 2222 }, + requiredCapabilities: ['responseBody'], + session: { directory: '.nnd/session', har: true }, + legacy: { port: 5000, serverPort: 5001 } + }) + expect(result.sources.configFile).toBe(join(cwd, 'nnd.config.json')) + expect(result.sources.env).toEqual(['NND_MODE', 'NND_OPEN', 'NND_WATCH', 'NND_INSPECTOR_PORT']) + expect(result.sources.cli).toEqual(['mode', 'wait', 'requiredCapabilities', 'inspector']) + }) + + it('loads mjs, cjs, and json configuration files', async () => { + const cwd = temporaryDirectory() + const mjs = join(cwd, 'one.mjs') + const cjs = join(cwd, 'two.cjs') + const json = join(cwd, 'three.json') + writeFileSync(mjs, 'export default { mode: "native", open: true }\n') + writeFileSync(cjs, 'module.exports = { runner: "tsx", watch: true }\n') + writeFileSync(json, JSON.stringify({ inspector: { port: 42 } })) + + await expect(loadConfigFile(mjs)).resolves.toMatchObject({ mode: 'native', open: true }) + await expect(loadConfigFile(cjs)).resolves.toMatchObject({ runner: 'tsx', watch: true }) + await expect(loadConfigFile(json)).resolves.toMatchObject({ inspector: { port: 42 } }) + }) + + it('discovers config names deterministically and supports explicit nested paths', async () => { + const cwd = temporaryDirectory() + writeFileSync(join(cwd, 'nnd.config.json'), '{}') + writeFileSync(join(cwd, 'nnd.config.cjs'), 'module.exports = {}\n') + writeFileSync(join(cwd, 'nnd.config.mjs'), 'export default {}\n') + expect(findConfigFile(cwd)).toBe(join(cwd, 'nnd.config.mjs')) + + const nested = join(cwd, 'configs') + mkdirSync(nested) + writeFileSync(join(nested, 'custom.json'), JSON.stringify({ mode: 'legacy' })) + await expect( + resolveConfig({ cwd, env: {}, configFile: 'configs/custom.json' }) + ).resolves.toMatchObject({ config: { mode: 'legacy' } }) + }) + + it('can disable file discovery', async () => { + const cwd = temporaryDirectory() + writeFileSync(join(cwd, 'nnd.config.json'), JSON.stringify({ open: true })) + const result = await resolveConfig({ cwd, env: {}, configFile: false }) + expect(result.config.open).toBe(false) + expect(result.sources.configFile).toBeUndefined() + }) + + it('preserves serializable Legacy mock rules and rejects ambiguous bodies', async () => { + const cwd = temporaryDirectory() + const configPath = join(cwd, 'mock.json') + writeFileSync( + configPath, + JSON.stringify({ + mode: 'auto', + legacy: { + mock: [ + { + match: { url: 'https://example.test/*', method: 'POST' }, + response: { status: 201, bodyBase64: 'AAEC/w==' } + } + ] + } + }) + ) + await expect(resolveConfig({ cwd, env: {}, configFile: configPath })).resolves.toMatchObject({ + config: { + legacy: { + mock: [ + { + match: { url: 'https://example.test/*', method: 'POST' }, + response: { status: 201, bodyBase64: 'AAEC/w==' } + } + ] + } + } + }) + + writeFileSync( + configPath, + JSON.stringify({ + legacy: { + mock: [{ match: { url: '*' }, response: { body: 'text', bodyBase64: 'dGV4dA==' } }] + } + }) + ) + await expect(loadConfigFile(configPath)).rejects.toMatchObject({ + code: 'NND_CONFIG_INVALID' + }) + }) + + it('uses stable actionable errors for missing, invalid, and malformed config', async () => { + const cwd = temporaryDirectory() + await expect(loadConfigFile(join(cwd, 'missing.json'))).rejects.toMatchObject({ + code: 'NND_CONFIG_NOT_FOUND' + }) + + writeFileSync(join(cwd, 'bad.json'), '{ nope') + await expect(loadConfigFile(join(cwd, 'bad.json'))).rejects.toMatchObject({ + code: 'NND_CONFIG_LOAD_FAILED' + }) + + writeFileSync(join(cwd, 'shape.json'), JSON.stringify({ runner: 'deno' })) + await expect(loadConfigFile(join(cwd, 'shape.json'))).rejects.toMatchObject({ + code: 'NND_CONFIG_INVALID' + }) + + await expect( + resolveConfig({ cwd, configFile: false, env: { NND_OPEN: 'maybe' } }) + ).rejects.toBeInstanceOf(NndConfigError) + await expect( + resolveConfig({ cwd, configFile: false, env: { NND_OPEN: 'maybe' } }) + ).rejects.toMatchObject({ + code: 'NND_CONFIG_ENV_INVALID' + }) + }) +}) diff --git a/packages/network-debugger/src/config/loader.ts b/packages/network-debugger/src/config/loader.ts new file mode 100644 index 0000000..65d5412 --- /dev/null +++ b/packages/network-debugger/src/config/loader.ts @@ -0,0 +1,511 @@ +import { existsSync, readFileSync } from 'node:fs' +import { createRequire } from 'node:module' +import { isAbsolute, resolve } from 'node:path' +import { pathToFileURL } from 'node:url' +import { NETWORK_CAPABILITIES, type NetworkCapability } from '../adapters/types' +import { NndConfigError } from './errors' +import { + DEFAULT_NND_CONFIG, + type ConfigResolution, + type NndConfig, + type NndRunner, + type ResolveConfigOptions, + type ResolvedNndConfig +} from './types' + +const CONFIG_NAMES = ['nnd.config.mjs', 'nnd.config.cjs', 'nnd.config.json'] as const +const MODES = new Set(['auto', 'native', 'legacy']) +const RUNNERS = new Set(['node', 'tsx']) +const CAPABILITIES = new Set(NETWORK_CAPABILITIES) + +const hasOwn = (value: object, key: PropertyKey) => Object.prototype.hasOwnProperty.call(value, key) + +function invalid( + message: string, + details: Readonly> = {}, + source: 'config' | 'env' = 'config' +): never { + throw new NndConfigError( + source === 'env' ? 'NND_CONFIG_ENV_INVALID' : 'NND_CONFIG_INVALID', + message, + details + ) +} + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + +function assertBoolean(value: unknown, field: string): asserts value is boolean { + if (typeof value !== 'boolean') + invalid(`Configuration field "${field}" must be a boolean.`, { field, value }) +} + +function assertPort(value: unknown, field: string): asserts value is number { + if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > 65_535) { + invalid(`Configuration field "${field}" must be an integer from 0 to 65535.`, { + field, + value + }) + } +} + +function validateMockRules(value: unknown, sourcePath?: string): void { + if (!Array.isArray(value)) { + invalid('Configuration field "legacy.mock" must be an array.', { + field: 'legacy.mock', + value, + sourcePath + }) + } + for (const [index, rule] of value.entries()) { + if ( + !isRecord(rule) || + !isRecord(rule.match) || + typeof rule.match.url !== 'string' || + rule.match.url.length === 0 || + !isRecord(rule.response) + ) { + invalid(`Configuration field "legacy.mock[${index}]" is invalid.`, { + field: `legacy.mock[${index}]`, + value: rule, + sourcePath + }) + } + if (rule.match.method !== undefined && typeof rule.match.method !== 'string') { + invalid(`Configuration field "legacy.mock[${index}].match.method" must be a string.`, { + field: `legacy.mock[${index}].match.method`, + value: rule.match.method, + sourcePath + }) + } + if (rule.match.headers !== undefined && !isRecord(rule.match.headers)) { + invalid(`Configuration field "legacy.mock[${index}].match.headers" must be an object.`, { + field: `legacy.mock[${index}].match.headers`, + value: rule.match.headers, + sourcePath + }) + } + if (rule.response.body !== undefined && typeof rule.response.body !== 'string') { + invalid(`Configuration field "legacy.mock[${index}].response.body" must be a string.`, { + field: `legacy.mock[${index}].response.body`, + value: rule.response.body, + sourcePath + }) + } + if (rule.response.bodyBase64 !== undefined && typeof rule.response.bodyBase64 !== 'string') { + invalid(`Configuration field "legacy.mock[${index}].response.bodyBase64" must be a string.`, { + field: `legacy.mock[${index}].response.bodyBase64`, + value: rule.response.bodyBase64, + sourcePath + }) + } + if (rule.response.body !== undefined && rule.response.bodyBase64 !== undefined) { + invalid( + `Configuration field "legacy.mock[${index}].response" cannot define both body and bodyBase64.`, + { field: `legacy.mock[${index}].response`, sourcePath } + ) + } + } +} + +function validateConfig(value: unknown, sourcePath?: string): NndConfig { + if (!isRecord(value)) { + return invalid('NND configuration must export an object.', { sourcePath }) + } + + const config = value as Record + if (config.mode !== undefined && (typeof config.mode !== 'string' || !MODES.has(config.mode))) { + invalid('Configuration field "mode" must be auto, native, or legacy.', { + field: 'mode', + value: config.mode, + sourcePath + }) + } + if (config.runner !== undefined && !RUNNERS.has(config.runner as NndRunner)) { + invalid('Configuration field "runner" must be node or tsx.', { + field: 'runner', + value: config.runner, + sourcePath + }) + } + for (const field of ['open', 'wait', 'watch'] as const) { + if (config[field] !== undefined) assertBoolean(config[field], field) + } + + if (config.inspector !== undefined) { + if (!isRecord(config.inspector)) { + invalid('Configuration field "inspector" must be an object.', { + field: 'inspector', + value: config.inspector, + sourcePath + }) + } + if (config.inspector.host !== undefined && typeof config.inspector.host !== 'string') { + invalid('Configuration field "inspector.host" must be a string.', { + field: 'inspector.host', + value: config.inspector.host, + sourcePath + }) + } + if (config.inspector.host === '') { + invalid('Configuration field "inspector.host" cannot be empty.', { + field: 'inspector.host', + sourcePath + }) + } + if (config.inspector.port !== undefined) assertPort(config.inspector.port, 'inspector.port') + } + + if (config.requiredCapabilities !== undefined) { + if ( + !Array.isArray(config.requiredCapabilities) || + config.requiredCapabilities.some( + (capability) => typeof capability !== 'string' || !CAPABILITIES.has(capability) + ) + ) { + invalid('Configuration field "requiredCapabilities" contains an unknown capability.', { + field: 'requiredCapabilities', + value: config.requiredCapabilities, + allowed: [...NETWORK_CAPABILITIES], + sourcePath + }) + } + } + + if (config.session !== undefined) { + if (!isRecord(config.session)) { + invalid('Configuration field "session" must be an object.', { + field: 'session', + value: config.session, + sourcePath + }) + } + if (typeof config.session.directory !== 'string' || !config.session.directory.trim()) { + invalid('Configuration field "session.directory" must be a non-empty string.', { + field: 'session.directory', + value: config.session.directory, + sourcePath + }) + } + if ( + config.session.bodyCommandTimeoutMs !== undefined && + (!Number.isSafeInteger(config.session.bodyCommandTimeoutMs) || + (config.session.bodyCommandTimeoutMs as number) <= 0) + ) { + invalid('Configuration field "session.bodyCommandTimeoutMs" must be a positive integer.', { + field: 'session.bodyCommandTimeoutMs', + value: config.session.bodyCommandTimeoutMs, + sourcePath + }) + } + if ( + config.session.har !== undefined && + typeof config.session.har !== 'boolean' && + (typeof config.session.har !== 'string' || !config.session.har.trim()) + ) { + invalid('Configuration field "session.har" must be a boolean or non-empty path.', { + field: 'session.har', + value: config.session.har, + sourcePath + }) + } + } + + if (config.legacy !== undefined) { + if (!isRecord(config.legacy)) { + invalid('Configuration field "legacy" must be an object.', { + field: 'legacy', + value: config.legacy, + sourcePath + }) + } + if (config.legacy.port !== undefined) assertPort(config.legacy.port, 'legacy.port') + if (config.legacy.serverPort !== undefined) { + assertPort(config.legacy.serverPort, 'legacy.serverPort') + } + if (config.legacy.intercept !== undefined && !isRecord(config.legacy.intercept)) { + invalid('Configuration field "legacy.intercept" must be an object.', { + field: 'legacy.intercept', + value: config.legacy.intercept, + sourcePath + }) + } + if (config.legacy.mock !== undefined) { + validateMockRules(config.legacy.mock, sourcePath) + } + } + + return config as unknown as NndConfig +} + +function resolveConfigPath(cwd: string, requested: string): string { + return isAbsolute(requested) ? requested : resolve(cwd, requested) +} + +export function findConfigFile(cwd: string): string | undefined { + for (const name of CONFIG_NAMES) { + const candidate = resolve(cwd, name) + if (existsSync(candidate)) return candidate + } + return undefined +} + +export async function loadConfigFile(path: string): Promise { + if (!existsSync(path)) { + throw new NndConfigError( + 'NND_CONFIG_NOT_FOUND', + `NND configuration file was not found: ${path}`, + { + path + } + ) + } + + try { + let value: unknown + if (path.endsWith('.json')) { + value = JSON.parse(readFileSync(path, 'utf8')) + } else if (path.endsWith('.cjs')) { + const requireFromConfig = createRequire(resolve(path, '..', '__nnd_loader__.cjs')) + const resolved = requireFromConfig.resolve(path) + delete requireFromConfig.cache[resolved] + const loaded = requireFromConfig(resolved) as unknown + value = isRecord(loaded) && hasOwn(loaded, 'default') ? loaded.default : loaded + } else if (path.endsWith('.mjs')) { + const url = `${pathToFileURL(path).href}?nnd=${Date.now()}` + const loaded = (await import(/* @vite-ignore */ url)) as { default?: unknown } + value = hasOwn(loaded, 'default') ? loaded.default : loaded + } else { + invalid('NND configuration files must use .mjs, .cjs, or .json.', { path }) + } + return validateConfig(value, path) + } catch (error) { + if (error instanceof NndConfigError) throw error + throw new NndConfigError( + 'NND_CONFIG_LOAD_FAILED', + `Unable to load NND configuration: ${path}`, + { path, cause: error instanceof Error ? error.message : String(error) }, + error + ) + } +} + +function parseBoolean(value: string, key: string): boolean { + const normalized = value.trim().toLowerCase() + if (['1', 'true', 'yes', 'on'].includes(normalized)) return true + if (['0', 'false', 'no', 'off'].includes(normalized)) return false + return invalid(`Environment variable ${key} must be true or false.`, { key, value }, 'env') +} + +function parsePort(value: string, key: string): number { + const port = Number(value) + if (!Number.isInteger(port) || port < 0 || port > 65_535) { + return invalid( + `Environment variable ${key} must be an integer from 0 to 65535.`, + { + key, + value + }, + 'env' + ) + } + return port +} + +function parseCapabilities(value: string, key: string): readonly NetworkCapability[] { + const capabilities = value + .split(',') + .map((item) => item.trim()) + .filter(Boolean) + const unknown = capabilities.filter((capability) => !CAPABILITIES.has(capability)) + if (unknown.length > 0) { + return invalid( + `Environment variable ${key} contains unknown capabilities: ${unknown.join(', ')}.`, + { + key, + unknown, + allowed: [...NETWORK_CAPABILITIES] + }, + 'env' + ) + } + return [...new Set(capabilities)] as NetworkCapability[] +} + +interface EnvironmentConfig { + config: NndConfig + keys: string[] +} + +function configFromEnvironment(env: NodeJS.ProcessEnv): EnvironmentConfig { + const config: NndConfig = {} + const keys: string[] = [] + const use = (key: string, apply: (value: string) => void) => { + const value = env[key] + if (value === undefined || value === '') return + keys.push(key) + apply(value) + } + + use('NND_MODE', (value) => { + if (!MODES.has(value)) { + invalid( + 'Environment variable NND_MODE must be auto, native, or legacy.', + { + key: 'NND_MODE', + value + }, + 'env' + ) + } + config.mode = value as NndConfig['mode'] + }) + use('NND_OPEN', (value) => (config.open = parseBoolean(value, 'NND_OPEN'))) + use('NND_WAIT', (value) => (config.wait = parseBoolean(value, 'NND_WAIT'))) + use('NND_WATCH', (value) => (config.watch = parseBoolean(value, 'NND_WATCH'))) + use('NND_RUNNER', (value) => { + if (!RUNNERS.has(value as NndRunner)) { + invalid( + 'Environment variable NND_RUNNER must be node or tsx.', + { + key: 'NND_RUNNER', + value + }, + 'env' + ) + } + config.runner = value as NndRunner + }) + use('NND_INSPECTOR_HOST', (value) => { + if (!value.trim()) { + invalid( + 'Environment variable NND_INSPECTOR_HOST cannot be empty.', + { + key: 'NND_INSPECTOR_HOST' + }, + 'env' + ) + } + config.inspector = { ...config.inspector, host: value } + }) + use('NND_INSPECTOR_PORT', (value) => { + config.inspector = { ...config.inspector, port: parsePort(value, 'NND_INSPECTOR_PORT') } + }) + use('NND_REQUIRED_CAPABILITIES', (value) => { + config.requiredCapabilities = parseCapabilities(value, 'NND_REQUIRED_CAPABILITIES') + }) + use('NND_LEGACY_PORT', (value) => { + config.legacy = { ...config.legacy, port: parsePort(value, 'NND_LEGACY_PORT') } + }) + use('NND_LEGACY_SERVER_PORT', (value) => { + config.legacy = { + ...config.legacy, + serverPort: parsePort(value, 'NND_LEGACY_SERVER_PORT') + } + }) + + return { config, keys } +} + +function mergeConfig(base: NndConfig, override: NndConfig): NndConfig { + return { + ...base, + ...override, + inspector: + base.inspector || override.inspector + ? { ...base.inspector, ...override.inspector } + : undefined, + session: override.session ?? base.session, + legacy: + base.legacy || override.legacy + ? { + ...base.legacy, + ...override.legacy, + intercept: + base.legacy?.intercept || override.legacy?.intercept + ? { ...base.legacy?.intercept, ...override.legacy?.intercept } + : undefined, + mock: override.legacy?.mock ?? base.legacy?.mock + } + : undefined + } +} + +function explicitKeys(config: NndConfig): string[] { + const keys: string[] = [] + for (const key of [ + 'mode', + 'open', + 'wait', + 'watch', + 'runner', + 'requiredCapabilities', + 'session' + ] as const) { + if (config[key] !== undefined) keys.push(key) + } + if (config.inspector !== undefined) keys.push('inspector') + if (config.legacy !== undefined) keys.push('legacy') + return keys +} + +function finalize(config: NndConfig): ResolvedNndConfig { + const merged = mergeConfig(DEFAULT_NND_CONFIG, config) + return { + mode: merged.mode!, + open: merged.open!, + wait: merged.wait!, + watch: merged.watch!, + runner: merged.runner!, + inspector: { + host: merged.inspector!.host!, + port: merged.inspector!.port! + }, + requiredCapabilities: [...(merged.requiredCapabilities ?? [])], + ...(merged.session + ? { + session: { + directory: merged.session.directory, + ...(merged.session.bodyCommandTimeoutMs !== undefined + ? { bodyCommandTimeoutMs: merged.session.bodyCommandTimeoutMs } + : {}), + ...(merged.session.har !== undefined ? { har: merged.session.har } : {}) + } + } + : {}), + legacy: { + ...(merged.legacy?.port !== undefined ? { port: merged.legacy.port } : {}), + ...(merged.legacy?.serverPort !== undefined ? { serverPort: merged.legacy.serverPort } : {}), + ...(merged.legacy?.intercept !== undefined + ? { intercept: { ...merged.legacy.intercept } } + : {}), + ...(merged.legacy?.mock !== undefined ? { mock: [...merged.legacy.mock] } : {}) + } + } +} + +export async function resolveConfig(options: ResolveConfigOptions = {}): Promise { + const cwd = resolve(options.cwd ?? process.cwd()) + const env = options.env ?? process.env + const requestedConfig = options.configFile ?? env.NND_CONFIG + const configPath = + requestedConfig === false + ? undefined + : typeof requestedConfig === 'string' && requestedConfig !== '' + ? resolveConfigPath(cwd, requestedConfig) + : findConfigFile(cwd) + const fileConfig = configPath ? await loadConfigFile(configPath) : {} + const environment = configFromEnvironment(env) + const cliConfig = options.cli ? validateConfig(options.cli) : {} + const config = finalize(mergeConfig(mergeConfig(fileConfig, environment.config), cliConfig)) + + return { + config, + sources: { + ...(configPath ? { configFile: configPath } : {}), + env: environment.keys, + cli: explicitKeys(cliConfig) + } + } +} diff --git a/packages/network-debugger/src/config/preload-config.test.ts b/packages/network-debugger/src/config/preload-config.test.ts new file mode 100644 index 0000000..5e74178 --- /dev/null +++ b/packages/network-debugger/src/config/preload-config.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, it } from 'vitest' +import { parsePreloadConfig, serializePreloadConfig, toRegisterOptions } from './preload-config' +import type { ResolvedNndConfig } from './types' + +const config: ResolvedNndConfig = { + mode: 'native', + open: true, + wait: false, + watch: true, + runner: 'tsx', + inspector: { host: '127.0.0.1', port: 0 }, + requiredCapabilities: ['responseBody'], + session: { directory: '.nnd/session', bodyCommandTimeoutMs: 2500, har: true }, + legacy: { port: 5000 } +} + +describe('preload configuration transport', () => { + it('round trips resolved config and excludes CLI-owned frontend opening', () => { + expect(parsePreloadConfig(serializePreloadConfig(config))).toEqual(config) + expect(toRegisterOptions(config)).toEqual({ + mode: 'native', + requiredCapabilities: ['responseBody'], + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false }, + session: { directory: '.nnd/session', bodyCommandTimeoutMs: 2500, har: true }, + legacy: { port: 5000 } + }) + }) + + it('reports malformed serialized environment values with a stable code', () => { + expect(() => parsePreloadConfig('{')).toThrowError( + expect.objectContaining({ code: 'NND_CONFIG_ENV_INVALID' }) + ) + expect(() => parsePreloadConfig(JSON.stringify({ mode: 'wat' }))).toThrowError( + expect.objectContaining({ code: 'NND_CONFIG_ENV_INVALID' }) + ) + expect(() => parsePreloadConfig(JSON.stringify({ ...config, session: {} }))).toThrowError( + expect.objectContaining({ code: 'NND_CONFIG_ENV_INVALID' }) + ) + }) +}) diff --git a/packages/network-debugger/src/config/preload-config.ts b/packages/network-debugger/src/config/preload-config.ts new file mode 100644 index 0000000..12cec7b --- /dev/null +++ b/packages/network-debugger/src/config/preload-config.ts @@ -0,0 +1,60 @@ +import type { RegisterOptions } from '../common' +import { NndConfigError } from './errors' +import type { ResolvedNndConfig } from './types' + +export const NND_PRELOAD_CONFIG_ENV = 'NND_PRELOAD_CONFIG' + +export function toRegisterOptions(config: ResolvedNndConfig): RegisterOptions { + return { + mode: config.mode, + requiredCapabilities: config.requiredCapabilities, + inspector: config.inspector, + devtools: { open: false }, + ...(config.session ? { session: config.session } : {}), + legacy: config.legacy + } +} + +export function serializePreloadConfig(config: ResolvedNndConfig): string { + return JSON.stringify(config) +} + +export function parsePreloadConfig(value: string): ResolvedNndConfig { + try { + const parsed = JSON.parse(value) as ResolvedNndConfig + if ( + !parsed || + typeof parsed !== 'object' || + !['auto', 'native', 'legacy'].includes(parsed.mode) || + typeof parsed.open !== 'boolean' || + typeof parsed.wait !== 'boolean' || + typeof parsed.watch !== 'boolean' || + !['node', 'tsx'].includes(parsed.runner) || + !parsed.inspector || + typeof parsed.inspector.host !== 'string' || + !Number.isInteger(parsed.inspector.port) || + !Array.isArray(parsed.requiredCapabilities) || + (parsed.session !== undefined && + (!parsed.session || + typeof parsed.session !== 'object' || + typeof parsed.session.directory !== 'string' || + !parsed.session.directory.trim() || + (parsed.session.bodyCommandTimeoutMs !== undefined && + (!Number.isSafeInteger(parsed.session.bodyCommandTimeoutMs) || + parsed.session.bodyCommandTimeoutMs <= 0)) || + (parsed.session.har !== undefined && + typeof parsed.session.har !== 'boolean' && + (typeof parsed.session.har !== 'string' || !parsed.session.har.trim())))) + ) { + throw new Error('serialized configuration has an invalid shape') + } + return parsed + } catch (error) { + throw new NndConfigError( + 'NND_CONFIG_ENV_INVALID', + `${NND_PRELOAD_CONFIG_ENV} does not contain a valid resolved configuration.`, + { cause: error instanceof Error ? error.message : String(error) }, + error + ) + } +} diff --git a/packages/network-debugger/src/config/types.ts b/packages/network-debugger/src/config/types.ts new file mode 100644 index 0000000..31d3890 --- /dev/null +++ b/packages/network-debugger/src/config/types.ts @@ -0,0 +1,84 @@ +import type { InterceptOptions } from '../common' +import type { AdapterMode, NetworkCapability } from '../adapters/types' +import type { LegacyMockRule } from '../mock' + +export type NndRunner = 'node' | 'tsx' + +/** Values accepted by nnd.config.mjs/cjs/json and explicit CLI overrides. */ +export interface NndConfig { + mode?: AdapterMode + open?: boolean + wait?: boolean + watch?: boolean + runner?: NndRunner + inspector?: { + host?: string + port?: number + } + requiredCapabilities?: readonly NetworkCapability[] + session?: { + directory: string + bodyCommandTimeoutMs?: number + har?: boolean | string + } + legacy?: { + port?: number + serverPort?: number + intercept?: InterceptOptions + mock?: readonly LegacyMockRule[] + } +} + +export interface ResolvedNndConfig { + mode: AdapterMode + open: boolean + wait: boolean + watch: boolean + runner: NndRunner + inspector: { + host: string + port: number + } + requiredCapabilities: readonly NetworkCapability[] + session?: { + directory: string + bodyCommandTimeoutMs?: number + har?: boolean | string + } + legacy: { + port?: number + serverPort?: number + intercept?: InterceptOptions + mock?: readonly LegacyMockRule[] + } +} + +export interface ConfigSources { + configFile?: string + env: readonly string[] + cli: readonly string[] +} + +export interface ConfigResolution { + config: ResolvedNndConfig + sources: ConfigSources +} + +export interface ResolveConfigOptions { + cwd?: string + env?: NodeJS.ProcessEnv + cli?: NndConfig + /** Explicit file path. `false` disables config-file discovery. */ + configFile?: string | false +} + +export const DEFAULT_NND_CONFIG: Readonly = Object.freeze({ + mode: 'auto', + open: false, + wait: true, + watch: false, + runner: 'node', + inspector: Object.freeze({ host: '127.0.0.1', port: 0 }), + requiredCapabilities: Object.freeze([]), + legacy: Object.freeze({}) +}) diff --git a/packages/network-debugger/src/core/capture-scope.ts b/packages/network-debugger/src/core/capture-scope.ts new file mode 100644 index 0000000..798181b --- /dev/null +++ b/packages/network-debugger/src/core/capture-scope.ts @@ -0,0 +1,12 @@ +import { AsyncLocalStorage } from 'node:async_hooks' + +const legacyCaptureSuppression = new AsyncLocalStorage() + +/** Run internal debugger transport setup without observing it as application traffic. */ +export function withoutLegacyCapture(operation: () => T): T { + return legacyCaptureSuppression.run(true, operation) +} + +export function isLegacyCaptureSuppressed(): boolean { + return legacyCaptureSuppression.getStore() === true +} diff --git a/packages/network-debugger/src/core/fetch.test.ts b/packages/network-debugger/src/core/fetch.test.ts index 5b0e936..e4b1b04 100644 --- a/packages/network-debugger/src/core/fetch.test.ts +++ b/packages/network-debugger/src/core/fetch.test.ts @@ -1,769 +1,282 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import { RequestDetail } from '../common' -import { proxyFetch, fetchProxyFactory } from './fetch' +import { deserialize, serialize } from 'node:v8' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import type { MainProcess } from './fork' +import { fetchProxyFactory, proxyFetch, SseParser } from './fetch' import * as cellModule from './hooks/cell' -// Mock setCurrentCell +const cellState = vi.hoisted(() => ({ current: null as unknown })) + vi.mock('./hooks/cell', () => ({ - setCurrentCell: vi.fn(), - getCurrentCell: vi.fn() + setCurrentCell: vi.fn((cell: unknown) => { + cellState.current = cell + }), + getCurrentCell: vi.fn(() => cellState.current) })) -// 创建 mock MainProcess -function createMockMainProcess() { - const mockSendRequest = vi.fn() - const mockMainProcess = { - sendRequest: mockSendRequest.mockReturnThis() - } - return { mockMainProcess, mockSendRequest } +interface JournalEntry { + transport: 'request' | 'event' + type: string + data: any } -// 创建 mock Response -function createMockResponse( - options: { - status?: number - headers?: Record - body?: string | Buffer - } = {} -) { - const { status = 200, headers = {}, body = '' } = options - const mockHeaders = new Headers(headers) - - const arrayBuffer = typeof body === 'string' ? new TextEncoder().encode(body).buffer : body.buffer - - return { - status, - headers: mockHeaders, - clone: vi.fn().mockReturnValue({ - arrayBuffer: vi.fn().mockResolvedValue(arrayBuffer) - }) - } as unknown as Response +function snapshot(value: T): T { + return deserialize(serialize(value)) as T } -describe('core/fetch.ts', () => { - let originalFetch: typeof globalThis.fetch | undefined - - beforeEach(() => { - vi.clearAllMocks() - originalFetch = globalThis.fetch +function createMainProcess() { + const journal: JournalEntry[] = [] + const mainProcess: Record = {} + mainProcess.sendRequest = vi.fn((type: string, data: unknown) => { + journal.push({ transport: 'request', type, data: snapshot(data) }) + return mainProcess }) - - afterEach(() => { - // 恢复原始 fetch - if (originalFetch !== undefined) { - globalThis.fetch = originalFetch - } + mainProcess.send = vi.fn(async (event: { type: string; data: unknown }) => { + journal.push({ transport: 'event', type: event.type, data: snapshot(event.data) }) }) + return { journal, mainProcess: mainProcess as MainProcess } +} - describe('proxyFetch 函数', () => { - test('当 globalThis.fetch 不存在时,直接返回 undefined', () => { - // 临时删除 fetch - const savedFetch = globalThis.fetch - // @ts-expect-error - 测试 fetch 不存在的情况 - delete globalThis.fetch - - const { mockMainProcess } = createMockMainProcess() - const result = proxyFetch(mockMainProcess as never) - - expect(result).toBeUndefined() - - // 恢复 - globalThis.fetch = savedFetch - }) - - test('当 globalThis.fetch 存在时,替换为代理函数', () => { - const mockFetch = vi.fn() - globalThis.fetch = mockFetch - - const { mockMainProcess } = createMockMainProcess() - const unset = proxyFetch(mockMainProcess as never) - - expect(globalThis.fetch).not.toBe(mockFetch) - expect(typeof unset).toBe('function') - }) +function fetchMock(response: Response): typeof fetch { + return vi.fn().mockResolvedValue(response) as unknown as typeof fetch +} - test('调用返回的 unset 函数后恢复原始 fetch', () => { - const mockFetch = vi.fn() - globalThis.fetch = mockFetch +function streamResponse(chunks: string[]): Response { + const encoder = new TextEncoder() + const body = new ReadableStream({ + start(controller) { + for (const chunk of chunks) controller.enqueue(encoder.encode(chunk)) + controller.close() + } + }) + return new Response(body, { + status: 200, + headers: { 'content-type': 'text/event-stream; charset=utf-8' } + }) +} - const { mockMainProcess } = createMockMainProcess() - const unset = proxyFetch(mockMainProcess as never) +async function waitFor(journal: JournalEntry[], type: string): Promise { + await vi.waitFor(() => expect(journal.some((entry) => entry.type === type)).toBe(true)) + return journal.find((entry) => entry.type === type)! +} - expect(globalThis.fetch).not.toBe(mockFetch) +describe('fetch capture', () => { + let savedFetch: typeof globalThis.fetch | undefined - // 调用 unset - unset!() + beforeEach(() => { + vi.clearAllMocks() + cellState.current = null + savedFetch = globalThis.fetch + }) - expect(globalThis.fetch).toBe(mockFetch) - }) + afterEach(() => { + if (savedFetch) globalThis.fetch = savedFetch + else Reflect.deleteProperty(globalThis, 'fetch') }) - describe('fetchProxyFactory 函数', () => { - describe('请求 URL 处理', () => { - test('处理字符串 URL', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - // 验证 sendRequest 被调用,且 URL 正确 - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'https://example.com/api' - }) - ) - }) - - test('处理 URL 对象', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const url = new URL('https://example.com/api') - await proxyFn(url) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'https://example.com/api' - }) - ) - }) - - test('处理 Request 对象(URL 不会被提取)', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - // 注意:Request 对象的 URL 不会被提取到 requestDetail.url - // 因为代码只检查 string 和 URL 类型 - const request = new Request('https://example.com/api') - await proxyFn(request) - - // URL 应该是 undefined,因为 Request 类型不被处理 - // RequestDetail 初始化时 url 属性未定义 - const initRequestCall = mockSendRequest.mock.calls.find((call) => call[0] === 'initRequest') - expect(initRequestCall).toBeDefined() - const requestDetail = initRequestCall![1] as RequestDetail - expect(requestDetail.url).toBeUndefined() - }) - }) + test('installs and unsets the global proxy without overwriting a later owner', () => { + const original = vi.fn() as unknown as typeof fetch + globalThis.fetch = original + const { mainProcess } = createMainProcess() + + const unset = proxyFetch(mainProcess)! + expect(globalThis.fetch).not.toBe(original) + unset() + expect(globalThis.fetch).toBe(original) + + const unsetAgain = proxyFetch(mainProcess)! + const replacement = vi.fn() as unknown as typeof fetch + globalThis.fetch = replacement + unsetAgain() + expect(globalThis.fetch).toBe(replacement) + }) - describe('请求方法处理', () => { - test('默认方法为 GET', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - method: 'GET' - }) - ) - }) - - test('使用 options 中指定的方法', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api', { method: 'POST' }) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - method: 'POST' - }) - ) - }) - }) + test('does nothing when the runtime has no global fetch', () => { + Reflect.deleteProperty(globalThis, 'fetch') + const { mainProcess } = createMainProcess() + expect(proxyFetch(mainProcess)).toBeUndefined() + }) - describe('请求头处理', () => { - test('处理 Headers 对象', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const headers = new Headers({ - 'Content-Type': 'application/json', - Authorization: 'Bearer token' - }) - await proxyFn('https://example.com/api', { headers }) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - requestHeaders: { - 'content-type': 'application/json', - authorization: 'Bearer token' - } - }) - ) - }) - - test('处理普通对象头部', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const headers = { - 'Content-Type': 'application/json', - 'X-Custom-Header': 'custom-value' - } - await proxyFn('https://example.com/api', { headers }) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - requestHeaders: headers - }) - ) - }) - - test('没有头部时使用空对象', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - requestHeaders: {} - }) - ) - }) + test('captures a Request URL, merged headers, body, and a seconds timestamp', async () => { + const response = new Response(null, { status: 204 }) + const original = fetchMock(response) + const { journal, mainProcess } = createMainProcess() + const request = new Request('http://127.0.0.1:43871/actual?value=1', { + method: 'PUT', + headers: { 'X-From-Request': 'base' } }) + const before = Date.now() / 1000 - describe('请求体处理', () => { - test('记录请求体数据', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const body = JSON.stringify({ key: 'value' }) - await proxyFn('https://example.com/api', { method: 'POST', body }) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - requestData: body - }) - ) - }) + await fetchProxyFactory(original, mainProcess)(request, { + method: 'PATCH', + headers: { 'X-From-Options': 'override' }, + body: 'payload' }) - - describe('setCurrentCell 调用', () => { - test('请求开始时设置 cell', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - expect(cellModule.setCurrentCell).toHaveBeenCalledWith( - expect.objectContaining({ - request: expect.any(RequestDetail), - pipes: [], - isAborted: false - }) - ) - }) - - test('请求完成后清除 cell', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - // 最后一次调用应该是 null - const calls = vi.mocked(cellModule.setCurrentCell).mock.calls - expect(calls[calls.length - 1][0]).toBeNull() - }) + const after = Date.now() / 1000 + + const detail = journal.find((entry) => entry.type === 'initRequest')!.data + expect(detail).toMatchObject({ + url: 'http://127.0.0.1:43871/actual?value=1', + method: 'PATCH', + requestData: 'payload', + requestHeaders: { + 'x-from-request': 'base', + 'x-from-options': 'override' + } }) + expect(detail.requestStartTime).toBeGreaterThanOrEqual(before) + expect(detail.requestStartTime).toBeLessThanOrEqual(after) + expect(detail.requestStartTime).toBeLessThan(10_000_000_000) + expect(original).toHaveBeenCalledWith(request, expect.objectContaining({ body: 'payload' })) + }) - describe('MainProcess 消息发送', () => { - test('发送 initRequest 和 registerRequest', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - expect(mockSendRequest).toHaveBeenCalledWith('initRequest', expect.any(RequestDetail)) - expect(mockSendRequest).toHaveBeenCalledWith('registerRequest', expect.any(RequestDetail)) - }) + test('emits responseReceived before the terminal body event', async () => { + const response = new Response('captured body', { + status: 201, + statusText: 'Created', + headers: { 'content-type': 'text/plain', 'x-result': 'yes' } }) - - describe('成功响应处理', () => { - test('记录响应状态码', async () => { - const mockResponse = createMockResponse({ status: 201 }) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - // 等待异步操作完成 - await new Promise((resolve) => setTimeout(resolve, 10)) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'updateRequest', - expect.objectContaining({ - responseStatusCode: 201 - }) - ) - }) - - test('记录响应头', async () => { - const mockResponse = createMockResponse({ - headers: { 'Content-Type': 'application/json' } - }) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 10)) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'updateRequest', - expect.objectContaining({ - responseHeaders: { 'content-type': 'application/json' } - }) - ) - }) - - test('记录响应体数据', async () => { - const responseBody = 'Hello, World!' - const mockResponse = createMockResponse({ body: responseBody }) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 10)) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'updateRequest', - expect.objectContaining({ - responseData: expect.any(Buffer) - }) - ) - }) - - test('记录响应数据长度', async () => { - const responseBody = 'Hello, World!' - const mockResponse = createMockResponse({ body: responseBody }) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 10)) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'updateRequest', - expect.objectContaining({ - responseInfo: expect.objectContaining({ - dataLength: responseBody.length, - encodedDataLength: responseBody.length - }) - }) - ) - }) - - test('发送 updateRequest 和 endRequest', async () => { - const mockResponse = createMockResponse() - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 10)) - - expect(mockSendRequest).toHaveBeenCalledWith('updateRequest', expect.any(RequestDetail)) - expect(mockSendRequest).toHaveBeenCalledWith('endRequest', expect.any(RequestDetail)) - }) - - test('返回原始 Response 对象', async () => { - const mockResponse = createMockResponse() - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const result = await proxyFn('https://example.com/api') - - expect(result).toBe(mockResponse) - }) - - test('响应状态码为 0 时正确处理', async () => { - const mockResponse = createMockResponse({ status: 0 }) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 10)) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'updateRequest', - expect.objectContaining({ - responseStatusCode: 0 - }) - ) - }) + const { journal, mainProcess } = createMainProcess() + + const returned = await fetchProxyFactory( + fetchMock(response), + mainProcess + )('https://example.test/resource') + const terminal = await waitFor(journal, 'endRequest') + + expect(returned).toBe(response) + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'responseReceived', + 'endRequest' + ]) + const received = journal.find((entry) => entry.type === 'responseReceived')!.data + expect(received).toMatchObject({ + responseStatusCode: 201, + responseStatusText: 'Created', + responseHeaders: { 'content-type': 'text/plain', 'x-result': 'yes' } }) + expect(Buffer.from(terminal.data.responseData).toString()).toBe('captured body') + expect(terminal.data.responseInfo).toEqual({ dataLength: 13, encodedDataLength: 13 }) + expect(terminal.data.requestEndTime).toBeLessThan(10_000_000_000) + expect(cellState.current).toBeNull() + }) - describe('错误响应处理', () => { - test('请求失败时记录状态码为 0', async () => { - const error = new Error('Network error') - const mockFetch = vi.fn().mockRejectedValue(error) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - - await expect(proxyFn('https://example.com/api')).rejects.toThrow('Network error') - - expect(mockSendRequest).toHaveBeenCalledWith( - 'updateRequest', - expect.objectContaining({ - responseStatusCode: 0 - }) - ) - }) - - test('请求失败时发送 updateRequest 和 endRequest', async () => { - const error = new Error('Network error') - const mockFetch = vi.fn().mockRejectedValue(error) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - - await expect(proxyFn('https://example.com/api')).rejects.toThrow() - - expect(mockSendRequest).toHaveBeenCalledWith('updateRequest', expect.any(RequestDetail)) - expect(mockSendRequest).toHaveBeenCalledWith('endRequest', expect.any(RequestDetail)) - }) - - test('请求失败时重新抛出错误', async () => { - const error = new Error('Custom error message') - const mockFetch = vi.fn().mockRejectedValue(error) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) + test('reports a rejected fetch only as requestFailed and rethrows it', async () => { + const failure = new Error('connection refused') + const original = vi.fn().mockRejectedValue(failure) as unknown as typeof fetch + const { journal, mainProcess } = createMainProcess() + + await expect( + fetchProxyFactory(original, mainProcess)('http://127.0.0.1:49999/unavailable') + ).rejects.toBe(failure) + + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'requestFailed' + ]) + const failed = journal.at(-1)!.data + expect(failed.errorText).toBe('connection refused') + expect(failed.request.requestEndTime).toBeLessThan(10_000_000_000) + expect(cellState.current).toBeNull() + }) - await expect(proxyFn('https://example.com/api')).rejects.toThrow('Custom error message') - }) + test('reports body-capture failure after headers without a successful terminal event', async () => { + const response = { + status: 200, + statusText: 'OK', + headers: new Headers({ 'content-type': 'application/octet-stream' }), + clone: () => ({ arrayBuffer: () => Promise.reject(new Error('stream reset')) }) + } as unknown as Response + const { journal, mainProcess } = createMainProcess() + + await fetchProxyFactory(fetchMock(response), mainProcess)('https://example.test/reset') + await waitFor(journal, 'requestFailed') + + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'responseReceived', + 'requestFailed' + ]) + expect(journal.some(({ type }) => type === 'endRequest')).toBe(false) + expect(journal.at(-1)!.data).toMatchObject({ errorText: 'stream reset', canceled: true }) + }) - test('请求失败后清除 cell', async () => { - const error = new Error('Network error') - const mockFetch = vi.fn().mockRejectedValue(error) - const { mockMainProcess } = createMockMainProcess() + test('SseParser handles split CRLF delimiters, multiline data, and persistent ids', () => { + const messages: Array<{ eventName: string; eventId: string; data: string }> = [] + const parser = new SseParser((message) => messages.push(message)) - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) + parser.push('id: 7\r') + parser.push('\nevent: update\r\ndata: first\r') + parser.push('\ndata: second\r\n\r') + parser.push('\n: ignored\r\ndata: tail') + parser.finish() - await expect(proxyFn('https://example.com/api')).rejects.toThrow() + expect(messages).toEqual([ + { eventName: 'update', eventId: '7', data: 'first\nsecond' }, + { eventName: 'message', eventId: '7', data: 'tail' } + ]) + }) - // 最后一次调用应该是 null - const calls = vi.mocked(cellModule.setCurrentCell).mock.calls - expect(calls[calls.length - 1][0]).toBeNull() - }) - }) + test('SseParser flushes an unterminated final event and ignores events without data', () => { + const messages: Array<{ eventName: string; eventId: string; data: string }> = [] + const parser = new SseParser((message) => messages.push(message)) - describe('时间戳记录', () => { - test('记录请求开始时间', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const beforeTime = Date.now() - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - const afterTime = Date.now() - - const initRequestCall = mockSendRequest.mock.calls.find((call) => call[0] === 'initRequest') - expect(initRequestCall).toBeDefined() - const requestDetail = initRequestCall![1] as RequestDetail - expect(requestDetail.requestStartTime).toBeGreaterThanOrEqual(beforeTime) - expect(requestDetail.requestStartTime).toBeLessThanOrEqual(afterTime) - }) - - test('记录请求结束时间', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 10)) - - const updateRequestCall = mockSendRequest.mock.calls.find( - (call) => call[0] === 'updateRequest' - ) - expect(updateRequestCall).toBeDefined() - const requestDetail = updateRequestCall![1] as RequestDetail - expect(requestDetail.requestEndTime).toBeDefined() - expect(requestDetail.requestEndTime).toBeGreaterThan(0) - }) - }) + parser.push('event: ignored\n\nid: stable\n') + parser.finish('data: final') - describe('原始 fetch 调用', () => { - test('正确传递参数给原始 fetch', async () => { - const mockFetch = vi.fn().mockResolvedValue(createMockResponse()) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const options: RequestInit = { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ key: 'value' }) - } - await proxyFn('https://example.com/api', options) - - expect(mockFetch).toHaveBeenCalledWith('https://example.com/api', options) - }) - }) + expect(messages).toEqual([{ eventName: 'message', eventId: 'stable', data: 'final' }]) + }) - describe('SSE (Server-Sent Events) 处理', () => { - // Helper to create a mock SSE response - function createMockSSEResponse(events: string[], options: { delay?: number } = {}) { - const { delay = 0 } = options - const mockHeaders = new Headers({ - 'content-type': 'text/event-stream' - }) - - // Create a mock ReadableStream - let readerIndex = 0 - const encoder = new TextEncoder() - const chunks = events.map((event) => encoder.encode(event)) - - const mockReader = { - read: vi.fn().mockImplementation(async () => { - if (delay > 0) { - await new Promise((resolve) => setTimeout(resolve, delay)) - } - if (readerIndex >= chunks.length) { - return { done: true, value: undefined } - } - const value = chunks[readerIndex] - readerIndex++ - return { done: false, value } - }) - } - - const mockBody = { - getReader: vi.fn().mockReturnValue(mockReader) - } - - return { - status: 200, - headers: mockHeaders, - body: mockBody, - clone: vi.fn().mockReturnValue({ - body: mockBody, - arrayBuffer: vi.fn().mockResolvedValue(new ArrayBuffer(0)) - }) - } as unknown as Response - } + test('streams SSE messages across chunks before one successful terminal event', async () => { + const chunks = [ + 'id: 7\r', + '\nevent: update\r\ndata: first\r', + '\ndata: second\r\n\r', + '\ndata: tail' + ] + const response = streamResponse(chunks) + const { journal, mainProcess } = createMainProcess() + + await fetchProxyFactory(fetchMock(response), mainProcess)('http://127.0.0.1:43777/events') + const terminal = await waitFor(journal, 'endRequest') + + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'eventSourceResponseReceived', + 'eventSourceMessage', + 'eventSourceMessage', + 'endRequest' + ]) + expect( + journal + .filter(({ type }) => type === 'eventSourceMessage') + .map(({ data }) => ({ eventName: data.eventName, eventId: data.eventId, data: data.data })) + ).toEqual([ + { eventName: 'update', eventId: '7', data: 'first\nsecond' }, + { eventName: 'message', eventId: '7', data: 'tail' } + ]) + expect(Buffer.from(terminal.data.responseData).toString()).toBe(chunks.join('')) + }) - test('正确识别 SSE 响应 (text/event-stream)', async () => { - const mockResponse = createMockSSEResponse(['data: hello\n\n']) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - const result = await proxyFn('https://example.com/sse') - - // SSE 响应应该直接返回,不等待流结束 - expect(result).toBe(mockResponse) - }) - - test('解析简单的 SSE 事件', async () => { - const mockResponse = createMockSSEResponse(['data: hello world\n\n']) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/sse') - - // 等待流处理完成 - await new Promise((resolve) => setTimeout(resolve, 50)) - - expect(mockSend).toHaveBeenCalledWith({ - type: 'eventSourceMessage', - data: { - requestId: expect.any(String), - eventName: 'message', - eventId: '', - data: 'hello world' - } - }) - }) - - test('解析带有 event 类型的 SSE 事件', async () => { - const mockResponse = createMockSSEResponse(['event: custom\ndata: test data\n\n']) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/sse') - - await new Promise((resolve) => setTimeout(resolve, 50)) - - expect(mockSend).toHaveBeenCalledWith({ - type: 'eventSourceMessage', - data: { - requestId: expect.any(String), - eventName: 'custom', - eventId: '', - data: 'test data' - } - }) - }) - - test('解析带有 id 的 SSE 事件', async () => { - const mockResponse = createMockSSEResponse(['id: 123\ndata: with id\n\n']) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/sse') - - await new Promise((resolve) => setTimeout(resolve, 50)) - - expect(mockSend).toHaveBeenCalledWith({ - type: 'eventSourceMessage', - data: { - requestId: expect.any(String), - eventName: 'message', - eventId: '123', - data: 'with id' - } - }) - }) - - test('处理多行 data', async () => { - const mockResponse = createMockSSEResponse(['data: line1\ndata: line2\n\n']) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/sse') - - await new Promise((resolve) => setTimeout(resolve, 50)) - - expect(mockSend).toHaveBeenCalledWith({ - type: 'eventSourceMessage', - data: { - requestId: expect.any(String), - eventName: 'message', - eventId: '', - data: 'line1\nline2' - } - }) - }) - - test('处理多个连续的 SSE 事件', async () => { - const mockResponse = createMockSSEResponse([ - 'data: first\n\n', - 'data: second\n\n', - 'data: third\n\n' - ]) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/sse') - - await new Promise((resolve) => setTimeout(resolve, 100)) - - const eventSourceCalls = mockSend.mock.calls.filter( - (call) => call[0]?.type === 'eventSourceMessage' - ) - expect(eventSourceCalls.length).toBe(3) - expect(eventSourceCalls[0][0].data.data).toBe('first') - expect(eventSourceCalls[1][0].data.data).toBe('second') - expect(eventSourceCalls[2][0].data.data).toBe('third') - }) - - test('SSE 流结束后发送 endRequest', async () => { - const mockResponse = createMockSSEResponse(['data: test\n\n']) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/sse') - - await new Promise((resolve) => setTimeout(resolve, 50)) - - expect(mockSendRequest).toHaveBeenCalledWith('endRequest', expect.any(RequestDetail)) - }) - - test('非 SSE 响应不触发 eventSourceMessage', async () => { - const mockResponse = createMockResponse({ - headers: { 'content-type': 'application/json' }, - body: '{"key": "value"}' - }) - const mockFetch = vi.fn().mockResolvedValue(mockResponse) - const mockSend = vi.fn() - const mockSendRequest = vi.fn().mockReturnThis() - const mockMainProcess = { - sendRequest: mockSendRequest, - send: mockSend - } - - const proxyFn = fetchProxyFactory(mockFetch, mockMainProcess as never) - await proxyFn('https://example.com/api') - - await new Promise((resolve) => setTimeout(resolve, 50)) - - const eventSourceCalls = mockSend.mock.calls.filter( - (call) => call[0]?.type === 'eventSourceMessage' - ) - expect(eventSourceCalls.length).toBe(0) - }) - }) + test('clears only the async-context cell owned by the completing fetch', async () => { + let resolveFirst!: (response: Response) => void + const firstFetch = vi.fn( + () => new Promise((resolve) => (resolveFirst = resolve)) + ) as unknown as typeof fetch + const { mainProcess } = createMainProcess() + const firstPromise = fetchProxyFactory(firstFetch, mainProcess)('https://example.test/first') + const firstCell = cellState.current + + cellState.current = { request: 'newer context' } + resolveFirst(new Response('done')) + await firstPromise + + expect(cellState.current).toEqual({ request: 'newer context' }) + expect(vi.mocked(cellModule.setCurrentCell)).not.toHaveBeenCalledWith(null) + expect(firstCell).not.toBeNull() }) }) diff --git a/packages/network-debugger/src/core/fetch.ts b/packages/network-debugger/src/core/fetch.ts index a9326eb..4301a24 100644 --- a/packages/network-debugger/src/core/fetch.ts +++ b/packages/network-debugger/src/core/fetch.ts @@ -1,243 +1,266 @@ import { RequestDetail } from '../common' +import { findFetchMock, mockedFetchResponse, type LegacyMockRule } from '../mock' import { headersToObject } from '../utils/map' -import { MainProcess } from './fork' -import { setCurrentCell } from './hooks/cell' +import type { MainProcess } from './fork' +import { getCurrentCell, setCurrentCell, type Cell } from './hooks/cell' +import { isLegacyCaptureSuppressed } from './capture-scope' -export function proxyFetch(mainProcess: MainProcess) { - if (!globalThis.fetch) { - return - } +export function proxyFetch(mainProcess: MainProcess, mockRules: readonly LegacyMockRule[] = []) { + if (!globalThis.fetch) return const originalFetch = globalThis.fetch - - globalThis['fetch'] = fetchProxyFactory(originalFetch, mainProcess) + const proxy = + mockRules.length > 0 + ? fetchProxyFactory(originalFetch, mainProcess, mockRules) + : fetchProxyFactory(originalFetch, mainProcess) + globalThis.fetch = proxy return () => { - globalThis['fetch'] = originalFetch + if (globalThis.fetch === proxy) globalThis.fetch = originalFetch } } -export function fetchProxyFactory(fetchFn: typeof fetch, mainProcess: MainProcess) { - return function (request: string | URL | Request, options?: RequestInit) { - const requestDetail = new RequestDetail() - requestDetail.requestStartTime = Date.now() - setCurrentCell({ request: requestDetail, pipes: [], isAborted: false }) +interface SseMessage { + eventName: string + eventId: string + data: string +} - if (typeof request === 'string') { - requestDetail.url = request - } else if (request instanceof URL) { - requestDetail.url = request.toString() +/** Incremental WHATWG event-stream parser; fields may span arbitrary chunks. */ +export class SseParser { + private buffer = '' + private eventName = 'message' + private eventId = '' + private data: string[] = [] + private sawData = false + + constructor(private readonly emit: (message: SseMessage) => void) {} + + push(text: string): void { + this.buffer += text + this.drain(false) + } + + finish(text = ''): void { + this.buffer += text + this.drain(true) + if (this.buffer) { + this.line(this.buffer) + this.buffer = '' } + this.dispatch() + } - requestDetail.method = options?.method ?? 'GET' + private drain(final: boolean): void { + while (true) { + const match = /\r\n|\r|\n/.exec(this.buffer) + if (!match) return + // CRLF is one line ending even when the transport splits it across + // chunks. Hold a trailing CR until the next chunk (or EOF) decides it. + if (!final && match[0] === '\r' && match.index === this.buffer.length - 1) return + const line = this.buffer.slice(0, match.index) + this.buffer = this.buffer.slice(match.index + match[0].length) + this.line(line) + } + } - const headers = options?.headers - if (headers instanceof Headers) { - const headersObj = headersToObject(headers) - requestDetail.requestHeaders = headersObj - } else { - requestDetail.requestHeaders = headers ?? {} + private line(line: string): void { + if (line === '') { + this.dispatch() + return } - requestDetail.requestData = options?.body + if (line.startsWith(':')) return - requestDetail.loadCallFrames() + const separator = line.indexOf(':') + const field = separator === -1 ? line : line.slice(0, separator) + let value = separator === -1 ? '' : line.slice(separator + 1) + if (value.startsWith(' ')) value = value.slice(1) - const result = fetchFn(request as string | Request, options) - .then(fetchResponseHandlerFactory(requestDetail, mainProcess)) - .catch(fetchErrorHandlerFactory(requestDetail, mainProcess)) - .finally(() => { - setCurrentCell(null) + if (field === 'event') { + this.eventName = value || 'message' + } else if (field === 'data') { + this.sawData = true + this.data.push(value) + } else if (field === 'id' && !value.includes('\0')) { + this.eventId = value + } + } + + private dispatch(): void { + if (this.sawData) { + this.emit({ + eventName: this.eventName || 'message', + eventId: this.eventId, + data: this.data.join('\n') }) + } + this.eventName = 'message' + this.data = [] + this.sawData = false + } +} - mainProcess - .sendRequest('initRequest', requestDetail) - .sendRequest('registerRequest', requestDetail) +function bodyValue(body: BodyInit | null | undefined): unknown { + if (body === undefined || body === null) return undefined + if (typeof body === 'string' || Buffer.isBuffer(body) || body instanceof Uint8Array) return body + if (body instanceof URLSearchParams) return body.toString() + return undefined +} - return result +function populateFetchRequest( + detail: RequestDetail, + request: string | URL | Request, + options?: RequestInit +): void { + if (typeof request === 'string') detail.url = request + else if (request instanceof URL) detail.url = request.toString() + else detail.url = request.url + + detail.method = options?.method ?? (request instanceof Request ? request.method : 'GET') + const headers = new Headers(request instanceof Request ? request.headers : undefined) + if (options?.headers) { + new Headers(options.headers).forEach((value, key) => headers.set(key, value)) } + detail.requestHeaders = headersToObject(headers) + detail.requestData = bodyValue(options?.body) + detail.requestStartTime = Date.now() / 1000 + detail.responseHeaders = {} + detail.loadCallFrames() +} + +function failureText(error: unknown): string { + return error instanceof Error ? error.message : String(error || 'Fetch failed') +} + +function responseInto(detail: RequestDetail, response: Response): void { + detail.responseHeaders = headersToObject(response.headers) + detail.responseStatusCode = response.status || 0 + ;(detail as RequestDetail & { responseStatusText?: string }).responseStatusText = + response.statusText } -/** - * Check if the response is a Server-Sent Events (SSE) stream - */ function isEventStream(response: Response): boolean { - const contentType = response.headers.get('content-type') || '' - return contentType.includes('text/event-stream') + return (response.headers.get('content-type') ?? '').includes('text/event-stream') } -/** - * Handle SSE (Server-Sent Events) streaming response - */ -async function handleEventStreamResponse( +async function captureEventStream( response: Response, - requestDetail: RequestDetail, + detail: RequestDetail, mainProcess: MainProcess ): Promise { - const body = response.clone().body - if (!body) { + const stream = response.clone().body + if (!stream) { + detail.responseData = Buffer.alloc(0) + detail.responseInfo = { dataLength: 0, encodedDataLength: 0 } + mainProcess.sendRequest('endRequest', detail) return } - const reader = body.getReader() + const chunks: Buffer[] = [] const decoder = new TextDecoder() - let buffer = '' - const allChunks: Uint8Array[] = [] - - // Send responseReceived first (type: EventSource) so DevTools knows this is an SSE request - mainProcess.send({ - type: 'eventSourceResponseReceived', - data: requestDetail + const parser = new SseParser((message) => { + void mainProcess.send({ + type: 'eventSourceMessage', + data: { requestId: detail.id, ...message } + }) }) + const reader = stream.getReader() try { while (true) { const { done, value } = await reader.read() - - if (done) { - break - } - - if (value) { - allChunks.push(value) - buffer += decoder.decode(value, { stream: true }) - - // Parse SSE events from buffer - const lines = buffer.split('\n') - buffer = lines.pop() || '' // Keep incomplete line in buffer - - let currentEventType = 'message' - let currentEventData = '' - let currentEventId = '' - - for (const line of lines) { - if (line.startsWith('event:')) { - currentEventType = line.slice(6).trim() - } else if (line.startsWith('data:')) { - currentEventData += (currentEventData ? '\n' : '') + line.slice(5).trim() - } else if (line.startsWith('id:')) { - currentEventId = line.slice(3).trim() - } else if (line === '') { - // Empty line means end of event - if (currentEventData) { - mainProcess.send({ - type: 'eventSourceMessage', - data: { - requestId: requestDetail.id, - eventName: currentEventType, - eventId: currentEventId, - data: currentEventData - } - }) - } - // Reset for next event - currentEventType = 'message' - currentEventData = '' - currentEventId = '' - } - } - } - } - - // Handle any remaining data in buffer - if (buffer.trim()) { - const lines = buffer.split('\n') - let currentEventType = 'message' - let currentEventData = '' - let currentEventId = '' - - for (const line of lines) { - if (line.startsWith('event:')) { - currentEventType = line.slice(6).trim() - } else if (line.startsWith('data:')) { - currentEventData += (currentEventData ? '\n' : '') + line.slice(5).trim() - } else if (line.startsWith('id:')) { - currentEventId = line.slice(3).trim() - } - } - - if (currentEventData) { - mainProcess.send({ - type: 'eventSourceMessage', - data: { - requestId: requestDetail.id, - eventName: currentEventType, - eventId: currentEventId, - data: currentEventData - } - }) - } + if (done) break + if (!value) continue + chunks.push(Buffer.from(value)) + parser.push(decoder.decode(value, { stream: true })) } + parser.finish(decoder.decode()) + const body = Buffer.concat(chunks) + detail.responseData = body + detail.responseInfo = { dataLength: body.length, encodedDataLength: body.length } + detail.requestEndTime = Date.now() / 1000 + mainProcess.sendRequest('endRequest', detail) + } catch (error) { + detail.requestEndTime = Date.now() / 1000 + await mainProcess.send({ + type: 'requestFailed', + data: { request: detail, errorText: failureText(error), canceled: true } + }) + } +} - // Combine all chunks for final response data - const totalLength = allChunks.reduce((acc, chunk) => acc + chunk.length, 0) - const combinedArray = new Uint8Array(totalLength) - let offset = 0 - for (const chunk of allChunks) { - combinedArray.set(chunk, offset) - offset += chunk.length - } +function captureResponse( + response: Response, + detail: RequestDetail, + mainProcess: MainProcess +): void { + responseInto(detail, response) + void mainProcess.send({ + type: isEventStream(response) ? 'eventSourceResponseReceived' : 'responseReceived', + data: detail + }) - requestDetail.responseData = Buffer.from(combinedArray) - requestDetail.responseInfo.dataLength = totalLength - requestDetail.responseInfo.encodedDataLength = totalLength - } catch (error) { - // Stream was aborted or errored, still try to save what we have - if (allChunks.length > 0) { - const totalLength = allChunks.reduce((acc, chunk) => acc + chunk.length, 0) - const combinedArray = new Uint8Array(totalLength) - let offset = 0 - for (const chunk of allChunks) { - combinedArray.set(chunk, offset) - offset += chunk.length - } - requestDetail.responseData = Buffer.from(combinedArray) - requestDetail.responseInfo.dataLength = totalLength - requestDetail.responseInfo.encodedDataLength = totalLength - } - } finally { - requestDetail.requestEndTime = Date.now() - mainProcess.sendRequest('updateRequest', requestDetail).sendRequest('endRequest', requestDetail) + if (isEventStream(response)) { + void captureEventStream(response, detail, mainProcess) + return } + + void response + .clone() + .arrayBuffer() + .then((arrayBuffer) => { + const body = Buffer.from(arrayBuffer) + detail.responseData = body + detail.responseInfo = { dataLength: body.length, encodedDataLength: body.length } + detail.requestEndTime = Date.now() / 1000 + mainProcess.sendRequest('endRequest', detail) + }) + .catch(async (error) => { + detail.requestEndTime = Date.now() / 1000 + await mainProcess.send({ + type: 'requestFailed', + data: { request: detail, errorText: failureText(error), canceled: true } + }) + }) } -function fetchResponseHandlerFactory(requestDetail: RequestDetail, mainProcess: MainProcess) { - return (response: Response) => { - requestDetail.requestEndTime = new Date().getTime() - requestDetail.responseHeaders = headersToObject(response.headers) - requestDetail.responseStatusCode = response.status || 0 - - // Check if this is an SSE stream - if (isEventStream(response)) { - // Handle SSE asynchronously without blocking the response - handleEventStreamResponse(response, requestDetail, mainProcess) - return response +export function fetchProxyFactory( + fetchFn: typeof fetch, + mainProcess: MainProcess, + mockRules: readonly LegacyMockRule[] = [] +): typeof fetch { + return function fetchProxy(request: string | URL | Request, options?: RequestInit) { + if (isLegacyCaptureSuppressed()) { + return fetchFn(request as string | Request, options) } + const detail = new RequestDetail() + populateFetchRequest(detail, request, options) + const cell: Cell = { request: detail, pipes: [], isAborted: false } + setCurrentCell(cell) - // Handle regular response - response - .clone() - .arrayBuffer() - .then((buffer) => { - const responseData = Buffer.from(buffer) - requestDetail.responseData = responseData - requestDetail.responseInfo.dataLength = responseData.length - // TODO: use content-encoding to determine the actual length - requestDetail.responseInfo.encodedDataLength = responseData.length - }) - .finally(() => { - mainProcess - .sendRequest('updateRequest', requestDetail) - .sendRequest('endRequest', requestDetail) - }) + mainProcess.sendRequest('initRequest', detail).sendRequest('registerRequest', detail) - return response - } -} + const mockRule = findFetchMock(mockRules, request, options) + const responsePromise = mockRule + ? mockedFetchResponse(mockRule, options?.signal) + : fetchFn(request as string | Request, options) -function fetchErrorHandlerFactory(requestDetail: RequestDetail, mainProcess: MainProcess) { - return (err: unknown) => { - requestDetail.requestEndTime = Date.now() - requestDetail.responseStatusCode = 0 - mainProcess.sendRequest('updateRequest', requestDetail).sendRequest('endRequest', requestDetail) - throw err - } + return responsePromise + .then( + (response) => { + captureResponse(response, detail, mainProcess) + return response + }, + async (error) => { + detail.requestEndTime = Date.now() / 1000 + await mainProcess.send({ + type: 'requestFailed', + data: { request: detail, errorText: failureText(error) } + }) + throw error + } + ) + .finally(() => { + if (getCurrentCell() === cell) setCurrentCell(null) + }) + } as typeof fetch } diff --git a/packages/network-debugger/src/core/fork.test.ts b/packages/network-debugger/src/core/fork.test.ts index 5b4e060..831bb03 100644 --- a/packages/network-debugger/src/core/fork.test.ts +++ b/packages/network-debugger/src/core/fork.test.ts @@ -1,597 +1,259 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import { EventEmitter } from 'events' -import { RequestDetail, READY_MESSAGE } from '../common' -import type { IncomingMessage } from 'http' - -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { - mockWsSend, - mockWsTerminate, - mockWsRemoveAllListeners, - mockFork, - mockCpKill, - mockCpRemoveAllListeners, - mockExistsSync, - mockReadFileSync, - mockWriteFileSync, - mockSleep, - mockCheckMainProcessAlive, - mockUnlinkSafe, - mockWarn, - mockGetCurrentCell, - mockGenerateUUID, - wsInstances, - cpInstances -} = vi.hoisted(() => { - let uuidCounter = 0 - return { - mockWsSend: vi.fn(), - mockWsTerminate: vi.fn(), - mockWsRemoveAllListeners: vi.fn(), - mockFork: vi.fn(), - mockCpKill: vi.fn(), - mockCpRemoveAllListeners: vi.fn(), - mockExistsSync: vi.fn().mockReturnValue(false), - mockReadFileSync: vi.fn().mockReturnValue('12345'), - mockWriteFileSync: vi.fn(), - mockSleep: vi.fn().mockResolvedValue(undefined), - mockCheckMainProcessAlive: vi.fn().mockResolvedValue(false), - mockUnlinkSafe: vi.fn(), - mockWarn: vi.fn(), - mockGetCurrentCell: vi.fn().mockReturnValue(null), - mockGenerateUUID: vi.fn().mockImplementation(() => `mock-uuid-${++uuidCounter}`), - wsInstances: [] as EventEmitter[], - cpInstances: [] as EventEmitter[] +import { EventEmitter } from 'node:events' +import { describe, expect, test, vi } from 'vitest' +import type { DevtoolsTarget, Diagnostic } from '../adapters/types' +import { RequestDetail } from '../common' +import type { LegacyBridgeError } from '../legacy-bridge/client' +import type { LegacyCaptureEvent } from '../legacy-bridge/contracts' +import { MainProcess } from './fork' +import { setCurrentCell } from './hooks/cell' + +const target: DevtoolsTarget = { + id: 'legacy', + title: 'Legacy', + type: 'node', + url: '', + webSocketDebuggerUrl: 'ws://127.0.0.1:43120/devtools/page/legacy', + discoveryUrl: 'http://127.0.0.1:43120/json/list' +} + +function bridgeHarness() { + const events: LegacyCaptureEvent[] = [] + const listeners = new Set<(diagnostic: Diagnostic) => void>() + const failureListeners = new Set<(error: LegacyBridgeError) => void>() + const bridge = { + ready: Promise.resolve(target), + send: vi.fn(async (event: LegacyCaptureEvent) => { + events.push(event) + }), + onDiagnostic: vi.fn((listener: (diagnostic: Diagnostic) => void) => { + listeners.add(listener) + return () => listeners.delete(listener) + }), + onFailure: vi.fn((listener: (error: LegacyBridgeError) => void) => { + failureListeners.add(listener) + return () => failureListeners.delete(listener) + }), + dispose: vi.fn(async () => undefined) } -}) - -// Mock ws 模块 - 使用正确的继承方式 -vi.mock('ws', () => { - const { EventEmitter } = require('events') + const main = new MainProcess({ key: 'compat-key', port: 5270, serverPort: 0 }, { bridge }) + return { main, bridge, events, listeners, failureListeners } +} + +function request(id = 'request-1'): RequestDetail { + const detail = new RequestDetail() + detail.id = id + detail.url = 'http://example.test/' + detail.method = 'GET' + detail.requestHeaders = {} + return detail +} + +class FakeResponse extends EventEmitter { + statusCode = 200 + statusMessage = 'OK' + headers = { 'content-type': 'text/plain', 'content-encoding': 'gzip' } + complete = false +} + +describe('MainProcess IPC compatibility facade', () => { + test('exposes ready/diagnostics and keeps the chainable sendRequest API', async () => { + const { main, bridge, events, listeners, failureListeners } = bridgeHarness() + const detail = request() + const onFailure = vi.fn() + main.onFailure(onFailure) + expect(failureListeners.has(onFailure)).toBe(true) + const diagnosticListener = vi.fn() + + expect(main.onDiagnostic(diagnosticListener)).toEqual(expect.any(Function)) + expect(listeners.has(diagnosticListener)).toBe(true) + expect(main.sendRequest('initRequest', detail)).toBe(main) + expect(main.sendRequest('registerRequest', detail)).toBe(main) + await expect(main.ready).resolves.toEqual(target) + expect(events.map((event) => event.type)).toEqual(['initRequest', 'registerRequest']) + + await main.dispose() + expect(bridge.dispose).toHaveBeenCalledOnce() + }) - function MockWebSocket(this: EventEmitter) { - EventEmitter.call(this) - this.send = mockWsSend - this.terminate = mockWsTerminate - const originalRemoveAllListeners = this.removeAllListeners.bind(this) - this.removeAllListeners = function () { - mockWsRemoveAllListeners() - return originalRemoveAllListeners() + test('binds pipes and abort state by request id across concurrent async lifecycles', async () => { + const { main, events } = bridgeHarness() + const first = request('concurrent-a') + const second = request('concurrent-b') + const firstCell = { + request: first, + isAborted: false, + pipes: [ + { + type: 'updateRequest' as const, + pipe: (detail: RequestDetail) => Object.assign(new RequestDetail(detail), { method: 'A' }) + } + ] } - wsInstances.push(this) - } - - // 正确继承 EventEmitter - MockWebSocket.prototype = Object.create(EventEmitter.prototype) - MockWebSocket.prototype.constructor = MockWebSocket - - return { - default: MockWebSocket - } -}) - -// Mock child_process 模块 -vi.mock('child_process', () => { - const { EventEmitter } = require('events') - - return { - fork: function () { - mockFork() - const cp = new EventEmitter() - cp.send = vi.fn().mockReturnValue(true) - cp.kill = mockCpKill - const originalRemoveAllListeners = cp.removeAllListeners.bind(cp) - cp.removeAllListeners = function () { - mockCpRemoveAllListeners() - return originalRemoveAllListeners() - } - cpInstances.push(cp) - return cp + const secondCell = { + request: second, + isAborted: false, + pipes: [ + { + type: 'updateRequest' as const, + pipe: (detail: RequestDetail) => Object.assign(new RequestDetail(detail), { method: 'B' }) + } + ] } - } -}) - -// Mock fs 模块 -vi.mock('fs', () => ({ - default: { - existsSync: mockExistsSync, - readFileSync: mockReadFileSync, - writeFileSync: mockWriteFileSync - } -})) - -// Mock utils/process 模块 -vi.mock('../utils/process', () => ({ - sleep: mockSleep, - checkMainProcessAlive: mockCheckMainProcessAlive -})) -// Mock utils/file 模块 -vi.mock('../utils/file', () => ({ - unlinkSafe: mockUnlinkSafe -})) - -// Mock utils 模块 - 添加 generateUUID -vi.mock('../utils', () => ({ - warn: mockWarn, - generateUUID: mockGenerateUUID -})) - -// Mock hooks/cell 模块 -vi.mock('./hooks/cell', () => ({ - getCurrentCell: mockGetCurrentCell -})) - -describe('core/fork.ts', () => { - beforeEach(() => { - vi.useFakeTimers() - vi.clearAllMocks() - wsInstances.length = 0 - cpInstances.length = 0 - mockExistsSync.mockReturnValue(false) - mockCheckMainProcessAlive.mockResolvedValue(false) - mockGetCurrentCell.mockReturnValue(null) - }) - - afterEach(() => { - vi.useRealTimers() - vi.restoreAllMocks() + setCurrentCell(firstCell) + main.sendRequest('initRequest', first) + setCurrentCell(secondCell) + main.sendRequest('initRequest', second) + // The global cell now belongs to B; A must still use its own pipe/state. + main.sendRequest('updateRequest', first) + firstCell.isAborted = true + main.sendRequest('updateRequest', first) + main.sendRequest('updateRequest', second) + setCurrentCell(null) + + const updates = events.filter( + (event): event is Extract => + event.type === 'updateRequest' + ) + expect(updates.map((event) => [event.data.id, event.data.method])).toEqual([ + ['concurrent-a', 'A'], + ['concurrent-b', 'B'] + ]) + await main.dispose() }) - describe('MainProcess 类', () => { - describe('构造函数', () => { - test('当 lock 文件不存在时,创建新的 WebSocket 连接并写入 lock 文件', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 验证 lock 文件被写入 - expect(mockWriteFileSync).toHaveBeenCalledWith( - expect.stringContaining('test-key'), - expect.stringContaining(String(process.pid)) - ) - - // 验证 WebSocket 被创建 - expect(wsInstances.length).toBe(1) - }) - - test('WebSocket 连接成功后删除 lock 文件', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 验证 lock 文件被删除 - expect(mockUnlinkSafe).toHaveBeenCalled() - }) - - test('当 lock 文件存在且进程存活时,跳过创建并输出警告', async () => { - mockExistsSync.mockReturnValue(true) - mockReadFileSync.mockReturnValue('12345') - mockCheckMainProcessAlive.mockResolvedValue(true) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 运行所有待处理的定时器和微任务 - await vi.runAllTimersAsync() - - // 验证警告被输出 - expect(mockWarn).toHaveBeenCalledWith(expect.stringContaining('already running')) - }) - - test('当 lock 文件存在但进程不存活时,删除 lock 文件并继续', async () => { - mockExistsSync.mockReturnValue(true) - mockReadFileSync.mockReturnValue('12345') - mockCheckMainProcessAlive.mockResolvedValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 运行所有待处理的定时器和微任务 - await vi.runAllTimersAsync() - - // 验证 lock 文件被删除 - expect(mockUnlinkSafe).toHaveBeenCalled() - }) - - test('WebSocket 连接错误时,启动子进程', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接错误 - wsInstances[0].emit('error', new Error('Connection refused')) - - // 验证 fork 被调用 - expect(mockFork).toHaveBeenCalled() - }) - - test('子进程发送 READY_MESSAGE 后创建新的 WebSocket 连接', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - const initialWsCount = wsInstances.length - - // 模拟 WebSocket 连接错误 - wsInstances[0].emit('error', new Error('Connection refused')) - - // 模拟子进程发送 ready 消息 - cpInstances[0].emit('message', READY_MESSAGE) - - // 验证新的 WebSocket 连接被创建 - expect(wsInstances.length).toBeGreaterThan(initialWsCount) - }) - - test('子进程发送非 READY_MESSAGE 时不创建新连接', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接错误 - wsInstances[0].emit('error', new Error('Connection refused')) - - const wsCountAfterError = wsInstances.length - - // 模拟子进程发送其他消息 - cpInstances[0].emit('message', 'other-message') - - // 验证没有创建新的 WebSocket 连接 - expect(wsInstances.length).toBe(wsCountAfterError) - }) - - test('WebSocket 错误事件被正确记录', async () => { - const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 先连接成功 - wsInstances[0].emit('open') - - // 等待 Promise 解析 - await vi.advanceTimersByTimeAsync(0) - - // 然后发生错误 - const error = new Error('WebSocket error') - wsInstances[0].emit('error', error) - - // 验证错误被记录 - expect(consoleSpy).toHaveBeenCalledWith('MainProcess Socket Error: ', error) - - consoleSpy.mockRestore() - }) - }) - - describe('send 方法', () => { - test('发送数据到 WebSocket', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 发送数据 - const testData = { type: 'test', data: { foo: 'bar' } } - await mainProcess.send(testData) - - // 验证数据被发送 - expect(mockWsSend).toHaveBeenCalledWith(JSON.stringify(testData)) - }) - - test('当 cell 被中止时,不发送数据', async () => { - mockExistsSync.mockReturnValue(false) - mockGetCurrentCell.mockReturnValue({ - isAborted: true, - request: new RequestDetail(), - pipes: [] - }) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 清除之前的调用 - mockWsSend.mockClear() - - // 发送数据 - await mainProcess.send({ type: 'test' }) - - // 验证数据没有被发送 - expect(mockWsSend).not.toHaveBeenCalled() - }) - }) - - describe('sendRequest 方法', () => { - test('发送请求数据', async () => { - mockExistsSync.mockReturnValue(false) - mockGetCurrentCell.mockReturnValue(null) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 等待 Promise 解析 - await vi.advanceTimersByTimeAsync(0) - - // 清除之前的调用 - mockWsSend.mockClear() - - // 发送请求 - const requestDetail = new RequestDetail() - requestDetail.url = 'http://example.com' - requestDetail.method = 'GET' - - mainProcess.sendRequest('initRequest', requestDetail) - - // 等待异步发送完成 - await vi.advanceTimersByTimeAsync(0) - - // 验证数据被发送 - expect(mockWsSend).toHaveBeenCalledWith(expect.stringContaining('initRequest')) - }) - - test('返回 this 以支持链式调用', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - const requestDetail = new RequestDetail() - const result = mainProcess.sendRequest('initRequest', requestDetail) - - expect(result).toBe(mainProcess) - }) - - test('当存在 cell 时,应用 pipes', async () => { - mockExistsSync.mockReturnValue(false) - - const mockPipe = vi.fn((req: RequestDetail) => { - req.method = 'POST' - return req - }) - - mockGetCurrentCell.mockReturnValue({ - isAborted: false, - request: new RequestDetail(), - pipes: [{ type: 'initRequest', pipe: mockPipe }] - }) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - const requestDetail = new RequestDetail() - requestDetail.method = 'GET' - - mainProcess.sendRequest('initRequest', requestDetail) - - // 验证 pipe 被调用 - expect(mockPipe).toHaveBeenCalled() - }) - - test('只应用匹配类型的 pipes', async () => { - mockExistsSync.mockReturnValue(false) - - const initPipe = vi.fn((req: RequestDetail) => req) - const updatePipe = vi.fn((req: RequestDetail) => req) - - mockGetCurrentCell.mockReturnValue({ - isAborted: false, - request: new RequestDetail(), - pipes: [ - { type: 'initRequest', pipe: initPipe }, - { type: 'updateRequest', pipe: updatePipe } - ] - }) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - const requestDetail = new RequestDetail() - mainProcess.sendRequest('initRequest', requestDetail) - - // 验证只有 initPipe 被调用 - expect(initPipe).toHaveBeenCalled() - expect(updatePipe).not.toHaveBeenCalled() - }) + test('strips IncomingMessage/socket state from the WebSocket handshake event', async () => { + const { main, events } = bridgeHarness() + const response = Object.assign(new EventEmitter(), { + httpVersion: '1.1', + statusCode: 101, + statusMessage: 'Switching Protocols', + rawHeaders: ['Upgrade', 'websocket'], + headers: { upgrade: 'websocket' }, + socket: { live: true } }) - describe('responseRequest 方法', () => { - test('处理响应数据并发送', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 等待 Promise 解析 - await vi.advanceTimersByTimeAsync(0) - - // 清除之前的调用 - mockWsSend.mockClear() - - // 创建 mock 响应 - const mockResponse = new EventEmitter() as EventEmitter & { - statusCode: number - headers: Record - } - mockResponse.statusCode = 200 - mockResponse.headers = { 'content-type': 'application/json' } - - // 调用 responseRequest - mainProcess.responseRequest('test-id', mockResponse as IncomingMessage) - - // 模拟响应数据 - mockResponse.emit('data', Buffer.from('{"foo":"bar"}')) - mockResponse.emit('end') - - // 等待异步操作完成 - await vi.advanceTimersByTimeAsync(0) - - // 验证数据被发送 - expect(mockWsSend).toHaveBeenCalledWith(expect.stringContaining('responseData'), { - binary: true - }) - - // 验证发送的数据包含正确的 id 和状态码 - const sentData = JSON.parse(mockWsSend.mock.calls[0][0]) - expect(sentData.type).toBe('responseData') - expect(sentData.data.id).toBe('test-id') - expect(sentData.data.statusCode).toBe(200) - }) - - test('正确合并多个数据块', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 等待 Promise 解析 - await vi.advanceTimersByTimeAsync(0) - - // 清除之前的调用 - mockWsSend.mockClear() - - const mockResponse = new EventEmitter() as EventEmitter & { - statusCode: number - headers: Record + await main.send({ + type: 'Network.webSocketCreated', + data: { requestId: 'ws-1', url: 'ws://example.test/', response } + } as any) + + expect(events).toEqual([ + { + type: 'Network.webSocketCreated', + data: { + requestId: 'ws-1', + url: 'ws://example.test/', + response: { + httpVersion: '1.1', + statusCode: 101, + statusMessage: 'Switching Protocols', + rawHeaders: ['Upgrade', 'websocket'], + headers: { upgrade: 'websocket' } + } } - mockResponse.statusCode = 200 - mockResponse.headers = {} - - mainProcess.responseRequest('test-id', mockResponse as IncomingMessage) - - // 模拟多个数据块 - mockResponse.emit('data', Buffer.from('Hello')) - mockResponse.emit('data', Buffer.from(' ')) - mockResponse.emit('data', Buffer.from('World')) - mockResponse.emit('end') - - await vi.advanceTimersByTimeAsync(0) - - // 验证数据被正确合并 - const sentData = JSON.parse(mockWsSend.mock.calls[0][0]) - const rawData = Buffer.from(sentData.data.rawData.data) - expect(rawData.toString()).toBe('Hello World') - }) - }) - - describe('dispose 方法', () => { - test('清理 WebSocket 连接', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 调用 dispose - await mainProcess.dispose() - - // 验证 WebSocket 被清理 - expect(mockWsRemoveAllListeners).toHaveBeenCalled() - expect(mockWsTerminate).toHaveBeenCalled() - }) - - test('清理子进程', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - const mainProcess = new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接错误,触发子进程创建 - wsInstances[0].emit('error', new Error('Connection refused')) - - // 模拟子进程发送 ready 消息 - cpInstances[0].emit('message', READY_MESSAGE) - - // 模拟新的 WebSocket 连接成功 - wsInstances[1].emit('open') - - // 调用 dispose - await mainProcess.dispose() - - // 验证子进程被清理 - expect(mockCpRemoveAllListeners).toHaveBeenCalled() - expect(mockCpKill).toHaveBeenCalled() - }) - }) - - describe('healthCheck 私有方法', () => { - test('WebSocket 连接成功后发送健康检查消息', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 等待 Promise 解析 - await vi.advanceTimersByTimeAsync(0) - - // 验证健康检查消息被发送 - expect(mockWsSend).toHaveBeenCalledWith(expect.stringContaining('healthcheck')) - }) - - test('定时发送健康检查消息', async () => { - mockExistsSync.mockReturnValue(false) - - const { MainProcess } = await import('./fork') - new MainProcess({ port: 5270, key: 'test-key' }) - - // 模拟 WebSocket 连接成功 - wsInstances[0].emit('open') - - // 清除初始的健康检查调用 - mockWsSend.mockClear() - - // 推进时间 2 秒 - await vi.advanceTimersByTimeAsync(2000) + } + ]) + expect((events[0] as any).data.response.socket).toBeUndefined() + await main.dispose() + }) - // 验证健康检查消息被再次发送 - expect(mockWsSend).toHaveBeenCalledWith(expect.stringContaining('healthcheck')) - }) + test('normalizes the historical method/params WebSocket close shape', async () => { + const { main, events } = bridgeHarness() + await main.send({ + method: 'Network.webSocketClosed', + params: { requestId: 'ws-2', timestamp: 123 } }) + expect(events).toEqual([{ type: 'Network.webSocketClosed', data: { requestId: 'ws-2' } }]) + await main.dispose() }) - describe('RequestType 类型', () => { - test('导出正确的请求类型', async () => { - const { MainProcess } = await import('./fork') + test('emits responseReceived immediately and responseData with a real Buffer only on end', async () => { + const { main, events } = bridgeHarness() + const detail = request('success') + main.sendRequest('registerRequest', detail) + const response = new FakeResponse() + + main.responseRequest('success', response as any) + expect(events.map((event) => event.type)).toEqual(['registerRequest', 'responseReceived']) + expect(events[1].data as RequestDetail & { responseStatusText?: string }).toMatchObject({ + responseStatusCode: 200, + responseStatusText: 'OK' + }) - // 验证 MainProcess 类存在 - expect(MainProcess).toBeDefined() - expect(typeof MainProcess).toBe('function') + response.emit('data', Buffer.from('hello ')) + response.emit('data', new Uint8Array(Buffer.from('world'))) + response.complete = true + response.emit('end') + response.emit('close') + + expect(events.map((event) => event.type)).toEqual([ + 'registerRequest', + 'responseReceived', + 'responseData' + ]) + const result = events[2] as Extract + expect(Buffer.isBuffer(result.data.rawData)).toBe(true) + expect(result.data.rawData.toString()).toBe('hello world') + expect(detail.requestEndTime).toBeGreaterThan(1_000_000_000) + expect(detail.requestEndTime).toBeLessThan(10_000_000_000) + expect(result.data).toMatchObject({ + id: 'success', + statusCode: 200, + statusMessage: 'OK', + contentEncoding: 'gzip' }) + await main.dispose() }) - describe('__dirname 导出', () => { - test('导出 __dirname', async () => { - const forkModule = await import('./fork') - - expect(forkModule.__dirname).toBeDefined() - expect(typeof forkModule.__dirname).toBe('string') - }) + test.each([ + ['aborted', undefined, true], + ['error', new Error('socket reset'), false], + ['close', undefined, false] + ] as const)( + '%s emits requestFailed exactly once and never responseData', + async (eventName, error, canceled) => { + const { main, events } = bridgeHarness() + const detail = request(eventName) + main.sendRequest('registerRequest', detail) + const response = new FakeResponse() + // Real IncomingMessage consumers may keep their own error listener after + // MainProcess removes only the listener it owns. + response.on('error', () => undefined) + main.responseRequest(detail, response as any) + + if (error) response.emit(eventName, error) + else response.emit(eventName) + response.emit('error', new Error('duplicate')) + response.emit('close') + + expect(events.map((event) => event.type)).toEqual([ + 'registerRequest', + 'responseReceived', + 'requestFailed' + ]) + const failed = events[2] as Extract + expect(failed.data.request.id).toBe(eventName) + expect(failed.data.request.requestEndTime).toBeLessThan(10_000_000_000) + expect(Boolean(failed.data.canceled)).toBe(canceled) + expect(events.some((event) => event.type === 'responseData')).toBe(false) + await main.dispose() + } + ) + + test('dispose removes active response listeners and ignores later stream events', async () => { + const { main, bridge, events } = bridgeHarness() + const detail = request('dispose') + main.sendRequest('registerRequest', detail) + const response = new FakeResponse() + main.responseRequest(detail, response as any) + + await main.dispose() + expect(response.listenerCount('data')).toBe(0) + expect(response.listenerCount('end')).toBe(0) + response.emit('data', Buffer.from('ignored')) + response.emit('end') + expect(events.map((event) => event.type)).toEqual(['registerRequest', 'responseReceived']) + expect(bridge.dispose).toHaveBeenCalledOnce() }) }) diff --git a/packages/network-debugger/src/core/fork.ts b/packages/network-debugger/src/core/fork.ts index 13d6c17..c8ead6d 100644 --- a/packages/network-debugger/src/core/fork.ts +++ b/packages/network-debugger/src/core/fork.ts @@ -1,190 +1,296 @@ -import { READY_MESSAGE, RequestDetail } from '../common' -import { type IncomingMessage } from 'http' -import WebSocket from 'ws' -import { ChildProcess, fork } from 'child_process' -import { __dirname } from '../common' -import { resolve as resolvePath } from 'path' -import { RegisterOptions } from '../common' -import fs from 'fs' -import { sleep, checkMainProcessAlive } from '../utils/process' -import { unlinkSafe } from '../utils/file' -import { warn } from '../utils' -import { getCurrentCell } from './hooks/cell' - -class ExpectError extends Error { - constructor(message: string) { - super(message) +import type { IncomingHttpHeaders, IncomingMessage } from 'node:http' +import type { DevtoolsTarget, Diagnostic } from '../adapters/types' +import { RequestDetail, type RegisterOptions } from '../common' +import { + LegacyBridgeClient, + type LegacyBridgeClientDependencies, + type DiagnosticListener, + type FailureListener, + type LegacyBridgeError +} from '../legacy-bridge/client' +import type { + LegacyCaptureEvent, + LegacyCaptureSink, + LegacyRequestEventType, + LegacyResponseData, + LegacyWebSocketHandshake +} from '../legacy-bridge/contracts' +import { getCurrentCell, type Cell } from './hooks/cell' + +export type RequestType = LegacyRequestEventType + +type CapturedIncomingMessage = NodeJS.ReadableStream & { + statusCode?: number + statusMessage?: string + headers: IncomingHttpHeaders + httpVersion?: string + rawHeaders?: string[] + complete?: boolean +} + +interface LegacyBridgeTransport { + readonly ready: Promise + send(event: LegacyCaptureEvent): Promise + onDiagnostic(listener: DiagnosticListener): () => void + onFailure(listener: FailureListener): () => void + dispose(): Promise +} + +export interface MainProcessDependencies extends LegacyBridgeClientDependencies { + bridge?: LegacyBridgeTransport +} + +function headerValue(headers: IncomingHttpHeaders, name: string): string | undefined { + const value = headers[name] + if (Array.isArray(value)) return value[0] + return value === undefined ? undefined : String(value) +} + +function websocketHandshake(response: unknown): LegacyWebSocketHandshake { + const value = (response ?? {}) as Partial & Partial + return { + httpVersion: typeof value.httpVersion === 'string' ? value.httpVersion : '', + statusCode: typeof value.statusCode === 'number' ? value.statusCode : 0, + statusMessage: typeof value.statusMessage === 'string' ? value.statusMessage : '', + rawHeaders: Array.isArray(value.rawHeaders) ? [...value.rawHeaders] : [], + headers: value.headers && typeof value.headers === 'object' ? { ...value.headers } : {} } } /** - * @flow initRequest -> registerRequest -> updateRequest -> endRequest + * Convert the handful of historical capture call shapes at the compatibility + * boundary, and guarantee that sockets/IncomingMessage objects never cross IPC. */ -export type RequestType = 'initRequest' | 'registerRequest' | 'updateRequest' | 'endRequest' - -export class MainProcess { - private ws: Promise - private options: RegisterOptions - private cp?: ChildProcess - - constructor(props: RegisterOptions & { key: string }) { - this.options = props - this.ws = new Promise(async (resolve, reject) => { - const lockFilePath = resolvePath(__dirname, `./${props.key}`) - if (fs.existsSync(lockFilePath)) { - // 读取 lock 文件中的进程号 - const pid = fs.readFileSync(lockFilePath, 'utf-8') - await sleep(1) - - // 检测该进程是否存活且 port 是否被占用 - const isProcessAlice = await checkMainProcessAlive(pid, props.port!) - if (isProcessAlice) { - warn(`The main process with same options is already running, skip it.`) - return - } - // 如果进程不存在: - // 1. 热更新导致 process 重启 - // 2. 上一个进程未成功删除 lock - // 都应该继续往下 - unlinkSafe(lockFilePath) - } - fs.writeFileSync(lockFilePath, `${process.pid}`) - const socket = new WebSocket(`ws://127.0.0.1:${props.port}`) - socket.on('open', () => { - unlinkSafe(lockFilePath) - resolve(socket) - }) - socket.on('error', () => { - this.openProcess(() => { - unlinkSafe(lockFilePath) - const socket = new WebSocket(`ws://127.0.0.1:${props.port}`) - socket.on('open', () => { - resolve(socket) - }) - socket.on('error', reject) - }) - }) - }) - this.ws - .then((ws) => { - this.healthCheck() - ws.on('error', (e) => { - console.error('MainProcess Socket Error: ', e) - }) - }) - .catch((e) => { - if (e instanceof ExpectError) { - return - } - throw e - }) +function normalizeCaptureEvent(input: unknown): LegacyCaptureEvent | undefined { + if (!input || typeof input !== 'object') return undefined + const value = input as Record + + // v1 accidentally used CDP's method/params shape for this one event. + if (value.method === 'Network.webSocketClosed') { + const params = (value.params ?? {}) as { requestId?: unknown } + if (typeof params.requestId !== 'string') return undefined + return { + type: 'Network.webSocketClosed', + data: { requestId: params.requestId } + } } - private openProcess(callback?: (cp: ChildProcess) => void) { - const forkProcess = () => { - // fork a new process with options - const cp = fork(resolvePath(__dirname, './fork'), { - env: { - ...process.env, - NETWORK_OPTIONS: JSON.stringify(this.options) - } - }) - const handleMsg = (e: any) => { - if (e === READY_MESSAGE) { - callback && callback(cp) - cp.off('message', handleMsg) - } + if (typeof value.type !== 'string' || !('data' in value)) return undefined + if (value.type === 'Network.webSocketCreated') { + const data = value.data as Record + if (!data || typeof data.requestId !== 'string' || typeof data.url !== 'string') { + return undefined + } + return { + type: 'Network.webSocketCreated', + data: { + requestId: data.requestId, + url: data.url, + ...(data.initiator ? { initiator: data.initiator as RequestDetail['initiator'] } : {}), + response: websocketHandshake(data.response) } - - cp.on('message', handleMsg) - this.cp = cp } + } + + return input as LegacyCaptureEvent +} + +function requestForId(id: string, known?: RequestDetail): RequestDetail { + if (known) return known + const request = new RequestDetail() + request.id = id + return request +} + +/** + * Compatibility facade used by the existing HTTP/fetch capture patches. + * Application-to-child transport is process IPC with advanced serialization. + */ +export class MainProcess implements LegacyCaptureSink { + readonly ready: Promise + + private readonly bridge: LegacyBridgeTransport + private readonly requests = new Map() + private readonly requestCells = new Map() + private readonly responseCleanups = new Set<() => void>() + private disposed = false - forkProcess() + constructor( + props: RegisterOptions & { key: string }, + dependencies: MainProcessDependencies = {} + ) { + this.bridge = + dependencies.bridge ?? + new LegacyBridgeClient( + { + host: '127.0.0.1', + targetPort: props.serverPort ?? 0, + title: 'Node Network Devtools (Legacy)' + }, + dependencies + ) + this.ready = this.bridge.ready } - public async send(data: any) { - const currentCell = getCurrentCell() - if (currentCell?.isAborted) { - return + onDiagnostic(listener: (diagnostic: Diagnostic) => void): () => void { + return this.bridge.onDiagnostic(listener) + } + + onFailure(listener: (error: LegacyBridgeError) => void): () => void { + return this.bridge.onFailure(listener) + } + + public send(event: LegacyCaptureEvent): Promise + public send(event: unknown): Promise + public send(event: unknown): Promise { + if (this.disposed) return Promise.resolve() + const normalized = normalizeCaptureEvent(event) + if (!normalized) return Promise.resolve() + const sendPromise = this.bridge.send(normalized) + const terminalRequestId = + normalized.type === 'requestFailed' + ? normalized.data.request.id + : normalized.type === 'Network.webSocketClosed' + ? normalized.data.requestId + : undefined + if (terminalRequestId) { + this.requests.delete(terminalRequestId) + this.requestCells.delete(terminalRequestId) } - const ws = await this.ws.catch((err) => { - if (err instanceof ExpectError) { - return null - } - throw err - }) - if (!ws) return - ws.send(JSON.stringify(data)) + return sendPromise } - public sendRequest(type: RequestType, request: RequestDetail) { - const currentCell = getCurrentCell() - let req = request + public sendRequest(type: RequestType, request: RequestDetail): this { + const requestId = request.id + let currentCell = this.requestCells.get(requestId) + if ((type === 'initRequest' || type === 'registerRequest') && !currentCell) { + const candidate = getCurrentCell() + if (candidate?.request.id === requestId) { + currentCell = candidate + this.requestCells.set(requestId, candidate) + } + } + + if (currentCell?.isAborted) { + if (type === 'endRequest') this.requestCells.delete(requestId) + return this + } + + let transformed = request if (currentCell) { - currentCell.request = req - const pipes = currentCell.pipes.filter((p) => p.type === type).map((p) => p.pipe) - pipes.forEach((pipe) => { - req = pipe(req) - }) - currentCell.request = req + currentCell.request = transformed + const pipes = currentCell.pipes.filter((pipe) => pipe.type === type) + for (const { pipe } of pipes) transformed = pipe(transformed) + currentCell.request = transformed } - this.send({ - type, - data: request - }) + if (transformed.id !== requestId && currentCell) { + this.requestCells.delete(requestId) + this.requestCells.set(transformed.id, currentCell) + } + this.requests.set(transformed.id, transformed) + void this.send({ type, data: transformed }) + if (type === 'endRequest') { + this.requests.delete(transformed.id) + this.requestCells.delete(transformed.id) + } return this } - private async healthCheck() { - const ws = await this.ws - const ping = () => { - ws.send( - JSON.stringify({ - type: 'healthcheck', - data: {} - }) - ) - } - ping() - setInterval(ping, 2000) - } + public responseRequest(id: string, response: CapturedIncomingMessage): void + public responseRequest(request: RequestDetail, response: CapturedIncomingMessage): void + public responseRequest( + idOrRequest: string | RequestDetail, + response: CapturedIncomingMessage + ): void { + if (this.disposed) return + const id = typeof idOrRequest === 'string' ? idOrRequest : idOrRequest.id + const request = requestForId( + id, + typeof idOrRequest === 'string' ? this.requests.get(id) : idOrRequest + ) + request.responseHeaders = response.headers ?? request.responseHeaders ?? {} + request.responseStatusCode = response.statusCode ?? request.responseStatusCode ?? 0 + ;(request as RequestDetail & { responseStatusText?: string }).responseStatusText = + response.statusMessage + this.requests.set(id, request) + + // responseReceived is emitted as soon as headers arrive. Body completion is + // deliberately separate so failures never produce loadingFinished. + void this.send({ type: 'responseReceived', data: request }) - public responseRequest(id: string, response: IncomingMessage) { - const responseBuffer: Buffer[] = [] - - response.on('data', (chunk: any) => { - responseBuffer.push(chunk) - }) - - response.on('end', () => { - const rawData = Buffer.concat(responseBuffer) - this.ws.then((ws) => { - ws.send( - JSON.stringify({ - type: 'responseData', - data: { - id: id, - rawData: rawData, - statusCode: response.statusCode, - headers: response.headers - } - }), - { binary: true } - ) + const chunks: Buffer[] = [] + let settled = false + + const cleanup = () => { + response.off('data', onData) + response.off('end', onEnd) + response.off('aborted', onAborted) + response.off('error', onError) + response.off('close', onClose) + this.responseCleanups.delete(cleanup) + this.requests.delete(id) + this.requestCells.delete(id) + } + const fail = (errorText: string, canceled = false) => { + if (settled || this.disposed) return + settled = true + request.requestEndTime = Date.now() / 1_000 + cleanup() + void this.send({ + type: 'requestFailed', + data: { + request, + errorText, + ...(canceled ? { canceled: true } : {}) + } }) - }) + } + const onData = (chunk: unknown) => { + if (settled) return + if (Buffer.isBuffer(chunk)) chunks.push(chunk) + else if (chunk instanceof Uint8Array) chunks.push(Buffer.from(chunk)) + else chunks.push(Buffer.from(String(chunk))) + } + const onEnd = () => { + if (settled || this.disposed) return + settled = true + const rawData = Buffer.concat(chunks) + request.requestEndTime = Date.now() / 1_000 + const data: LegacyResponseData = { + id, + rawData, + statusCode: response.statusCode ?? request.responseStatusCode ?? 0, + ...(response.statusMessage ? { statusMessage: response.statusMessage } : {}), + headers: response.headers ?? request.responseHeaders ?? {}, + ...(headerValue(response.headers ?? {}, 'content-encoding') + ? { contentEncoding: headerValue(response.headers ?? {}, 'content-encoding') } + : {}) + } + cleanup() + void this.send({ type: 'responseData', data }) + } + const onAborted = () => fail('The response was aborted.', true) + const onError = (error: unknown) => fail(error instanceof Error ? error.message : String(error)) + const onClose = () => { + if (!settled) fail('The response stream closed before completion.') + } + + response.on('data', onData) + response.once('end', onEnd) + response.once('aborted', onAborted) + response.once('error', onError) + response.once('close', onClose) + this.responseCleanups.add(cleanup) } - public async dispose() { - const ws = await this.ws - ws.removeAllListeners() - ws.terminate() - if (!this.cp) return - this.cp.removeAllListeners() - this.cp.kill() - this.cp = void 0 + public async dispose(): Promise { + if (this.disposed) return + this.disposed = true + for (const cleanup of [...this.responseCleanups]) cleanup() + this.responseCleanups.clear() + this.requests.clear() + this.requestCells.clear() + await this.bridge.dispose() } } -export { __dirname } diff --git a/packages/network-debugger/src/core/index.test.ts b/packages/network-debugger/src/core/index.test.ts index 4def64b..1eaf838 100644 --- a/packages/network-debugger/src/core/index.test.ts +++ b/packages/network-debugger/src/core/index.test.ts @@ -1,372 +1,577 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import http from 'http' import https from 'https' +import type { + AdapterProbe, + AdapterSession, + CapabilityMap, + DevtoolsTarget, + Diagnostic +} from '../adapters/types' + +const mocks = vi.hoisted(() => ({ + mainProcessConstructorCalls: [] as Record[], + mainProcessDispose: vi.fn<() => Promise>(), + proxyFetch: vi.fn(), + unsetFetch: vi.fn(), + requestProxyFactory: vi.fn(), + getProxyFactory: vi.fn(), + undiciFetchProxy: vi.fn(), + unsetUndiciFetch: vi.fn(), + generateHash: vi.fn(), + nativeProbe: vi.fn(), + nativeStart: vi.fn(), + openDevtoolsTarget: vi.fn<() => Promise>(), + sessionRecorderStart: vi.fn(), + sessionRecorderClose: vi.fn<() => Promise>(), + exportHar: vi.fn<() => Promise>() +})) -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { mainProcessConstructorCalls, mockDispose, mockSendRequest, mockSend } = vi.hoisted(() => { - return { - mainProcessConstructorCalls: [] as Record[], - mockDispose: vi.fn(), - mockSendRequest: vi.fn(), - mockSend: vi.fn() - } -}) +vi.mock('./fork', () => { + class MainProcess { + readonly ready: Promise + + constructor(readonly options: Record) { + mocks.mainProcessConstructorCalls.push(options) + const port = Number(options.serverPort) || 49_152 + const id = 'node-network-devtools-legacy-test' + const authority = `127.0.0.1:${port}` + this.ready = Promise.resolve({ + id, + title: 'Node Network Devtools (Legacy)', + type: 'node', + url: '', + webSocketDebuggerUrl: `ws://${authority}/devtools/page/${id}`, + devtoolsFrontendUrl: `devtools://devtools/bundled/js_app.html?ws=${authority}/devtools/page/${id}`, + discoveryUrl: `http://${authority}/json/list` + }) + } -// Mock MainProcess 类型定义 -interface MockMainProcessInstance { - props: Record - sendRequest: () => MockMainProcessInstance - send: () => void - dispose: () => void -} + send() {} -// Mock 依赖模块 - 使用函数声明而不是类表达式 -vi.mock('./fork', () => { - // 使用函数构造器模式 - function MainProcess(this: MockMainProcessInstance, props: Record) { - this.props = props - mainProcessConstructorCalls.push(props) - const self = this - this.sendRequest = function (): MockMainProcessInstance { - mockSendRequest() - return self + sendRequest() { + return this } - this.send = function (): void { - mockSend() + + responseRequest() {} + + dispose() { + return mocks.mainProcessDispose() } - this.dispose = function (): void { - mockDispose() + + onDiagnostic() { + return () => undefined } - } - return { - __esModule: true, - MainProcess + onFailure() { + return () => undefined + } } -}) -vi.mock('./fetch', () => ({ - __esModule: true, - proxyFetch: vi.fn().mockReturnValue(() => {}) -})) + return { MainProcess } +}) +vi.mock('./fetch', () => ({ proxyFetch: mocks.proxyFetch })) vi.mock('./request', () => ({ - __esModule: true, - requestProxyFactory: vi.fn().mockReturnValue(() => {}) + requestProxyFactory: mocks.requestProxyFactory, + getProxyFactory: mocks.getProxyFactory })) - -vi.mock('./undici', () => ({ - __esModule: true, - undiciFetchProxy: vi.fn().mockReturnValue(() => {}) +vi.mock('./undici', () => ({ undiciFetchProxy: mocks.undiciFetchProxy })) +vi.mock('../utils', () => ({ generateHash: mocks.generateHash })) +vi.mock('../target/frontend-launcher', () => ({ + openDevtoolsTarget: mocks.openDevtoolsTarget })) - -vi.mock('../utils', () => ({ - __esModule: true, - generateHash: vi.fn().mockReturnValue('mock-hash-key') +vi.mock('../session', () => ({ + SessionRecorder: { start: mocks.sessionRecorderStart }, + exportHar: mocks.exportHar +})) +vi.mock('../adapters/node-native', () => ({ + NodeNativeAdapterError: class NodeNativeAdapterError extends Error { + readonly code: string + readonly hint?: string + readonly diagnostics: readonly Diagnostic[] + + constructor(diagnostic: Diagnostic, diagnostics: readonly Diagnostic[]) { + super(diagnostic.message) + this.name = 'NodeNativeAdapterError' + this.code = diagnostic.code + this.hint = diagnostic.hint + this.diagnostics = diagnostics + } + }, + NodeNativeAdapter: class { + readonly kind = 'native' as const + probe = mocks.nativeProbe + start = mocks.nativeStart + } })) -// 导入被测模块和 mock 模块 import { register } from './index' -import { proxyFetch } from './fetch' -import { requestProxyFactory } from './request' -import { undiciFetchProxy } from './undici' -import { generateHash } from '../utils' +import { disposeActiveRegistration, RuntimeRegistrationError } from '../runtime/controller' +import { LEGACY_CAPABILITIES } from '../adapters/legacy' + +const NATIVE_CAPABILITIES: CapabilityMap = Object.freeze({ + http: true, + https: true, + fetch: true, + http2: true, + responseBody: true, + requestBody: true, + websocketLifecycle: true, + websocketFrames: true, + sseMessages: false, + initiator: true +}) + +const EMPTY_CAPABILITIES: CapabilityMap = Object.freeze({ + http: false, + https: false, + fetch: false, + http2: false, + responseBody: false, + requestBody: false, + websocketLifecycle: false, + websocketFrames: false, + sseMessages: false, + initiator: false +}) + +const NATIVE_TARGET: DevtoolsTarget = Object.freeze({ + id: 'native-target', + title: 'Node.js', + type: 'node', + url: 'file:///fixture.js', + webSocketDebuggerUrl: 'ws://127.0.0.1:9229/native-target', + devtoolsFrontendUrl: 'devtools://native-target', + discoveryUrl: 'http://127.0.0.1:9229/json/list' +}) + +const nativeUnavailableDiagnostic: Diagnostic = Object.freeze({ + code: 'NND_NATIVE_FLAG_REQUIRED', + level: 'error', + message: 'Native network inspection requires --experimental-network-inspection.', + hint: 'Restart with: node --inspect=0 --experimental-network-inspection ' +}) + +const nativeUnavailableProbe = (): AdapterProbe => ({ + kind: 'native', + available: false, + autoSelectable: false, + capabilities: EMPTY_CAPABILITIES, + diagnostics: [nativeUnavailableDiagnostic] +}) -describe('core/index.ts', () => { +const nativeAvailableProbe = (): AdapterProbe => ({ + kind: 'native', + available: true, + autoSelectable: true, + capabilities: NATIVE_CAPABILITIES, + diagnostics: [] +}) + +const nativeSession = (dispose = vi.fn<() => Promise>()): AdapterSession => ({ + kind: 'native', + capabilities: NATIVE_CAPABILITIES, + target: NATIVE_TARGET, + diagnostics: [], + dispose +}) + +describe('core register compatibility API', () => { let originalHttpRequest: typeof http.request let originalHttpsRequest: typeof https.request + let originalHttpGet: typeof http.get + let originalHttpsGet: typeof https.get - beforeEach(() => { + beforeEach(async () => { + await disposeActiveRegistration() vi.clearAllMocks() - mainProcessConstructorCalls.length = 0 - // 保存原始的 request 方法 + mocks.mainProcessConstructorCalls.length = 0 originalHttpRequest = http.request originalHttpsRequest = https.request + originalHttpGet = http.get + originalHttpsGet = https.get + + mocks.mainProcessDispose.mockResolvedValue(undefined) + mocks.proxyFetch.mockReturnValue(mocks.unsetFetch) + mocks.requestProxyFactory.mockImplementation(() => vi.fn()) + mocks.getProxyFactory.mockImplementation(() => vi.fn()) + mocks.undiciFetchProxy.mockReturnValue(mocks.unsetUndiciFetch) + mocks.generateHash.mockReturnValue('mock-hash-key') + mocks.nativeProbe.mockImplementation(nativeUnavailableProbe) + mocks.nativeStart.mockImplementation(async () => nativeSession()) + mocks.openDevtoolsTarget.mockResolvedValue(undefined) + mocks.sessionRecorderClose.mockResolvedValue(undefined) + mocks.sessionRecorderStart.mockResolvedValue({ + directory: '/recordings/session-1', + getManifest: () => ({ sessionId: 'session-1' }), + close: mocks.sessionRecorderClose + }) + mocks.exportHar.mockResolvedValue({}) }) - afterEach(() => { - // 恢复原始的 request 方法 + afterEach(async () => { + await disposeActiveRegistration() http.request = originalHttpRequest https.request = originalHttpsRequest + http.get = originalHttpGet + https.get = originalHttpsGet }) - describe('register 函数', () => { - describe('默认配置', () => { - test('不传参数时使用默认配置', () => { - const unregister = register() - - expect(mainProcessConstructorCalls).toHaveLength(1) - expect(mainProcessConstructorCalls[0]).toEqual({ - port: 5270, - serverPort: 5271, - autoOpenDevtool: true, - key: 'mock-hash-key' - }) - - // 清理 - if (unregister) unregister() - }) - - test('默认拦截 fetch', () => { - const unregister = register() - - expect(proxyFetch).toHaveBeenCalled() - - if (unregister) unregister() - }) - - test('默认拦截 http/https', () => { - const unregister = register() - - expect(requestProxyFactory).toHaveBeenCalledTimes(2) - - if (unregister) unregister() - }) - - test('默认不拦截 undici', () => { - const unregister = register() - - expect(undiciFetchProxy).not.toHaveBeenCalled() - - if (unregister) unregister() - }) + test('register returns a callable handle with an observable ready lifecycle', async () => { + const handle = register({ mode: 'legacy' }) + + expect(typeof handle).toBe('function') + expect(handle.ready).toBeInstanceOf(Promise) + expect(handle.status()).toEqual({ state: 'starting' }) + expect(typeof handle.dispose).toBe('function') + expect(typeof handle.openDevtools).toBe('function') + expect(typeof handle.on).toBe('function') + + const ready = await handle.ready + + expect(handle.status()).toEqual({ state: 'ready', mode: 'legacy' }) + expect(ready).toEqual({ + mode: 'legacy', + target: { + id: 'node-network-devtools-legacy-test', + title: 'Node Network Devtools (Legacy)', + type: 'node', + url: '', + webSocketDebuggerUrl: + 'ws://127.0.0.1:49152/devtools/page/node-network-devtools-legacy-test', + devtoolsFrontendUrl: + 'devtools://devtools/bundled/js_app.html?ws=127.0.0.1:49152/devtools/page/node-network-devtools-legacy-test', + discoveryUrl: 'http://127.0.0.1:49152/json/list' + }, + capabilities: LEGACY_CAPABILITIES, + diagnostics: [], + fallbackReason: undefined }) + }) - describe('自定义配置', () => { - test('自定义端口配置', () => { - const unregister = register({ - port: 8080, - serverPort: 8081 - }) - - expect(mainProcessConstructorCalls).toHaveLength(1) - expect(mainProcessConstructorCalls[0]).toMatchObject({ - port: 8080, - serverPort: 8081 - }) - - if (unregister) unregister() - }) + test('ready exposes the native mode, target, and capabilities', async () => { + const disposeNative = vi.fn<() => Promise>().mockResolvedValue(undefined) + const session = nativeSession(disposeNative) + mocks.nativeProbe.mockImplementation(nativeAvailableProbe) + mocks.nativeStart.mockResolvedValue(session) - test('禁用自动打开 DevTools', () => { - const unregister = register({ - autoOpenDevtool: false - }) + const handle = register({ + mode: 'native', + requiredCapabilities: ['http', 'fetch', 'http2'] + }) - expect(mainProcessConstructorCalls).toHaveLength(1) - expect(mainProcessConstructorCalls[0]).toMatchObject({ - autoOpenDevtool: false - }) + await expect(handle.ready).resolves.toEqual({ + mode: 'native', + target: NATIVE_TARGET, + capabilities: NATIVE_CAPABILITIES, + diagnostics: [], + fallbackReason: undefined + }) + expect(mocks.nativeStart).toHaveBeenCalledWith({ + requiredCapabilities: ['http', 'fetch', 'http2'], + inspector: { host: '127.0.0.1', port: 0 } + }) + expect(mocks.mainProcessConstructorCalls).toHaveLength(0) - if (unregister) unregister() - }) + await handle.dispose() + expect(disposeNative).toHaveBeenCalledOnce() + }) - test('禁用 fetch 拦截', () => { - const unregister = register({ - intercept: { - fetch: false - } - }) + test('auto exposes a structured fallback when native is unavailable', async () => { + const handle = register({ + mode: 'auto', + requiredCapabilities: ['fetch', 'responseBody'] + }) - expect(proxyFetch).not.toHaveBeenCalled() + const ready = await handle.ready + + expect(ready.mode).toBe('legacy') + expect(ready.capabilities).toEqual(LEGACY_CAPABILITIES) + expect(ready.fallbackReason).toEqual({ + code: 'NND_AUTO_FALLBACK', + level: 'warn', + message: 'Native adapter cannot satisfy this selection; using legacy adapter.', + hint: 'Use mode "native" to fail instead of falling back.', + details: { + from: 'native', + to: 'legacy', + reason: 'unavailable', + requiredCapabilities: ['fetch', 'responseBody'], + diagnosticCodes: ['NND_NATIVE_FLAG_REQUIRED'], + diagnostics: [nativeUnavailableDiagnostic] + } + }) + expect(ready.diagnostics).toEqual([ready.fallbackReason]) + expect(mocks.nativeStart).not.toHaveBeenCalled() + }) - if (unregister) unregister() - }) + test('forced native publishes the actionable Native error and releases active state', async () => { + const failed = register({ mode: 'native' }) - test('禁用 http/https 拦截', () => { - const unregister = register({ - intercept: { - normal: false - } - }) + await expect(failed.ready).rejects.toMatchObject({ + name: 'NodeNativeAdapterError', + code: 'NND_NATIVE_FLAG_REQUIRED', + message: 'Native network inspection requires --experimental-network-inspection.', + hint: 'Restart with: node --inspect=0 --experimental-network-inspection ' + }) + expect(failed.status()).toMatchObject({ state: 'failed' }) - expect(requestProxyFactory).not.toHaveBeenCalled() + await failed.dispose() + expect(failed.status()).toEqual({ state: 'disposed', mode: undefined }) - if (unregister) unregister() - }) + const replacement = register({ mode: 'legacy' }) + await expect(replacement.ready).resolves.toMatchObject({ mode: 'legacy' }) + }) - test('启用 undici fetch 拦截', () => { - const unregister = register({ - intercept: { - undici: { - fetch: true + test('rejects Native plus Mock synchronously with a stable capability conflict', () => { + expect(() => + register({ + mode: 'native', + legacy: { + mock: [ + { + match: { url: 'https://example.test/*' }, + response: { status: 200, body: 'mocked' } } - } - }) - - expect(undiciFetchProxy).toHaveBeenCalled() - - if (unregister) unregister() + ] + } }) - - test('undici 配置为 false 时不拦截', () => { - const unregister = register({ - intercept: { - undici: false - } - }) - - expect(undiciFetchProxy).not.toHaveBeenCalled() - - if (unregister) unregister() + ).toThrowError( + expect.objectContaining({ + name: 'RuntimeRegistrationError', + code: 'NND_NATIVE_MOCK_CONFLICT', + message: 'Request/response mocking is available only with the Legacy backend.' }) + ) + expect(mocks.nativeStart).not.toHaveBeenCalled() + expect(mocks.mainProcessConstructorCalls).toHaveLength(0) + }) - test('undici.fetch 为 false 时不拦截', () => { - const unregister = register({ - intercept: { - undici: { - fetch: false - } - } - }) - - expect(undiciFetchProxy).not.toHaveBeenCalled() - - if (unregister) unregister() - }) + test('Auto selects Legacy and exposes a structured reason when Mock is configured', async () => { + mocks.nativeProbe.mockImplementation(nativeAvailableProbe) + const mock = [ + { + id: 'fixture', + match: { url: 'https://example.test/*' }, + response: { status: 200, body: 'mocked' } + } + ] as const + + const handle = register({ mode: 'auto', legacy: { mock } }) + const ready = await handle.ready + + expect(ready.mode).toBe('legacy') + expect(ready.fallbackReason).toEqual({ + code: 'NND_AUTO_LEGACY_MOCK_REQUIRED', + level: 'info', + message: 'Auto selected Legacy because request/response mocking was configured.', + hint: 'Remove legacy.mock to allow Auto to select the Native backend.' }) + expect(ready.diagnostics).toContainEqual(ready.fallbackReason) + expect(mocks.nativeStart).not.toHaveBeenCalled() + expect(mocks.proxyFetch).toHaveBeenCalledWith(expect.anything(), mock) + }) - describe('generateHash 调用', () => { - test('使用配置生成 hash key', () => { - const unregister = register({ - port: 3000, - serverPort: 3001, - autoOpenDevtool: false - }) - - expect(generateHash).toHaveBeenCalledWith( - JSON.stringify({ - port: 3000, - serverPort: 3001, - autoOpenDevtool: false - }) - ) - - if (unregister) unregister() - }) + test('records a Session for either backend and exports HAR before backend disposal', async () => { + const handle = register({ + mode: 'legacy', + session: { + directory: '/recordings/session-1', + bodyCommandTimeoutMs: 2500, + har: '/recordings/session-1.har' + } }) - describe('http/https 请求代理', () => { - test('http.request 被替换为代理函数', () => { - const originalRequest = http.request - const unregister = register() - - expect(http.request).not.toBe(originalRequest) - expect(requestProxyFactory).toHaveBeenCalledWith(originalRequest, false, expect.anything()) - - if (unregister) unregister() - }) - - test('https.request 被替换为代理函数', () => { - const originalRequest = https.request - const unregister = register() - - expect(https.request).not.toBe(originalRequest) - expect(requestProxyFactory).toHaveBeenCalledWith(originalRequest, true, expect.anything()) - - if (unregister) unregister() - }) + const ready = await handle.ready + expect(mocks.sessionRecorderStart).toHaveBeenCalledWith({ + directory: '/recordings/session-1', + target: ready.target, + bodyCommandTimeoutMs: 2500 }) + expect(ready.session).toEqual({ + directory: '/recordings/session-1', + sessionId: 'session-1' + }) + expect(ready.diagnostics).toContainEqual( + expect.objectContaining({ code: 'NND_SESSION_RECORDING_STARTED' }) + ) + + await handle.dispose() + expect(mocks.sessionRecorderClose).toHaveBeenCalledOnce() + expect(mocks.exportHar).toHaveBeenCalledWith( + '/recordings/session-1', + '/recordings/session-1.har' + ) + expect(mocks.sessionRecorderClose.mock.invocationCallOrder[0]).toBeLessThan( + mocks.exportHar.mock.invocationCallOrder[0] + ) + expect(mocks.exportHar.mock.invocationCallOrder[0]).toBeLessThan( + mocks.mainProcessDispose.mock.invocationCallOrder[0] + ) + }) - describe('unregister 函数', () => { - test('返回 unregister 函数', () => { - const unregister = register() - - expect(typeof unregister).toBe('function') - - if (unregister) unregister() - }) - - test('调用 unregister 后恢复 http.request', () => { - const originalRequest = http.request - const unregister = register() + test('releases the backend when Session startup fails', async () => { + mocks.sessionRecorderStart.mockRejectedValueOnce(new Error('recording directory exists')) + const handle = register({ + mode: 'legacy', + session: { directory: '/recordings/existing' } + }) - expect(http.request).not.toBe(originalRequest) + await expect(handle.ready).rejects.toThrow('recording directory exists') + expect(mocks.mainProcessDispose).toHaveBeenCalledOnce() + }) - if (unregister) unregister() + test('explicit legacy activates old capture options and restores every patch', async () => { + const handle = register({ + mode: 'legacy', + port: 8080, + serverPort: 8081, + autoOpenDevtool: true, + intercept: { + fetch: true, + normal: true, + undici: { fetch: true } + } + }) - expect(http.request).toBe(originalRequest) - }) + const ready = await handle.ready + + expect(new URL(ready.target.webSocketDebuggerUrl).port).toBe('8081') + expect(ready.target.discoveryUrl).toBe('http://127.0.0.1:8081/json/list') + + expect(mocks.generateHash).toHaveBeenCalledWith( + JSON.stringify({ port: 8080, serverPort: 8081, autoOpenDevtool: false }) + ) + expect(mocks.mainProcessConstructorCalls).toEqual([ + { + port: 8080, + serverPort: 8081, + autoOpenDevtool: false, + key: 'mock-hash-key' + } + ]) + expect(mocks.proxyFetch).toHaveBeenCalledOnce() + expect(mocks.requestProxyFactory).toHaveBeenCalledTimes(2) + expect(mocks.requestProxyFactory).toHaveBeenNthCalledWith( + 1, + originalHttpRequest, + false, + expect.anything() + ) + expect(mocks.requestProxyFactory).toHaveBeenNthCalledWith( + 2, + originalHttpsRequest, + true, + expect.anything() + ) + expect(mocks.undiciFetchProxy).toHaveBeenCalledOnce() + expect(http.request).not.toBe(originalHttpRequest) + expect(https.request).not.toBe(originalHttpsRequest) + expect(mocks.openDevtoolsTarget).toHaveBeenCalledOnce() + expect(mocks.openDevtoolsTarget).toHaveBeenCalledWith(ready.target) + expect(ready.diagnostics).toContainEqual({ + code: 'NND_LEGACY_OPTIONS_DEPRECATED', + level: 'warn', + message: 'Top-level Legacy options are deprecated.', + hint: 'Move capture and port settings under "legacy", and browser behavior under "devtools".' + }) - test('调用 unregister 后恢复 https.request', () => { - const originalRequest = https.request - const unregister = register() + await handle.dispose() - expect(https.request).not.toBe(originalRequest) + expect(mocks.unsetFetch).toHaveBeenCalledOnce() + expect(mocks.unsetUndiciFetch).toHaveBeenCalledOnce() + expect(mocks.mainProcessDispose).toHaveBeenCalledOnce() + expect(http.request).toBe(originalHttpRequest) + expect(https.request).toBe(originalHttpsRequest) + }) - if (unregister) unregister() + test('legacy namespaced options also activate configured interceptors', async () => { + const handle = register({ + mode: 'legacy', + legacy: { + port: 7070, + serverPort: 7071, + intercept: { + fetch: false, + normal: false, + undici: { fetch: true } + } + } + }) - expect(https.request).toBe(originalRequest) - }) + await handle.ready - test('调用 unregister 后调用 MainProcess.dispose', () => { - mockDispose.mockClear() + expect(mocks.mainProcessConstructorCalls[0]).toMatchObject({ + port: 7070, + serverPort: 7071, + autoOpenDevtool: false + }) + expect(mocks.proxyFetch).not.toHaveBeenCalled() + expect(mocks.requestProxyFactory).not.toHaveBeenCalled() + expect(mocks.undiciFetchProxy).toHaveBeenCalledOnce() + expect(http.request).toBe(originalHttpRequest) + expect(https.request).toBe(originalHttpsRequest) + }) - const unregister = register() + test('the same normalized configuration returns one idempotent handle', async () => { + const first = register({ + mode: 'legacy', + requiredCapabilities: ['responseBody', 'fetch'], + legacy: { port: 6000, serverPort: 6001 } + }) + const second = register({ + mode: 'legacy', + requiredCapabilities: ['fetch', 'responseBody'], + legacy: { port: 6000, serverPort: 6001 } + }) - if (unregister) unregister() + expect(second).toBe(first) + await first.ready + expect(mocks.mainProcessConstructorCalls).toHaveLength(1) + expect(mocks.proxyFetch).toHaveBeenCalledOnce() + }) - expect(mockDispose).toHaveBeenCalled() - }) + test('a conflicting active configuration fails synchronously with a stable error', async () => { + const active = register({ mode: 'legacy', legacy: { port: 6000 } }) - test('禁用 fetch 拦截时 unregister 不调用 fetch 清理函数', () => { - const unregister = register({ - intercept: { - fetch: false - } - }) - - // 不应该抛出错误 - expect(() => { - if (unregister) unregister() - }).not.toThrow() + expect(() => register({ mode: 'legacy', legacy: { port: 6001 } })).toThrowError( + expect.objectContaining({ + name: 'RuntimeRegistrationError', + code: 'NND_ALREADY_REGISTERED', + message: 'Node Network Devtools is already registered with a different configuration.' }) + ) + expect(() => register({ mode: 'native' })).toThrow(RuntimeRegistrationError) - test('禁用 normal 拦截时 unregister 不恢复 http/https', () => { - const originalHttpRequest = http.request - const originalHttpsRequest = https.request - - const unregister = register({ - intercept: { - normal: false - } - }) - - // http/https.request 应该保持不变 - expect(http.request).toBe(originalHttpRequest) - expect(https.request).toBe(originalHttpsRequest) - - if (unregister) unregister() - }) + await active.ready + expect(mocks.mainProcessConstructorCalls).toHaveLength(1) + }) - test('启用 undici 拦截时 unregister 调用 undici 清理函数', () => { - const mockUnsetUndici = vi.fn() - vi.mocked(undiciFetchProxy).mockReturnValue(mockUnsetUndici) + test('callable cleanup and async dispose share one idempotent cleanup', async () => { + const handle = register({ mode: 'legacy' }) + await handle.ready - const unregister = register({ - intercept: { - undici: { - fetch: true - } - } - }) + expect(handle()).toBeUndefined() + await Promise.all([handle.dispose(), handle.dispose()]) - if (unregister) unregister() + expect(mocks.unsetFetch).toHaveBeenCalledOnce() + expect(mocks.mainProcessDispose).toHaveBeenCalledOnce() + expect(handle.status()).toEqual({ state: 'disposed', mode: 'legacy' }) - expect(mockUnsetUndici).toHaveBeenCalled() - }) - }) + await handle.dispose() + expect(mocks.mainProcessDispose).toHaveBeenCalledOnce() + }) - describe('多次注册', () => { - test('多次注册创建多个 MainProcess 实例', () => { - const unregister1 = register() - const unregister2 = register() + test('browser opening defaults to false and remains explicitly callable', async () => { + const handle = register({ mode: 'legacy' }) + const ready = await handle.ready - expect(mainProcessConstructorCalls).toHaveLength(2) + expect(mocks.mainProcessConstructorCalls[0]).toMatchObject({ autoOpenDevtool: false }) + expect(mocks.openDevtoolsTarget).not.toHaveBeenCalled() - if (unregister1) unregister1() - if (unregister2) unregister2() - }) - }) + await handle.openDevtools() + expect(mocks.openDevtoolsTarget).toHaveBeenCalledOnce() + expect(mocks.openDevtoolsTarget).toHaveBeenCalledWith(ready.target) }) }) diff --git a/packages/network-debugger/src/core/index.ts b/packages/network-debugger/src/core/index.ts index a59ce48..1f51ef3 100644 --- a/packages/network-debugger/src/core/index.ts +++ b/packages/network-debugger/src/core/index.ts @@ -1,69 +1,21 @@ -import http from 'http' -import https from 'https' -import { requestProxyFactory } from './request' -import { MainProcess } from './fork' -import { proxyFetch } from './fetch' -import { PORT, SERVER_PORT } from '../common' - -import { RegisterOptions } from '../common' -import { generateHash } from '../utils' -import { undiciFetchProxy } from './undici' - -export function register(props?: RegisterOptions) { - const { - port = PORT, - serverPort = SERVER_PORT, - autoOpenDevtool = true, - intercept = {} - } = props || {} - - const { - fetch: isInterceptFetch = true, - normal: isInterceptNormal = true, - undici: isInterceptUndici = false - } = intercept - - const interceptUndiciFetch = isInterceptUndici && isInterceptUndici.fetch - - const key = generateHash(JSON.stringify({ port, serverPort, autoOpenDevtool })) - const mainProcess = new MainProcess({ - port, - serverPort, - autoOpenDevtool, - key - }) - - // global fetch - const unsetFetchProxy = isInterceptFetch ? proxyFetch(mainProcess) : void 0 - - // http/https - const originAgentRequests = new WeakMap() - const agents = [http, https] - if (isInterceptNormal) { - agents.forEach((agent) => { - originAgentRequests.set(agent, agent.request) - const actualRequestHandlerFn = agent.request - agent.request = requestProxyFactory(actualRequestHandlerFn, agent === https, mainProcess) - }) - } - - // undici - // undici fetch - const unsetUndiciFetch = interceptUndiciFetch ? undiciFetchProxy(mainProcess) : void 0 - - return () => { - unsetFetchProxy && unsetFetchProxy() - if (isInterceptNormal) { - agents.forEach((agent) => { - agent.request = originAgentRequests.get(agent) - originAgentRequests.delete(agent) - }) - } - - unsetUndiciFetch && unsetUndiciFetch() - - mainProcess.dispose() - } -} - +export { register } from '../runtime/controller' +export type { + ReadyInfo, + RegistrationEvent, + RegistrationHandle, + RegistrationState, + RegistrationStatus +} from '../runtime/registration' +export type { + AdapterKind, + AdapterMode, + CapabilityMap, + DevtoolsTarget, + Diagnostic, + NetworkCapability +} from '../adapters/types' +export type { InterceptOptions, RegisterOptions } from '../common' +export * from '../mock' +export * from '../replay' +export * from '../session' export * from './hooks' diff --git a/packages/network-debugger/src/core/request.test.ts b/packages/network-debugger/src/core/request.test.ts index 2644339..4895e89 100644 --- a/packages/network-debugger/src/core/request.test.ts +++ b/packages/network-debugger/src/core/request.test.ts @@ -1,1009 +1,526 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import { EventEmitter } from 'events' -import type { ClientRequest, IncomingMessage, RequestOptions } from 'http' -import type { Socket } from 'net' -import { RequestDetail } from '../common' -import { requestProxyFactory } from './request' +import { EventEmitter } from 'node:events' +import type { ClientRequest, IncomingMessage, RequestOptions } from 'node:http' +import type { Socket } from 'node:net' +import { deserialize, serialize } from 'node:v8' +import { beforeEach, describe, expect, test, vi } from 'vitest' import type { MainProcess } from './fork' +import { getProxyFactory, requestProxyFactory, type RequestFn } from './request' +import { withoutLegacyCapture } from './capture-scope' +import PerMessageDeflate from './ws/permessage-deflate' + +interface JournalEntry { + transport: 'request' | 'event' | 'response' + type: string + data: any +} -// Mock MainProcess 接口 -interface MockMainProcess { - sendRequest: ReturnType - send: ReturnType - responseRequest: ReturnType +interface MockClientRequest extends ClientRequest { + protocol: string + host: string + destroyed: boolean } -// 创建 mock MainProcess -function createMockMainProcess(): { - mockMainProcess: MockMainProcess - mockSendRequest: ReturnType - mockSend: ReturnType - mockResponseRequest: ReturnType -} { - const mockSendRequest = vi.fn().mockReturnThis() - const mockSend = vi.fn().mockResolvedValue(undefined) - const mockResponseRequest = vi.fn() +function snapshot(value: T): T { + return deserialize(serialize(value)) as T +} - return { - mockMainProcess: { - sendRequest: mockSendRequest, - send: mockSend, - responseRequest: mockResponseRequest - }, - mockSendRequest, - mockSend, - mockResponseRequest - } +function createMainProcess() { + const journal: JournalEntry[] = [] + const mainProcess: Record = {} + mainProcess.sendRequest = vi.fn((type: string, data: unknown) => { + journal.push({ transport: 'request', type, data: snapshot(data) }) + return mainProcess + }) + mainProcess.send = vi.fn(async (event: { type: string; data: unknown }) => { + journal.push({ transport: 'event', type: event.type, data: snapshot(event.data) }) + }) + mainProcess.responseRequest = vi.fn((request: unknown, response: IncomingMessage) => { + journal.push({ + transport: 'response', + type: 'responseRequest', + data: { request: snapshot(request), response } + }) + }) + return { journal, mainProcess: mainProcess as MainProcess } } -// 创建 Mock ClientRequest - 返回具有必要属性的对象 -function createMockClientRequest() { - const emitter = new EventEmitter() - const writeFn = vi.fn().mockReturnValue(true) - const setHeaderFn = vi.fn() - - // 将 EventEmitter 方法和 mock 方法合并 - const mockRequest = { - ...emitter, - on: emitter.on.bind(emitter), - emit: emitter.emit.bind(emitter), - write: writeFn, - end: vi.fn(), - setHeader: setHeaderFn, - getHeader: vi.fn(), - removeHeader: vi.fn(), - abort: vi.fn(), - destroyed: false +function createClientRequest( + overrides: Partial<{ + protocol: string + host: string + path: string + method: string + headers: Record + }> = {} +): MockClientRequest { + const request = new EventEmitter() as MockClientRequest + const headers: Record = { + host: overrides.host ?? 'example.test', + ...(overrides.headers ?? {}) } + request.protocol = overrides.protocol ?? 'http:' + request.host = overrides.host ?? 'example.test' + request.path = overrides.path ?? '/' + request.method = overrides.method ?? 'GET' + request.destroyed = false + request.getHeader = vi.fn((name: string) => { + const key = Object.keys(headers).find( + (candidate) => candidate.toLowerCase() === name.toLowerCase() + ) + return key ? headers[key] : undefined + }) + request.getHeaders = vi.fn(() => ({ ...headers })) + request.setHeader = vi.fn((name: string, value: string | string[] | number) => { + const existing = Object.keys(headers).find( + (candidate) => candidate.toLowerCase() === name.toLowerCase() + ) + if (existing) delete headers[existing] + headers[name] = value + return request + }) as ClientRequest['setHeader'] + request.removeHeader = vi.fn((name: string) => { + const existing = Object.keys(headers).find( + (candidate) => candidate.toLowerCase() === name.toLowerCase() + ) + if (existing) delete headers[existing] + }) + request.write = vi.fn(() => true) as ClientRequest['write'] + request.end = vi.fn(() => request) as ClientRequest['end'] + request.abort = vi.fn() + return request +} - return mockRequest +function createResponse(overrides: Partial = {}): IncomingMessage { + const response = new EventEmitter() as IncomingMessage + response.statusCode = overrides.statusCode ?? 200 + response.statusMessage = overrides.statusMessage ?? 'OK' + response.headers = overrides.headers ?? { 'content-type': 'application/json' } + response.rawHeaders = overrides.rawHeaders ?? ['Content-Type', 'application/json'] + response.httpVersion = overrides.httpVersion ?? '1.1' + return response } -// 创建 Mock IncomingMessage -function createMockIncomingMessage( - options: { - statusCode?: number - headers?: Record - } = {} -) { - const { statusCode = 200, headers = {} } = options - const emitter = new EventEmitter() - - const mockResponse = { - ...emitter, - on: emitter.on.bind(emitter), - emit: emitter.emit.bind(emitter), - statusCode, - headers, - httpVersion: '1.1', - complete: true, - rawHeaders: [] as string[], - trailers: {}, - rawTrailers: [] as string[] - } +function createSocket(): Socket { + const socket = new EventEmitter() as Socket + socket.write = vi.fn(() => true) as Socket['write'] + socket.end = vi.fn(() => socket) as Socket['end'] + socket.destroy = vi.fn(() => socket) as Socket['destroy'] + return socket +} - return mockResponse +function createActualRequest(request: ClientRequest) { + let responseCallback: ((response: IncomingMessage) => void) | undefined + const actualRequest = vi.fn((...args: unknown[]) => { + const candidate = args.at(-1) + if (typeof candidate === 'function') { + responseCallback = candidate as (response: IncomingMessage) => void + } + return request + }) as unknown as RequestFn + return { + actualRequest, + respond(response: IncomingMessage) { + expect(responseCallback).toBeTypeOf('function') + responseCallback!(response) + } + } } -// 创建 Mock Socket -function createMockSocket() { - const emitter = new EventEmitter() - const writeFn = vi.fn().mockReturnValue(true) - const readFn = vi.fn().mockReturnValue(null) - - const mockSocket = { - ...emitter, - on: emitter.on.bind(emitter), - emit: emitter.emit.bind(emitter), - addListener: emitter.addListener.bind(emitter), - write: writeFn, - end: vi.fn(), - destroy: vi.fn(), - read: readFn, - destroyed: false, - readable: true, - writable: true +function websocketFrame( + payload: Buffer, + opcode: 1 | 2, + masked: boolean, + compressed = false +): Buffer { + if (payload.length >= 126) throw new Error('test helper only supports short frames') + const first = 0x80 | (compressed ? 0x40 : 0) | opcode + if (!masked) return Buffer.concat([Buffer.from([first, payload.length]), payload]) + + const mask = Buffer.from([0x11, 0x22, 0x33, 0x44]) + const encoded = Buffer.alloc(payload.length) + for (let index = 0; index < payload.length; index += 1) { + encoded[index] = payload[index] ^ mask[index % mask.length] } + return Buffer.concat([Buffer.from([first, 0x80 | payload.length]), mask, encoded]) +} - return mockSocket +function compress(extension: PerMessageDeflate, payload: Buffer): Promise { + return new Promise((resolve, reject) => { + extension.compress(payload, true, (error, result) => { + if (error) reject(error) + else if (!result) reject(new Error('permessage-deflate returned no payload')) + else resolve(result) + }) + }) } -describe('core/request.ts', () => { - beforeEach(() => { - vi.clearAllMocks() +describe('http request capture', () => { + beforeEach(() => vi.clearAllMocks()) + + test('bypasses internal debugger transports without emitting capture events', () => { + const request = createClientRequest({ path: '/devtools/page/internal' }) + const { actualRequest } = createActualRequest(request) + const { journal, mainProcess } = createMainProcess() + const callback = vi.fn() + const proxy = requestProxyFactory.call(undefined, actualRequest, false, mainProcess) + + const returned = withoutLegacyCapture(() => + proxy('http://127.0.0.1:43100/devtools/page/internal', callback) + ) + + expect(returned).toBe(request) + expect(actualRequest).toHaveBeenCalledWith( + 'http://127.0.0.1:43100/devtools/page/internal', + callback + ) + expect(journal).toEqual([]) }) - afterEach(() => { - vi.restoreAllMocks() + test('uses the actual ClientRequest origin, path, method, headers, and seconds timestamp', () => { + const request = createClientRequest({ + protocol: 'http:', + host: '127.0.0.1:43891', + path: '/actual?query=1', + method: 'POST', + headers: { 'x-runtime': 'yes' } + }) + const { actualRequest } = createActualRequest(request) + const { journal, mainProcess } = createMainProcess() + const before = Date.now() / 1000 + + requestProxyFactory.call( + undefined, + actualRequest, + false, + mainProcess + )('http://placeholder.invalid/stale', { method: 'GET' }) + const after = Date.now() / 1000 + + const detail = journal[0].data + expect(detail).toMatchObject({ + url: 'http://127.0.0.1:43891/actual?query=1', + method: 'POST', + requestHeaders: { host: '127.0.0.1:43891', 'x-runtime': 'yes' } + }) + expect(detail.requestStartTime).toBeGreaterThanOrEqual(before) + expect(detail.requestStartTime).toBeLessThanOrEqual(after) + expect(detail.requestStartTime).toBeLessThan(10_000_000_000) + expect(actualRequest).toHaveBeenCalledWith( + 'http://placeholder.invalid/stale', + { method: 'GET' }, + expect.any(Function) + ) }) - describe('requestProxyFactory 函数', () => { - describe('参数解析', () => { - test('处理字符串 URL 参数 (url, options, callback)', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const callback = vi.fn() - proxyFn('http://example.com/api', { method: 'GET' }, callback) - - // 验证 initRequest 被调用 - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'http://example.com/api', - method: 'GET' - }) - ) - }) - - test('处理 URL 对象参数', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const url = new URL('http://example.com/api') - proxyFn(url, { method: 'POST' }) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'http://example.com/api', - method: 'POST' - }) - ) - }) - - test('处理 RequestOptions 参数 (options, callback)', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST', - headers: { 'Content-Type': 'application/json' } - } - proxyFn(options) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'http://example.com/api', - method: 'POST' - }) - ) - }) - - test('处理 HTTPS 请求', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - true, // isHttps = true - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'https://example.com/api' - }) - ) - }) - - test('使用 host 替代 hostname', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - host: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: 'http://example.com/api' - }) - ) - }) + test('registers lazily once at end with every written body chunk and late headers', () => { + const request = createClientRequest({ method: 'POST', path: '/upload' }) + const originalWrite = request.write + const originalEnd = request.end + const { actualRequest } = createActualRequest(request) + const { journal, mainProcess } = createMainProcess() + const captured = requestProxyFactory.call( + undefined, + actualRequest, + false, + mainProcess + )({ + hostname: 'example.test', + path: '/upload', + method: 'POST' }) - describe('请求头处理', () => { - test('记录请求头', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer token' - } - } - proxyFn(options) - - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - requestHeaders: { - 'Content-Type': 'application/json', - Authorization: 'Bearer token' - } - }) - ) - }) - - test('setHeader 方法代理 - 单个值', () => { - const mockRequest = createMockClientRequest() - const originalSetHeader = mockRequest.setHeader - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - // 需要传递 headers 以初始化 requestHeaders - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST', - headers: {} - } - const request = proxyFn(options) - - // 调用代理后的 setHeader - request.setHeader('X-Custom-Header', 'custom-value') - - // 验证原始 setHeader 被调用 - expect(originalSetHeader).toHaveBeenCalledWith('X-Custom-Header', 'custom-value') - }) - - test('setHeader 方法代理 - 数组值', () => { - const mockRequest = createMockClientRequest() - const originalSetHeader = mockRequest.setHeader - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - // 需要传递 headers 以初始化 requestHeaders - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST', - headers: {} - } - const request = proxyFn(options) - - // 调用代理后的 setHeader,传入数组 - request.setHeader('Set-Cookie', ['cookie1=value1', 'cookie2=value2']) - - // 验证原始 setHeader 被调用 - expect(originalSetHeader).toHaveBeenCalledWith('Set-Cookie', [ - 'cookie1=value1', - 'cookie2=value2' - ]) - }) + captured.write('first-', 'utf8') + captured.write(Buffer.from('second-')) + captured.setHeader('X-Late', 'visible') + expect(journal.map(({ type }) => type)).toEqual(['initRequest']) + + captured.end('third') + captured.end() + + expect(journal.map(({ type }) => type)).toEqual(['initRequest', 'registerRequest']) + const registered = journal[1].data + expect(Buffer.from(registered.requestData).toString()).toBe('first-second-third') + expect(registered.requestHeaders).toMatchObject({ 'X-Late': 'visible' }) + expect(originalWrite).toHaveBeenCalledTimes(2) + expect(originalEnd).toHaveBeenCalledTimes(2) + }) + + test('registers before delegating an early response and preserves response metadata', () => { + const request = createClientRequest({ path: '/resource' }) + const harness = createActualRequest(request) + const { journal, mainProcess } = createMainProcess() + const callback = vi.fn() + requestProxyFactory.call( + undefined, + harness.actualRequest, + false, + mainProcess + )({ hostname: 'example.test', path: '/resource' }, callback) + const response = createResponse({ + statusCode: 202, + statusMessage: 'Accepted', + headers: { 'content-type': 'text/plain', 'x-response': 'ready' } }) - describe('请求体处理', () => { - test('write 方法代理 - JSON 数据', () => { - const mockRequest = createMockClientRequest() - const originalWrite = mockRequest.write - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST' - } - const request = proxyFn(options) - - const jsonData = JSON.stringify({ key: 'value' }) - request.write(jsonData) - - // 验证原始 write 被调用 - expect(originalWrite).toHaveBeenCalledWith(jsonData) - }) - - test('write 方法代理 - 非 JSON 数据', () => { - const mockRequest = createMockClientRequest() - const originalWrite = mockRequest.write - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST' - } - const request = proxyFn(options) - - const rawData = 'plain text data' - request.write(rawData) - - // 验证原始 write 被调用 - expect(originalWrite).toHaveBeenCalledWith(rawData) - }) - - test('write 方法代理 - Buffer 数据', () => { - const mockRequest = createMockClientRequest() - const originalWrite = mockRequest.write - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'POST' - } - const request = proxyFn(options) - - const bufferData = Buffer.from('buffer data') - request.write(bufferData) - - // 验证原始 write 被调用 - expect(originalWrite).toHaveBeenCalledWith(bufferData) - }) + harness.respond(response) + + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'responseRequest' + ]) + expect(journal.at(-1)!.data.request).toMatchObject({ + responseStatusCode: 202, + responseStatusText: 'Accepted', + responseHeaders: { 'content-type': 'text/plain', 'x-response': 'ready' } }) + expect(journal.at(-1)!.data.response).toBe(response) + expect(callback).toHaveBeenCalledWith(response) + }) - describe('普通 HTTP 请求处理', () => { - test('非 WebSocket 请求发送 registerRequest', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - // 验证 registerRequest 被调用 - expect(mockSendRequest).toHaveBeenCalledWith('registerRequest', expect.any(RequestDetail)) - }) - - test('响应回调正确处理', () => { - const mockRequest = createMockClientRequest() - const mockResponse = createMockIncomingMessage({ - statusCode: 200, - headers: { 'content-type': 'application/json' } - }) - - let capturedCallback: ((res: IncomingMessage) => void) | undefined - const mockActualRequestHandler = vi - .fn() - .mockImplementation( - (_options: RequestOptions, callback: (res: IncomingMessage) => void) => { - capturedCallback = callback - return mockRequest - } - ) - const { mockMainProcess, mockResponseRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const userCallback = vi.fn() - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options, userCallback) - - // 模拟响应 - expect(capturedCallback).toBeDefined() - capturedCallback!(mockResponse as IncomingMessage) - - // 验证用户回调被调用 - expect(userCallback).toHaveBeenCalledWith(mockResponse) - // 验证 responseRequest 被调用 - expect(mockResponseRequest).toHaveBeenCalled() - }) - - test('没有用户回调时也能正常处理响应', () => { - const mockRequest = createMockClientRequest() - const mockResponse = createMockIncomingMessage({ statusCode: 200 }) - - let capturedCallback: ((res: IncomingMessage) => void) | undefined - const mockActualRequestHandler = vi - .fn() - .mockImplementation( - (_options: RequestOptions, callback: (res: IncomingMessage) => void) => { - capturedCallback = callback - return mockRequest - } - ) - const { mockMainProcess, mockResponseRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - // 不传递回调 - proxyFn(options) - - // 模拟响应 - expect(capturedCallback).toBeDefined() - capturedCallback!(mockResponse as IncomingMessage) - - // 验证 responseRequest 被调用 - expect(mockResponseRequest).toHaveBeenCalled() - }) + test('reports a pre-response error only as requestFailed and only once', () => { + const request = createClientRequest({ path: '/failure' }) + const { actualRequest } = createActualRequest(request) + const { journal, mainProcess } = createMainProcess() + requestProxyFactory.call( + undefined, + actualRequest, + false, + mainProcess + )({ + hostname: 'example.test', + path: '/failure' }) - describe('错误处理', () => { - test('请求错误时发送 endRequest', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - // 模拟错误事件 - mockRequest.emit('error', new Error('Connection refused')) - - // 验证 endRequest 被调用,且状态码为 0 - expect(mockSendRequest).toHaveBeenCalledWith( - 'endRequest', - expect.objectContaining({ - responseStatusCode: 0 - }) - ) - }) - - test('请求错误时记录结束时间', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const beforeTime = Date.now() - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - // 模拟错误事件 - mockRequest.emit('error', new Error('Connection refused')) - const afterTime = Date.now() - - // 获取 endRequest 调用的参数 - const endRequestCall = mockSendRequest.mock.calls.find((call) => call[0] === 'endRequest') - expect(endRequestCall).toBeDefined() - const requestDetail = endRequestCall![1] as RequestDetail - expect(requestDetail.requestEndTime).toBeGreaterThanOrEqual(beforeTime) - expect(requestDetail.requestEndTime).toBeLessThanOrEqual(afterTime) - }) + request.emit('error', new Error('socket refused')) + request.emit('abort') + + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'requestFailed' + ]) + const failure = journal.at(-1)!.data + expect(failure).toMatchObject({ errorText: 'socket refused', canceled: false }) + expect(failure.request.requestEndTime).toBeLessThan(10_000_000_000) + }) + + test('treats an early destroyed close as canceled but ignores close after response headers', () => { + const early = createClientRequest({ path: '/early-close' }) + const { actualRequest: earlyActual } = createActualRequest(early) + const earlyMain = createMainProcess() + requestProxyFactory.call( + undefined, + earlyActual, + false, + earlyMain.mainProcess + )({ + hostname: 'example.test', + path: '/early-close' }) + early.destroyed = true + early.emit('close') + expect(earlyMain.journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'registerRequest', + 'requestFailed' + ]) + expect(earlyMain.journal.at(-1)!.data.canceled).toBe(true) + + const completed = createClientRequest({ path: '/has-headers' }) + const completedHarness = createActualRequest(completed) + const completedMain = createMainProcess() + requestProxyFactory.call( + undefined, + completedHarness.actualRequest, + false, + completedMain.mainProcess + )({ hostname: 'example.test', path: '/has-headers' }) + completedHarness.respond(createResponse()) + completed.destroyed = true + completed.emit('close') + expect(completedMain.journal.some(({ type }) => type === 'requestFailed')).toBe(false) + }) + + test('get delegates to request and ends it, triggering lazy registration', () => { + const request = createClientRequest({ path: '/get' }) + const proxiedRequest = vi.fn(() => request) as unknown as RequestFn + + const returned = getProxyFactory(proxiedRequest)('http://example.test/get') + + expect(returned).toBe(request) + expect(proxiedRequest).toHaveBeenCalledWith('http://example.test/get') + expect(request.end).toHaveBeenCalledOnce() + }) +}) - describe('WebSocket 请求处理', () => { - test('WebSocket 请求 URL 转换为 ws:// 协议', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/', - method: 'GET', - headers: { - Upgrade: 'websocket', - Connection: 'Upgrade' - } - } - proxyFn(options) - - // 验证 URL 被转换为 ws:// - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: expect.stringMatching(/^ws:\/\//) - }) - ) - }) - - test('HTTPS WebSocket 请求 URL 转换为 wss:// 协议', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - true, // isHttps = true - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/', - method: 'GET', - headers: { - Upgrade: 'websocket', - Connection: 'Upgrade' - } - } - proxyFn(options) - - // 验证 URL 被转换为 wss:// - expect(mockSendRequest).toHaveBeenCalledWith( - 'initRequest', - expect.objectContaining({ - url: expect.stringMatching(/^wss:\/\//) - }) - ) - }) - - test('WebSocket 请求不发送 registerRequest', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/', - method: 'GET', - headers: { - Upgrade: 'websocket' - } - } - proxyFn(options) - - // 验证 registerRequest 没有被调用 - const registerRequestCalls = mockSendRequest.mock.calls.filter( - (call) => call[0] === 'registerRequest' - ) - expect(registerRequestCalls.length).toBe(0) - }) - - test('WebSocket upgrade 事件处理 - 发送 webSocketCreated', async () => { - const mockRequest = createMockClientRequest() - const mockResponse = createMockIncomingMessage({ statusCode: 101 }) - const mockSocket = createMockSocket() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSend } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/ws', - method: 'GET', - headers: { - Upgrade: 'websocket' - } - } - proxyFn(options) - - // 模拟 upgrade 事件 - mockRequest.emit('upgrade', mockResponse, mockSocket, Buffer.alloc(0)) - - // 等待异步操作 - await new Promise((resolve) => setTimeout(resolve, 10)) - - // 验证 webSocketCreated 消息被发送 - expect(mockSend).toHaveBeenCalledWith( - expect.objectContaining({ - type: 'Network.webSocketCreated' - }) - ) - }) - - test('WebSocket 隐藏请求不发送消息', async () => { - const mockRequest = createMockClientRequest() - const mockResponse = createMockIncomingMessage({ statusCode: 101 }) - const mockSocket = createMockSocket() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSend } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - // 使用 127.0.0.1 的隐藏 URL - const options: RequestOptions = { - hostname: '127.0.0.1', - path: '/', - method: 'GET', - headers: { - Upgrade: 'websocket' - } - } - proxyFn(options) - - // 模拟 upgrade 事件 - mockRequest.emit('upgrade', mockResponse, mockSocket, Buffer.alloc(0)) - - // 等待异步操作 - await new Promise((resolve) => setTimeout(resolve, 10)) - - // 验证 webSocketCreated 消息没有被发送 - const webSocketCreatedCalls = mockSend.mock.calls.filter( - (call) => call[0]?.type === 'Network.webSocketCreated' - ) - expect(webSocketCreatedCalls.length).toBe(0) - }) +describe('WebSocket request capture', () => { + beforeEach(() => vi.clearAllMocks()) + + function createWebSocketHarness() { + const request = createClientRequest({ + protocol: 'http:', + host: '127.0.0.1:43917', + path: '/socket?token=dynamic', + headers: { + Upgrade: 'websocket', + Connection: 'Upgrade', + 'Sec-WebSocket-Key': 'test-key' + } }) + const actual = createActualRequest(request) + const capture = createMainProcess() + const returned = requestProxyFactory.call( + undefined, + actual.actualRequest, + false, + capture.mainProcess + )({ hostname: 'stale.invalid', path: '/wrong', headers: { Upgrade: 'websocket' } }) + return { request, returned, ...actual, ...capture } + } + + test('uses the dynamic ws URL and never registers a normal HTTP request', () => { + const { returned, journal } = createWebSocketHarness() + + returned.end() + + expect(journal.map(({ type }) => type)).toEqual(['initRequest']) + expect(journal[0].data.url).toBe('ws://127.0.0.1:43917/socket?token=dynamic') + }) - describe('WebSocket 帧处理', () => { - test('WebSocket socket close 事件发送 webSocketClosed', async () => { - const mockRequest = createMockClientRequest() - const mockResponse = createMockIncomingMessage({ statusCode: 101 }) - const mockSocket = createMockSocket() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSend } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/ws', - method: 'GET', - headers: { - Upgrade: 'websocket' - } - } - proxyFn(options) - - // 模拟 upgrade 事件 - mockRequest.emit('upgrade', mockResponse, mockSocket, Buffer.alloc(0)) - - // 等待异步操作 - await new Promise((resolve) => setTimeout(resolve, 10)) - - // 模拟 socket close 事件 - mockSocket.emit('close') - - // 等待异步操作 - await new Promise((resolve) => setTimeout(resolve, 10)) - - // 验证 webSocketClosed 消息被发送 - expect(mockSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.webSocketClosed' - }) - ) - }) - - test('WebSocket socket end 事件正确处理', async () => { - const mockRequest = createMockClientRequest() - const mockResponse = createMockIncomingMessage({ statusCode: 101 }) - const mockSocket = createMockSocket() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/ws', - method: 'GET', - headers: { - Upgrade: 'websocket' - } - } - proxyFn(options) - - // 模拟 upgrade 事件 - mockRequest.emit('upgrade', mockResponse, mockSocket, Buffer.alloc(0)) - - // 等待异步操作 - await new Promise((resolve) => setTimeout(resolve, 10)) - - // 模拟 socket end 事件 - 不应该抛出错误 - expect(() => mockSocket.emit('end')).not.toThrow() - }) + test('emits a serializable handshake DTO for loopback application traffic', () => { + const { request, journal } = createWebSocketHarness() + const socket = createSocket() + const response = createResponse({ + statusCode: 101, + statusMessage: 'Switching Protocols', + headers: { upgrade: 'websocket', connection: 'Upgrade' }, + rawHeaders: ['Upgrade', 'websocket', 'Connection', 'Upgrade'] }) - describe('原始请求处理器调用', () => { - test('字符串 URL 参数正确传递给原始处理器', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const callback = vi.fn() - proxyFn('http://example.com/api', { method: 'POST' }, callback) - - // 验证原始处理器被调用,参数正确 - expect(mockActualRequestHandler).toHaveBeenCalledWith( - 'http://example.com/api', - { method: 'POST' }, - expect.any(Function) - ) - }) - - test('RequestOptions 参数正确传递给原始处理器', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - // 验证原始处理器被调用,参数正确 - expect(mockActualRequestHandler).toHaveBeenCalledWith(options, expect.any(Function)) - }) - - test('返回代理后的 ClientRequest', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - const result = proxyFn(options) - - // 验证返回的是代理后的请求对象 - expect(result).toBeDefined() - expect(typeof result.write).toBe('function') - expect(typeof result.setHeader).toBe('function') - }) + request.emit('upgrade', response, socket, Buffer.alloc(0)) + request.destroyed = true + request.emit('close') + + expect(journal.map(({ type }) => type)).toEqual(['initRequest', 'Network.webSocketCreated']) + const created = journal.at(-1)!.data + expect(created).toMatchObject({ + requestId: journal[0].data.id, + url: 'ws://127.0.0.1:43917/socket?token=dynamic', + response: { + httpVersion: '1.1', + statusCode: 101, + statusMessage: 'Switching Protocols', + rawHeaders: ['Upgrade', 'websocket', 'Connection', 'Upgrade'], + headers: { upgrade: 'websocket', connection: 'Upgrade' } + } }) + expect(Object.keys(created).sort()).toEqual(['initiator', 'requestId', 'response', 'url']) + expect(() => JSON.stringify(created)).not.toThrow() + }) - describe('调用栈加载', () => { - test('请求创建时加载调用栈', () => { - const mockRequest = createMockClientRequest() - const mockActualRequestHandler = vi.fn().mockReturnValue(mockRequest) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - // 获取 initRequest 调用的参数 - const initRequestCall = mockSendRequest.mock.calls.find((call) => call[0] === 'initRequest') - expect(initRequestCall).toBeDefined() - const requestDetail = initRequestCall![1] as RequestDetail - - // 验证 RequestDetail 实例被创建 - expect(requestDetail).toBeInstanceOf(RequestDetail) - }) + test('emits text, binary, and one close DTO with the correct frame encoding', async () => { + const { request, journal } = createWebSocketHarness() + const socket = createSocket() + request.emit('upgrade', createResponse({ statusCode: 101 }), socket, Buffer.alloc(0)) + + socket.emit('data', websocketFrame(Buffer.from('server text'), 1, false)) + socket.write(websocketFrame(Buffer.from([0, 255, 16]), 2, true)) + socket.emit('end') + socket.emit('close') + + await vi.waitFor(() => expect(journal).toHaveLength(5)) + + expect(journal.map(({ type }) => type)).toEqual([ + 'initRequest', + 'Network.webSocketCreated', + 'Network.webSocketFrameReceived', + 'Network.webSocketFrameSent', + 'Network.webSocketClosed' + ]) + expect(journal[2].data.response).toEqual({ + payloadData: 'server text', + opcode: 1, + mask: false + }) + expect(journal[3].data.response).toEqual({ + payloadData: Buffer.from([0, 255, 16]).toString('base64'), + opcode: 2, + mask: true }) + expect(journal.filter(({ type }) => type === 'Network.webSocketClosed')).toHaveLength(1) + }) - describe('响应头处理', () => { - test('响应头正确记录到 RequestDetail', () => { - const mockRequest = createMockClientRequest() - const responseHeaders = { - 'content-type': 'application/json', - 'x-custom-header': 'custom-value' - } - const mockResponse = createMockIncomingMessage({ - statusCode: 200, - headers: responseHeaders - }) - - let capturedCallback: ((res: IncomingMessage) => void) | undefined - const mockActualRequestHandler = vi - .fn() - .mockImplementation( - (_options: RequestOptions, callback: (res: IncomingMessage) => void) => { - capturedCallback = callback - return mockRequest - } - ) - const { mockMainProcess, mockSendRequest } = createMockMainProcess() - - const proxyFn = requestProxyFactory.call( - null, - mockActualRequestHandler, - false, - mockMainProcess as never - ) - - const options: RequestOptions = { - hostname: 'example.com', - path: '/api', - method: 'GET' - } - proxyFn(options) - - // 模拟响应 - expect(capturedCallback).toBeDefined() - capturedCallback!(mockResponse as IncomingMessage) - - // 获取 initRequest 调用的参数,验证 responseHeaders 被设置 - const initRequestCall = mockSendRequest.mock.calls.find((call) => call[0] === 'initRequest') - expect(initRequestCall).toBeDefined() - const requestDetail = initRequestCall![1] as RequestDetail - expect(requestDetail.responseHeaders).toEqual(responseHeaders) - }) + test('decodes negotiated permessage-deflate frames in both directions', async () => { + const { request, journal } = createWebSocketHarness() + const socket = createSocket() + const negotiated = { + server_no_context_takeover: [true], + client_no_context_takeover: [true] + } + const response = createResponse({ + statusCode: 101, + headers: { + upgrade: 'websocket', + connection: 'Upgrade', + 'sec-websocket-extensions': + 'permessage-deflate; server_no_context_takeover; client_no_context_takeover' + } + }) + request.emit('upgrade', response, socket, Buffer.alloc(0)) + + const serverExtension = new PerMessageDeflate( + { serverNoContextTakeover: true, clientNoContextTakeover: true }, + true + ) + serverExtension.accept([structuredClone(negotiated)]) + const clientExtension = new PerMessageDeflate( + { serverNoContextTakeover: true, clientNoContextTakeover: true }, + false + ) + clientExtension.accept([structuredClone(negotiated)]) + + const receivedPayload = Buffer.from('compressed server text') + const sentPayload = Buffer.from([0, 255, 16, 32, 64]) + socket.emit( + 'data', + websocketFrame(await compress(serverExtension, receivedPayload), 1, false, true) + ) + const sentFrame = websocketFrame(await compress(clientExtension, sentPayload), 2, true, true) + const applicationFrame = Buffer.from(sentFrame) + socket.write(sentFrame) + expect(sentFrame).toEqual(applicationFrame) + + await vi.waitFor(() => { + expect(journal.filter(({ type }) => type.includes('webSocketFrame'))).toHaveLength(2) + }) + expect(journal.at(-2)?.data.response).toEqual({ + payloadData: receivedPayload.toString(), + opcode: 1, + mask: false }) + expect(journal.at(-1)?.data.response).toEqual({ + payloadData: sentPayload.toString('base64'), + opcode: 2, + mask: true + }) + + socket.emit('close') + serverExtension.cleanup() + clientExtension.cleanup() + }) + + test('contains asynchronous Receiver errors instead of crashing application I/O', async () => { + const { request, journal } = createWebSocketHarness() + const socket = createSocket() + request.emit('upgrade', createResponse({ statusCode: 101 }), socket, Buffer.alloc(0)) + + // RSV1 without a negotiated extension is invalid and fails through the + // Writable callback, not through the synchronous write() call. + socket.emit('data', websocketFrame(Buffer.from('invalid'), 1, false, true)) + await new Promise((resolve) => setImmediate(resolve)) + + expect(journal.map(({ type }) => type)).toEqual(['initRequest', 'Network.webSocketCreated']) + expect(() => socket.emit('close')).not.toThrow() }) }) diff --git a/packages/network-debugger/src/core/request.ts b/packages/network-debugger/src/core/request.ts index a07b611..89c1a2b 100644 --- a/packages/network-debugger/src/core/request.ts +++ b/packages/network-debugger/src/core/request.ts @@ -1,10 +1,13 @@ -import { ClientRequest, IncomingMessage, RequestOptions } from 'http' -import { Socket } from 'node:net' +import type { ClientRequest, IncomingMessage, RequestOptions } from 'node:http' +import type { Socket } from 'node:net' import { RequestDetail } from '../common' -import { getTimestamp } from '../utils' -import { MainProcess } from './fork' +import type { LegacyWebSocketHandshake } from '../legacy-bridge/contracts' +import type { MainProcess } from './fork' import { BINARY_TYPES } from './ws/constants' +import { parsePerMessageDeflate } from './ws/extension' +import PerMessageDeflate from './ws/permessage-deflate' import { Receiver } from './ws/receiver' +import { isLegacyCaptureSuppressed } from './capture-scope' export interface RequestFn { (options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest @@ -15,247 +18,413 @@ export interface RequestFn { ): ClientRequest } -function proxyClientRequestFactory( - actualRequest: ClientRequest, - requestDetail: RequestDetail, - mainProcess: MainProcess -) { - const actualFn = actualRequest.write - actualRequest.write = (data: any) => { - // Convert to string at source to avoid IPC serialization issues - // Accumulate multiple writes (e.g., multipart/form-data) - let chunk: string - if (Buffer.isBuffer(data)) { - chunk = data.toString('utf-8') - } else if (typeof data === 'string') { - chunk = data - } else if (data != null) { - chunk = JSON.stringify(data) - } else { - chunk = '' - } - - if (requestDetail.requestData) { - requestDetail.requestData += chunk - } else { - requestDetail.requestData = chunk - } +function errorText(error: unknown): string { + if (error instanceof Error) return error.message + return String(error || 'Request failed') +} - return actualFn.bind(actualRequest)(data) +function responseHandshake(response: IncomingMessage): LegacyWebSocketHandshake { + return { + httpVersion: response.httpVersion, + statusCode: response.statusCode ?? 101, + statusMessage: response.statusMessage ?? 'Switching Protocols', + rawHeaders: [...response.rawHeaders], + headers: { ...response.headers } } +} - actualRequest.on('error', () => { - requestDetail.responseStatusCode = 0 - requestDetail.requestEndTime = new Date().getTime() - mainProcess.sendRequest('endRequest', requestDetail) - }) +function framePayload(data: unknown, isBinary: boolean): string { + const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data as any) + return isBinary ? buffer.toString('base64') : buffer.toString('utf8') +} - if (requestDetail.isWebSocket()) { - actualRequest.on('upgrade', async (res: IncomingMessage, socket: Socket, head: Buffer) => { - const originalWrite = socket.write +function cloneExtensionConfigurations( + configurations: readonly Record[] +): Record[] { + return configurations.map((parameters) => + Object.fromEntries(Object.entries(parameters).map(([name, values]) => [name, [...values]])) + ) +} - if (requestDetail.isHiden()) { - return - } +function negotiatedWebSocketExtensions(response: IncomingMessage): { + receiver: Record + sender: Record + cleanupReceiver(): void + cleanupSender(): void +} { + let receiverExtension: PerMessageDeflate | undefined + let senderExtension: PerMessageDeflate | undefined - await mainProcess.send({ - type: 'Network.webSocketCreated', - data: { - requestId: requestDetail.id, - url: requestDetail.url, - initiator: requestDetail.initiator, - response: res - } - }) + try { + const configurations = parsePerMessageDeflate(response.headers['sec-websocket-extensions']) + if (configurations) { + // Incoming bytes are server -> client, while intercepted socket writes + // are client -> server. Each direction needs its own zlib context. + receiverExtension = new PerMessageDeflate({}, false) + receiverExtension.accept(cloneExtensionConfigurations(configurations)) + senderExtension = new PerMessageDeflate({}, true) + senderExtension.accept(cloneExtensionConfigurations(configurations)) + } + } catch { + // The owning WebSocket implementation validates the handshake. Capture is + // observational and must never crash the application for a bad extension. + receiverExtension?.cleanup() + senderExtension?.cleanup() + receiverExtension = undefined + senderExtension = undefined + } - const receiver = new Receiver({ - allowSynchronousEvents: true, - binaryType: BINARY_TYPES[0], - isServer: false - }) - const sender = new Receiver({ - allowSynchronousEvents: true, - binaryType: BINARY_TYPES[0], - isServer: true - }) + return { + receiver: receiverExtension ? { [PerMessageDeflate.extensionName]: receiverExtension } : {}, + sender: senderExtension ? { [PerMessageDeflate.extensionName]: senderExtension } : {}, + cleanupReceiver: () => receiverExtension?.cleanup(), + cleanupSender: () => senderExtension?.cleanup() + } +} - const receiverHandler = (data: any) => { - const str = data.toString() - // const socketMessage = jsonParse(str, str) - mainProcess.send({ - type: 'Network.webSocketFrameReceived', - data: { - requestId: requestDetail.id, - response: { - payloadData: str, - opcode: 1, - mask: false - } - } - }) - } +function writeCapture(receiver: Receiver, data: unknown): void { + if (receiver.writableEnded || receiver.destroyed) return + try { + // Receiver unmasks client frames in place. Always copy so observation can + // never mutate the bytes that the application is about to put on the wire. + receiver.write(Buffer.from(data as any)) + } catch { + // A malformed frame or socket shutdown must not affect application I/O. + } +} - const senderHanlder = (data: any) => { - const str = data.toString() - mainProcess.send({ - type: 'Network.webSocketFrameSent', - data: { - requestId: requestDetail.id, - response: { - payloadData: str, - opcode: 1, - mask: true - } - } - }) +function endCapture(receiver: Receiver): void { + if (receiver.writableEnded || receiver.destroyed) return + try { + receiver.end() + } catch { + // Capture teardown remains isolated from the application socket. + } +} + +function installWebSocketCapture( + request: ClientRequest, + requestDetail: RequestDetail, + mainProcess: MainProcess +): void { + request.on('upgrade', (response: IncomingMessage, socket: Socket, head: Buffer) => { + void mainProcess.send({ + type: 'Network.webSocketCreated', + data: { + requestId: requestDetail.id, + url: requestDetail.url ?? '', + initiator: requestDetail.initiator, + response: responseHandshake(response) } + }) - receiver.on('message', receiverHandler) - sender.on('message', senderHanlder) - let chunk + const extensions = negotiatedWebSocketExtensions(response) + const receiver = new Receiver({ + allowSynchronousEvents: true, + binaryType: BINARY_TYPES[0], + extensions: extensions.receiver, + isServer: false + }) + const sender = new Receiver({ + allowSynchronousEvents: true, + binaryType: BINARY_TYPES[0], + extensions: extensions.sender, + isServer: true + }) - socket.write = (data: any, ...rest: any[]) => { - const buf = Buffer.from(data) - sender.write(buf) - return originalWrite.call(socket, data, ...rest) - } - socket.addListener('data', (data) => { - const buf = Buffer.from(data) - receiver.write(buf) + // Writable reports parser failures asynchronously. Retaining these + // listeners is what keeps observational capture errors out of user code. + receiver.on('error', () => undefined) + sender.on('error', () => undefined) + let closeRequested = false + let closeSent = false + let receiverSettled = false + let senderSettled = false + const sendClosedWhenSettled = () => { + if (!closeRequested || closeSent || !receiverSettled || !senderSettled) return + closeSent = true + void mainProcess.send({ + type: 'Network.webSocketClosed', + data: { requestId: requestDetail.id } }) - socket.addListener('close', () => { - chunk = socket.read() - if (chunk !== null) { - receiver.write(chunk) - sender.write(chunk) - } - receiver.end() - sender.end() - receiver.removeAllListeners() - sender.removeAllListeners() - mainProcess.send({ - method: 'Network.webSocketClosed', - params: { - requestId: requestDetail.id, - timestamp: getTimestamp() + } + const settleReceiver = () => { + if (receiverSettled) return + receiverSettled = true + extensions.cleanupReceiver() + sendClosedWhenSettled() + } + const settleSender = () => { + if (senderSettled) return + senderSettled = true + extensions.cleanupSender() + sendClosedWhenSettled() + } + receiver.once('finish', settleReceiver) + receiver.once('close', settleReceiver) + sender.once('finish', settleSender) + sender.once('close', settleSender) + + receiver.on('message', (data: unknown, isBinary: boolean) => { + void mainProcess.send({ + type: 'Network.webSocketFrameReceived', + data: { + requestId: requestDetail.id, + response: { + payloadData: framePayload(data, isBinary), + opcode: isBinary ? 2 : 1, + mask: false } - }) + } }) - socket.addListener('end', () => { - receiver.end() - sender.end() - receiver.removeAllListeners() - sender.removeAllListeners() + }) + sender.on('message', (data: unknown, isBinary: boolean) => { + void mainProcess.send({ + type: 'Network.webSocketFrameSent', + data: { + requestId: requestDetail.id, + response: { + payloadData: framePayload(data, isBinary), + opcode: isBinary ? 2 : 1, + mask: true + } + } }) }) - } else { - mainProcess.sendRequest('registerRequest', requestDetail) - } - return actualRequest -} + const originalWrite = socket.write + socket.write = function (this: Socket, data: any, ...rest: any[]) { + writeCapture(sender, data) + return Reflect.apply(originalWrite, this, [data, ...rest]) + } as typeof socket.write -function proxyCallbackFactory( - actualCallBack: any, - requestDetail: RequestDetail, - mainProcess: MainProcess -) { - return (response: IncomingMessage) => { - requestDetail.responseHeaders = response.headers - if (typeof actualCallBack === 'function') { - actualCallBack(response) + if (head.length > 0) writeCapture(receiver, head) + socket.on('data', (data) => writeCapture(receiver, data)) + + const close = () => { + if (closeRequested) return + closeRequested = true + endCapture(receiver) + endCapture(sender) + sendClosedWhenSettled() } + socket.on('close', close) + socket.on('end', close) + }) +} + +function initialUrl( + arg1: RequestOptions | string | URL, + options: RequestOptions | undefined, + isHttps: boolean +): string { + if (typeof arg1 === 'string') return arg1 + if (arg1 instanceof URL) return arg1.toString() + const protocol = options?.protocol ?? (isHttps ? 'https:' : 'http:') + const hostname = options?.hostname ?? options?.host ?? 'localhost' + const port = options?.port === undefined ? '' : `:${options.port}` + return `${protocol}//${hostname}${port}${options?.path ?? '/'}` +} - mainProcess.responseRequest(requestDetail.id, response) +function requestOptions( + arg1: RequestOptions | string | URL, + arg2: RequestOptions | ((response: IncomingMessage) => void) | undefined +): RequestOptions | undefined { + if (typeof arg1 === 'string' || arg1 instanceof URL) { + return typeof arg2 === 'object' ? arg2 : undefined } + return arg1 } -function proxySetHeader(request: ClientRequest, requestDetail: RequestDetail) { - let originSetHeader = request.setHeader - request.setHeader = function (name, val) { - if (Array.isArray(val)) { - // TODO: use string[] to send multiple headers with the same name. - val.forEach((v) => { - requestDetail.requestHeaders[name] = v - }) - } else { - requestDetail.requestHeaders[name] = val - } - return originSetHeader.call(request, name, val) +function callbackFrom( + arg2: RequestOptions | ((response: IncomingMessage) => void) | undefined, + arg3: ((response: IncomingMessage) => void) | undefined +): ((response: IncomingMessage) => void) | undefined { + return typeof arg2 === 'function' ? arg2 : arg3 +} + +function invokeRequest( + actualRequestHandler: RequestFn, + thisValue: unknown, + arg1: RequestOptions | string | URL, + arg2: RequestOptions | ((response: IncomingMessage) => void) | undefined, + callback: (response: IncomingMessage) => void +): ClientRequest { + let args: unknown[] + if (typeof arg1 === 'string' || arg1 instanceof URL) { + args = typeof arg2 === 'object' ? [arg1, arg2, callback] : [arg1, callback] + } else { + args = [arg1, callback] } + return Reflect.apply(actualRequestHandler, thisValue, args) } +/** + * Wrap `http.request`/`https.request` without changing their overload or stream + * semantics. Capture is registered immediately before `end()` (or before an + * early response/failure) so every `write()` chunk and `end(body)` mutation is + * visible in the CDP request. + */ export function requestProxyFactory( - this: any, - actualRequestHandler: any, + this: unknown, + actualRequestHandler: RequestFn, isHttps: boolean, mainProcess: MainProcess -) { - const fn: RequestFn = (arg1: any, arg2?: any, arg3?: any) => { - // #region resolve arguments - let url: string | URL | undefined - let options: RequestOptions | string | URL | undefined - let callback: ((res: IncomingMessage) => void) | undefined - - if (typeof arg1 === 'string' || arg1 instanceof URL) { - // Signature: (url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; - url = arg1 - options = arg2 - callback = arg3 - } else { - // Signature: (options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; - options = arg1 - callback = arg2 +): RequestFn { + const thisValue = this + return function requestProxy( + arg1: RequestOptions | string | URL, + arg2?: RequestOptions | ((response: IncomingMessage) => void), + arg3?: (response: IncomingMessage) => void + ): ClientRequest { + if (isLegacyCaptureSuppressed()) { + const args = + typeof arg1 === 'string' || arg1 instanceof URL + ? typeof arg2 === 'object' + ? [arg1, arg2, arg3] + : [arg1, arg2] + : [arg1, arg2] + return Reflect.apply(actualRequestHandler, thisValue, args) } + const options = requestOptions(arg1, arg2) + const actualCallback = callbackFrom(arg2, arg3) + const detail = new RequestDetail() + detail.requestStartTime = Date.now() / 1000 + detail.url = initialUrl(arg1, options, isHttps) + detail.method = options?.method ?? 'GET' + detail.requestHeaders = { ...(options?.headers ?? {}) } + detail.responseHeaders = {} + detail.loadCallFrames() - const requestDetail = new RequestDetail() - - if (typeof url === 'string') { - requestDetail.url = url - requestDetail.method = 'GET' - } else if (url instanceof URL) { - requestDetail.url = url.toString() - requestDetail.method = 'GET' - } else if (options && typeof options !== 'string' && !(options instanceof URL)) { - const connectionType = isHttps ? 'https' : 'http' - requestDetail.url = `${connectionType}://${options.hostname || options.host}${options.path}` + let responseStarted = false + let terminal = false + let request!: ClientRequest + + const fail = (error: unknown, canceled = false) => { + if (terminal) return + terminal = true + register() + detail.requestEndTime = Date.now() / 1000 + void mainProcess.send({ + type: 'requestFailed', + data: { request: detail, errorText: errorText(error), canceled } + }) } - if (options && typeof options !== 'string' && !(options instanceof URL)) { - requestDetail.method = options.method - requestDetail.requestHeaders = options.headers + const proxyCallback = (response: IncomingMessage) => { + responseStarted = true + register() + detail.responseHeaders = { ...response.headers } + detail.responseStatusCode = response.statusCode ?? 0 + detail.responseStatusText = response.statusMessage ?? '' + mainProcess.responseRequest(detail, response) + actualCallback?.(response) } - // #endregion + request = invokeRequest(actualRequestHandler, thisValue, arg1, arg2, proxyCallback) - requestDetail.loadCallFrames() - if (requestDetail.isWebSocket()) { - requestDetail.url = requestDetail - .url!.replace('http://', 'ws://') - .replace('https://', 'wss://') - mainProcess.sendRequest('initRequest', requestDetail) - } else { - mainProcess.sendRequest('initRequest', requestDetail) + const protocol = (request as ClientRequest & { protocol?: string }).protocol + const hostHeader = request.getHeader('host') + const host = + typeof hostHeader === 'string' || typeof hostHeader === 'number' + ? String(hostHeader) + : (request as ClientRequest & { host?: string }).host + const path = request.path + if (protocol && host && path) detail.url = `${protocol}//${host}${path}` + detail.method = request.method || detail.method || 'GET' + if (typeof request.getHeaders === 'function') detail.requestHeaders = request.getHeaders() + if (detail.isWebSocket()) { + detail.url = detail.url?.replace(/^http:/, 'ws:').replace(/^https:/, 'wss:') } - const proxyCallback = proxyCallbackFactory(callback, requestDetail, mainProcess) + mainProcess.sendRequest('initRequest', detail) - if (typeof arg1 === 'string' || arg1 instanceof URL) { - // Call actualRequestHandler with 3 parameters - const request: ClientRequest = actualRequestHandler( - url!, - options as RequestOptions, - proxyCallback + const bodyChunks: Buffer[] = [] + let registered = false + const appendBody = (chunk: unknown, encoding?: BufferEncoding) => { + if (chunk === undefined || chunk === null) return + const value = Buffer.isBuffer(chunk) + ? chunk + : chunk instanceof Uint8Array + ? Buffer.from(chunk) + : Buffer.from(String(chunk), encoding) + bodyChunks.push(value) + } + const register = () => { + if (registered || detail.isWebSocket()) return + registered = true + if (typeof request.getHeaders === 'function') detail.requestHeaders = request.getHeaders() + if (bodyChunks.length > 0) detail.requestData = Buffer.concat(bodyChunks) + mainProcess.sendRequest('registerRequest', detail) + } + + const originalWrite = request.write + request.write = function ( + this: ClientRequest, + chunk: any, + encodingOrCallback?: any, + callback?: any + ) { + appendBody( + chunk, + typeof encodingOrCallback === 'string' ? (encodingOrCallback as BufferEncoding) : undefined ) - proxySetHeader(request, requestDetail) - return proxyClientRequestFactory(request, requestDetail, mainProcess) - } else { - // Call actualRequestHandler with 2 parameters - const request: ClientRequest = actualRequestHandler(options as RequestOptions, proxyCallback) - proxySetHeader(request, requestDetail) - return proxyClientRequestFactory(request, requestDetail, mainProcess) + return Reflect.apply(originalWrite, this, arguments) + } as typeof request.write + + const originalEnd = request.end + request.end = function ( + this: ClientRequest, + chunk?: any, + encodingOrCallback?: any, + callback?: any + ) { + if (typeof chunk !== 'function') { + appendBody( + chunk, + typeof encodingOrCallback === 'string' + ? (encodingOrCallback as BufferEncoding) + : undefined + ) + } + register() + return Reflect.apply(originalEnd, this, arguments) + } as typeof request.end + + request.on('error', (error) => fail(error)) + request.on('abort', () => fail(new Error('Request aborted'), true)) + request.on('response', () => { + responseStarted = true + }) + + if (detail.isWebSocket()) { + request.on('upgrade', () => { + // A successful 101 is terminal for ClientRequest; the upgraded socket + // owns the rest of the lifecycle. Its later request `close` is not an + // HTTP loading failure. + responseStarted = true + terminal = true + }) + installWebSocketCapture(request, detail, mainProcess) } - } - return fn + // A request can close without an error before receiving headers (for + // example, a locally destroyed request). Treat only that state as failure. + request.on('close', () => { + if (!responseStarted && !terminal && request.destroyed) { + fail(new Error('Request closed before a response was received'), true) + } + }) + + return request + } as RequestFn +} + +/** Node implements `get()` as `request()` followed by `end()`. */ +export function getProxyFactory(request: RequestFn): RequestFn { + return function getProxy(this: unknown, ...args: any[]) { + const clientRequest = Reflect.apply(request, this, args) + clientRequest.end() + return clientRequest + } as RequestFn } diff --git a/packages/network-debugger/src/core/undici.ts b/packages/network-debugger/src/core/undici.ts index 7f82e1a..8eff4c2 100644 --- a/packages/network-debugger/src/core/undici.ts +++ b/packages/network-debugger/src/core/undici.ts @@ -1,20 +1,26 @@ import { fetchProxyFactory } from './fetch' import undici from 'undici' import { MainProcess } from './fork' +import type { LegacyMockRule } from '../mock' -export const undiciFetchProxy = (mainProcess: MainProcess) => { +export const undiciFetchProxy = ( + mainProcess: MainProcess, + mockRules: readonly LegacyMockRule[] = [] +) => { if (!undici.fetch) { return } const originalFetch = undici.fetch - undici['fetch'] = fetchProxyFactory( - originalFetch as typeof globalThis.fetch, - mainProcess + const proxy = ( + mockRules.length > 0 + ? fetchProxyFactory(originalFetch as typeof globalThis.fetch, mainProcess, mockRules) + : fetchProxyFactory(originalFetch as typeof globalThis.fetch, mainProcess) ) as typeof undici.fetch + undici['fetch'] = proxy return () => { - undici['fetch'] = originalFetch + if (undici.fetch === proxy) undici['fetch'] = originalFetch } } diff --git a/packages/network-debugger/src/core/ws/extension.test.ts b/packages/network-debugger/src/core/ws/extension.test.ts new file mode 100644 index 0000000..3ed262a --- /dev/null +++ b/packages/network-debugger/src/core/ws/extension.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, test } from 'vitest' +import { parsePerMessageDeflate } from './extension' + +describe('Sec-WebSocket-Extensions parsing', () => { + test('extracts negotiated permessage-deflate parameters and quoted values', () => { + expect( + parsePerMessageDeflate( + 'x-ignored; value=1, permessage-deflate; server_no_context_takeover; client_max_window_bits="12"' + ) + ).toEqual([ + { + server_no_context_takeover: [true], + client_max_window_bits: ['12'] + } + ]) + }) + + test('retains duplicate parameters so negotiation validation can reject them', () => { + expect( + parsePerMessageDeflate( + 'permessage-deflate; server_max_window_bits=12; server_max_window_bits=13' + ) + ).toEqual([{ server_max_window_bits: ['12', '13'] }]) + }) + + test('rejects malformed quoted values without evaluating them', () => { + expect(() => parsePerMessageDeflate('permessage-deflate; server_max_window_bits="12')).toThrow( + SyntaxError + ) + }) +}) diff --git a/packages/network-debugger/src/core/ws/extension.ts b/packages/network-debugger/src/core/ws/extension.ts new file mode 100644 index 0000000..67951fc --- /dev/null +++ b/packages/network-debugger/src/core/ws/extension.ts @@ -0,0 +1,98 @@ +type ExtensionParameter = string | true +type ExtensionParameters = Record + +const TOKEN = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/ + +function splitOutsideQuotes(value: string, delimiter: ',' | ';'): string[] { + const parts: string[] = [] + let start = 0 + let quoted = false + let escaped = false + + for (let index = 0; index < value.length; index += 1) { + const character = value[index] + if (escaped) { + escaped = false + continue + } + if (quoted && character === '\\') { + escaped = true + continue + } + if (character === '"') { + quoted = !quoted + continue + } + if (!quoted && character === delimiter) { + parts.push(value.slice(start, index)) + start = index + 1 + } + } + + if (quoted || escaped) throw new SyntaxError('Invalid Sec-WebSocket-Extensions header') + parts.push(value.slice(start)) + return parts +} + +function parseToken(value: string): string { + const token = value.trim() + if (!TOKEN.test(token)) throw new SyntaxError('Invalid Sec-WebSocket-Extensions token') + return token +} + +function parseValue(value: string): string { + const candidate = value.trim() + if (!candidate.startsWith('"')) return parseToken(candidate) + if (!candidate.endsWith('"') || candidate.length < 3) { + throw new SyntaxError('Invalid Sec-WebSocket-Extensions quoted value') + } + + let result = '' + let escaped = false + for (const character of candidate.slice(1, -1)) { + if (escaped) { + result += character + escaped = false + } else if (character === '\\') { + escaped = true + } else { + result += character + } + } + if (escaped || !TOKEN.test(result)) { + throw new SyntaxError('Invalid Sec-WebSocket-Extensions quoted value') + } + return result +} + +/** + * Parse the negotiated permessage-deflate response parameters. The HTTP + * upgrade is observed below the WebSocket implementation, so capture needs an + * independent, transport-only view of the negotiated extension. + */ +export function parsePerMessageDeflate( + header: string | readonly string[] | undefined +): ExtensionParameters[] | undefined { + if (header === undefined) return undefined + const configurations: ExtensionParameters[] = [] + + for (const extension of splitOutsideQuotes( + typeof header === 'string' ? header : header.join(','), + ',' + )) { + const fields = splitOutsideQuotes(extension, ';') + const name = parseToken(fields.shift() ?? '').toLowerCase() + if (name !== 'permessage-deflate') continue + + const parameters: ExtensionParameters = Object.create(null) + for (const field of fields) { + const equals = field.indexOf('=') + const parameterName = parseToken(equals === -1 ? field : field.slice(0, equals)).toLowerCase() + const parameterValue = equals === -1 ? true : parseValue(field.slice(equals + 1)) + ;(parameters[parameterName] ??= []).push(parameterValue) + } + configurations.push(parameters) + } + + return configurations.length > 0 ? configurations : undefined +} diff --git a/packages/network-debugger/src/core/ws/permessage-deflate.test.ts b/packages/network-debugger/src/core/ws/permessage-deflate.test.ts index e84e6ac..be9578d 100644 --- a/packages/network-debugger/src/core/ws/permessage-deflate.test.ts +++ b/packages/network-debugger/src/core/ws/permessage-deflate.test.ts @@ -319,6 +319,38 @@ describe('PerMessageDeflate', () => { clientPmd.cleanup() }) + it('应该在连续消息之间清空缓冲并维护压缩上下文', async () => { + const serverPmd = new PerMessageDeflate({}, true) + serverPmd.accept([{}]) + const clientPmd = new PerMessageDeflate({}, false) + clientPmd.accept([{}]) + + const compress = (data: string) => + new Promise((resolve, reject) => { + serverPmd.compress(data, true, (error, result) => { + if (error) reject(error) + else if (!result) reject(new Error('Compression returned no data')) + else resolve(result) + }) + }) + const decompress = (data: Buffer) => + new Promise((resolve, reject) => { + clientPmd.decompress(data, true, (error, result) => { + if (error) reject(error) + else if (!result) reject(new Error('Decompression returned no data')) + else resolve(result) + }) + }) + + const first = await decompress(await compress('first compressed message')) + const second = await decompress(await compress('second compressed message')) + + expect(first.toString()).toBe('first compressed message') + expect(second.toString()).toBe('second compressed message') + serverPmd.cleanup() + clientPmd.cleanup() + }) + it('应该在超过 maxPayload 时返回错误(解压缩)', async () => { const serverPmd = new PerMessageDeflate({}, true) serverPmd.accept([{}]) diff --git a/packages/network-debugger/src/core/ws/permessage-deflate.ts b/packages/network-debugger/src/core/ws/permessage-deflate.ts index fe870ea..e67595b 100644 --- a/packages/network-debugger/src/core/ws/permessage-deflate.ts +++ b/packages/network-debugger/src/core/ws/permessage-deflate.ts @@ -272,32 +272,43 @@ export class PerMessageDeflate { this._inflate.on('data', inflateOnData) } - ;(this._inflate as any)[kCallback] = callback + const inflate = this._inflate + const state = inflate as any + state[kCallback] = callback - this._inflate.write(data) - if (fin) this._inflate.write(TRAILER) + inflate.write(data) + if (fin) inflate.write(TRAILER) - this._inflate.flush(() => { - const err = (this._inflate as any)[kError] + inflate.flush(() => { + // An inflate error calls the write callback and clears `_inflate`. + if (this._inflate !== inflate) return + const err = state[kError] if (err) { - this._inflate!.close() + inflate.close() this._inflate = null + state[kCallback] = undefined callback(err) return } - const data = bufferUtil.concat( - (this._inflate as any)[kBuffers], - (this._inflate as any)[kTotalLength] - ) + const result = bufferUtil.concat(state[kBuffers], state[kTotalLength]) + state[kCallback] = undefined - if (this._maxPayload < 1 || data.length <= this._maxPayload) { - callback(null, data) - return + if (state._readableState?.endEmitted) { + inflate.close() + this._inflate = null + } else { + state[kTotalLength] = 0 + state[kBuffers] = [] + if (fin && this.params?.[`${endpoint}_no_context_takeover`]) inflate.reset() } - callback(new RangeError('Max payload size exceeded'), null) + if (this._maxPayload > 0 && result.length > this._maxPayload) { + callback(new RangeError('Max payload size exceeded'), null) + } else { + callback(null, result) + } }) } @@ -319,48 +330,66 @@ export class PerMessageDeflate { ...this._options.zlibDeflateOptions, windowBits }) + ;(this._deflate as any)[kPerMessageDeflate] = this ;(this._deflate as any)[kTotalLength] = 0 ;(this._deflate as any)[kBuffers] = [] this._deflate.on('error', deflateOnError) this._deflate.on('data', deflateOnData) } - ;(this._deflate as any)[kCallback] = callback + const deflate = this._deflate + const state = deflate as any + state[kCallback] = callback - this._deflate.write(data) - if (fin) - this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { - const data = bufferUtil.concat( - (this._deflate as any)[kBuffers], - (this._deflate as any)[kTotalLength] - ) + deflate.write(data) + deflate.flush(zlib.constants.Z_SYNC_FLUSH, () => { + // Cleanup or a zlib error can close the stream while work is pending. + if (this._deflate !== deflate) return + let result = bufferUtil.concat(state[kBuffers], state[kTotalLength]) + if (fin) result = result.subarray(0, Math.max(0, result.length - TRAILER.length)) - if (this._maxPayload < 1 || data.length <= this._maxPayload) { - callback(null, data) - return - } + state[kCallback] = undefined + state[kTotalLength] = 0 + state[kBuffers] = [] + if (fin && this.params?.[`${endpoint}_no_context_takeover`]) deflate.reset() + if (this._maxPayload > 0 && result.length > this._maxPayload) { callback(new RangeError('Max payload size exceeded'), null) - }) + } else { + callback(null, result) + } + }) } } -function inflateOnError(this: PerMessageDeflate, err: Error): void { - this[kPerMessageDeflate]![kCallback]!(err) +function inflateOnError(this: zlib.InflateRaw, err: Error): void { + const state = this as any + const extension = state[kPerMessageDeflate] as PerMessageDeflate | undefined + if (extension) (extension as any)._inflate = null + const callback = state[kCallback] as ((error: Error) => void) | undefined + state[kCallback] = undefined + if (callback) callback(err) } -function inflateOnData(this: PerMessageDeflate, chunk: Buffer): void { - this[kTotalLength]! += chunk.length - this[kBuffers]!.push(chunk) +function inflateOnData(this: zlib.InflateRaw, chunk: Buffer): void { + const state = this as any + state[kTotalLength] += chunk.length + state[kBuffers].push(chunk) } -function deflateOnError(this: PerMessageDeflate, err: Error): void { - this[kPerMessageDeflate]![kCallback]!(err) +function deflateOnError(this: zlib.DeflateRaw, err: Error): void { + const state = this as any + const extension = state[kPerMessageDeflate] as PerMessageDeflate | undefined + if (extension) (extension as any)._deflate = null + const callback = state[kCallback] as ((error: Error) => void) | undefined + state[kCallback] = undefined + if (callback) callback(err) } -function deflateOnData(this: PerMessageDeflate, chunk: Buffer): void { - this[kTotalLength]! += chunk.length - this[kBuffers]!.push(chunk) +function deflateOnData(this: zlib.DeflateRaw, chunk: Buffer): void { + const state = this as any + state[kTotalLength] += chunk.length + state[kBuffers].push(chunk) } export default PerMessageDeflate diff --git a/packages/network-debugger/src/diagnostics/doctor.test.ts b/packages/network-debugger/src/diagnostics/doctor.test.ts new file mode 100644 index 0000000..008eeb7 --- /dev/null +++ b/packages/network-debugger/src/diagnostics/doctor.test.ts @@ -0,0 +1,195 @@ +import { describe, expect, it, vi } from 'vitest' +import type { + AdapterKind, + AdapterProbe, + CapabilityMap, + DebugAdapter, + Diagnostic +} from '../adapters/types' +import type { ConfigResolution, ResolvedNndConfig } from '../config' +import { formatDoctorReport } from './format' +import { runDoctor } from './doctor' + +const noCapabilities: CapabilityMap = { + http: false, + https: false, + fetch: false, + http2: false, + responseBody: false, + requestBody: false, + websocketLifecycle: false, + websocketFrames: false, + sseMessages: false, + initiator: false +} + +const legacyCapabilities: CapabilityMap = { + ...noCapabilities, + http: true, + https: true, + fetch: true, + responseBody: true, + requestBody: true +} + +function probe( + kind: AdapterKind, + available: boolean, + capabilities: CapabilityMap, + diagnostics: readonly Diagnostic[] = [], + autoSelectable = true +): AdapterProbe { + return { kind, available, autoSelectable, capabilities, diagnostics } +} + +function adapter(kind: AdapterKind, implementation: () => AdapterProbe): DebugAdapter { + return { + kind, + probe: vi.fn(implementation), + start: vi.fn(() => Promise.reject(new Error('doctor never starts adapters'))) + } +} + +function resolution(mode: ResolvedNndConfig['mode']): ConfigResolution { + return { + config: { + mode, + open: false, + wait: true, + watch: false, + runner: 'node', + inspector: { host: '127.0.0.1', port: 0 }, + requiredCapabilities: [], + legacy: {} + }, + sources: { env: [], cli: [] } + } +} + +describe('doctor diagnostics', () => { + it('reports Auto fallback without treating the usable result as a failure', async () => { + const nativeDiagnostic: Diagnostic = { + code: 'NND_NATIVE_FLAG_REQUIRED', + level: 'error', + message: 'flag missing', + hint: 'enable it' + } + const report = await runDoctor({ + nodeVersion: '24.16.0', + packageVersion: '1.2.3', + execArgv: [], + inspectorAvailable: true, + inspector: { url: () => undefined, open: () => undefined, close: () => undefined }, + nativeAdapter: adapter('native', () => + probe('native', false, noCapabilities, [nativeDiagnostic], false) + ), + legacyAdapter: adapter('legacy', () => probe('legacy', true, legacyCapabilities)), + resolve: vi.fn(async () => resolution('auto')) + }) + + expect(report.ok).toBe(true) + expect(report.selection).toMatchObject({ requested: 'auto', selected: 'legacy' }) + expect(report.selection.fallbackReason).toMatchObject({ code: 'NND_AUTO_FALLBACK' }) + expect(report.diagnostics.map((item) => item.code)).toEqual( + expect.arrayContaining([ + 'NND_DOCTOR_NODE_VERSION', + 'NND_DOCTOR_PACKAGE_VERSION', + 'NND_DOCTOR_CONFIG_DEFAULTS', + 'NND_NATIVE_FLAG_REQUIRED', + 'NND_AUTO_FALLBACK', + 'NND_DOCTOR_SELECTED_LEGACY' + ]) + ) + }) + + it('fails forced Native selection with stable selection details', async () => { + const report = await runDoctor({ + packageVersion: '1.2.3', + nativeAdapter: adapter('native', () => probe('native', false, noCapabilities)), + legacyAdapter: adapter('legacy', () => probe('legacy', true, legacyCapabilities)), + resolve: vi.fn(async () => resolution('native')) + }) + + expect(report.ok).toBe(false) + expect(report.selection).toMatchObject({ + requested: 'native', + errorCode: 'NND_ADAPTER_UNAVAILABLE' + }) + expect(report.diagnostics.at(-1)).toMatchObject({ + code: 'NND_DOCTOR_SELECTION_FAILED', + level: 'error' + }) + }) + + it('bounded-waits and retries a forced probe', async () => { + let calls = 0 + let time = 0 + const native = adapter('native', () => { + calls += 1 + return calls <= 2 + ? probe('native', false, noCapabilities) + : probe('native', true, legacyCapabilities) + }) + const report = await runDoctor({ + packageVersion: '1.2.3', + nativeAdapter: native, + legacyAdapter: adapter('legacy', () => probe('legacy', true, legacyCapabilities)), + resolve: vi.fn(async () => resolution('native')), + probeWaitMs: 100, + probeIntervalMs: 25, + now: () => time, + sleep: vi.fn(async (milliseconds) => { + time += milliseconds + }) + }) + + expect(report.ok).toBe(true) + expect(report.selection.selected).toBe('native') + expect(calls).toBeGreaterThanOrEqual(3) + expect(time).toBeLessThanOrEqual(100) + }) + + it('waits before committing an Auto fallback when Native may become available', async () => { + let calls = 0 + let time = 0 + const native = adapter('native', () => { + calls += 1 + return calls <= 2 + ? probe('native', false, noCapabilities) + : probe('native', true, legacyCapabilities) + }) + const report = await runDoctor({ + packageVersion: '1.2.3', + nativeAdapter: native, + legacyAdapter: adapter('legacy', () => probe('legacy', true, legacyCapabilities)), + resolve: vi.fn(async () => resolution('auto')), + probeWaitMs: 100, + probeIntervalMs: 25, + now: () => time, + sleep: vi.fn(async (milliseconds) => { + time += milliseconds + }) + }) + + expect(report.ok).toBe(true) + expect(report.selection.selected).toBe('native') + expect(time).toBe(25) + }) + + it('preserves config errors in JSON and human formats', async () => { + const report = await runDoctor({ + packageVersion: '1.2.3', + nativeAdapter: adapter('native', () => probe('native', false, noCapabilities)), + legacyAdapter: adapter('legacy', () => probe('legacy', true, legacyCapabilities)), + resolve: vi.fn(async () => { + throw Object.assign(new Error('broken config'), { code: 'CUSTOM' }) + }) + }) + + expect(report.ok).toBe(false) + const json = JSON.parse(formatDoctorReport(report, true)) as typeof report + expect(json.schemaVersion).toBe(1) + expect(json.ok).toBe(false) + expect(formatDoctorReport(report)).toContain('NND_CONFIG_LOAD_FAILED') + }) +}) diff --git a/packages/network-debugger/src/diagnostics/doctor.ts b/packages/network-debugger/src/diagnostics/doctor.ts new file mode 100644 index 0000000..fb5e8d0 --- /dev/null +++ b/packages/network-debugger/src/diagnostics/doctor.ts @@ -0,0 +1,335 @@ +import { readFileSync } from 'node:fs' +import * as nodeInspector from 'node:inspector' +import { dirname, parse, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { LegacyAdapter } from '../adapters/legacy' +import { + NodeNativeAdapter, + OPTIONAL_NATIVE_NETWORK_METHODS, + REQUIRED_NATIVE_NETWORK_METHODS, + hasNativeInspectionFlag, + type NativeInspectorApi, + type NodeNativeAdapterDependencies +} from '../adapters/node-native' +import { AdapterSelector } from '../adapters/selector' +import type { AdapterProbe, DebugAdapter, Diagnostic, NetworkCapability } from '../adapters/types' +import { + NndConfigError, + resolveConfig, + type ConfigResolution, + type ResolveConfigOptions, + type ResolvedNndConfig +} from '../config' + +export const DOCTOR_SCHEMA_VERSION = 1 + +export interface DoctorNetworkMethods { + required: readonly string[] + optional: readonly string[] + available: readonly string[] + missingRequired: readonly string[] +} + +export interface DoctorSelection { + requested: ResolvedNndConfig['mode'] + selected?: 'native' | 'legacy' + fallbackReason?: Diagnostic + errorCode?: string + error?: string +} + +export interface DoctorReport { + schemaVersion: typeof DOCTOR_SCHEMA_VERSION + ok: boolean + nodeVersion: string + packageVersion: string + inspectorAvailable: boolean + experimentalFlag: boolean + networkMethods: DoctorNetworkMethods + capabilities: Readonly> + native: AdapterProbe + config?: ConfigResolution + selection: DoctorSelection + diagnostics: readonly Diagnostic[] +} + +export interface DoctorOptions { + cwd?: string + env?: NodeJS.ProcessEnv + config?: ResolveConfigOptions['cli'] + configFile?: ResolveConfigOptions['configFile'] + /** Retry a failed forced-mode probe for at most this many milliseconds. */ + probeWaitMs?: number + probeIntervalMs?: number + nodeVersion?: string + packageVersion?: string + execArgv?: readonly string[] + inspector?: NativeInspectorApi | null + inspectorAvailable?: boolean + nativeAdapter?: DebugAdapter + legacyAdapter?: DebugAdapter + resolve?: (options?: ResolveConfigOptions) => Promise + sleep?: (milliseconds: number) => Promise + now?: () => number +} + +function diagnostic( + code: string, + level: Diagnostic['level'], + message: string, + hint?: string, + details?: Readonly> +): Diagnostic { + return { + code, + level, + message, + ...(hint ? { hint } : {}), + ...(details ? { details } : {}) + } +} + +function packageVersionFrom(start: string): string | undefined { + let directory = start + const root = parse(directory).root + while (directory !== root) { + try { + const value = JSON.parse(readFileSync(resolve(directory, 'package.json'), 'utf8')) as { + name?: unknown + version?: unknown + } + if (value.name === 'node-network-devtools' && typeof value.version === 'string') { + return value.version + } + } catch { + // Keep walking: installed and source layouts place this module at + // different depths. + } + directory = dirname(directory) + } + return undefined +} + +export function detectPackageVersion(moduleUrl: string = import.meta.url): string { + try { + return packageVersionFrom(dirname(fileURLToPath(moduleUrl))) ?? 'unknown' + } catch { + return 'unknown' + } +} + +function methodReport(inspector: NativeInspectorApi | null): DoctorNetworkMethods { + const network = inspector?.Network + const required = [...REQUIRED_NATIVE_NETWORK_METHODS] + const optional = [...OPTIONAL_NATIVE_NETWORK_METHODS] + const available = [...required, ...optional].filter( + (method) => typeof network?.[method as keyof typeof network] === 'function' + ) + return { + required, + optional, + available, + missingRequired: required.filter((method) => !available.includes(method)) + } +} + +function configErrorDiagnostic(error: unknown): Diagnostic { + if (error instanceof NndConfigError) { + return diagnostic( + error.code, + 'error', + error.message, + 'Fix the configuration and rerun nnd doctor.', + { + ...error.details + } + ) + } + return diagnostic( + 'NND_CONFIG_LOAD_FAILED', + 'error', + error instanceof Error ? error.message : String(error), + 'Fix the configuration and rerun nnd doctor.' + ) +} + +function selectionErrorCode(error: unknown): string { + if (typeof error === 'object' && error !== null && 'code' in error) { + return String((error as { code: unknown }).code) + } + return 'NND_DOCTOR_SELECTION_FAILED' +} + +function errorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error) +} + +interface SelectionAttempt { + native: AdapterProbe + selection: DoctorSelection + selectionDiagnostic: Diagnostic +} + +async function inspectSelection( + nativeAdapter: DebugAdapter, + legacyAdapter: DebugAdapter, + config: ResolvedNndConfig +): Promise { + const options = { + mode: config.mode, + requiredCapabilities: config.requiredCapabilities, + inspector: config.inspector + } as const + const native = await nativeAdapter.probe(options) + try { + const selected = await new AdapterSelector([nativeAdapter, legacyAdapter]).select(options) + return { + native, + selection: { + requested: config.mode, + selected: selected.adapter.kind, + ...(selected.fallbackReason ? { fallbackReason: selected.fallbackReason } : {}) + }, + selectionDiagnostic: diagnostic( + `NND_DOCTOR_SELECTED_${selected.adapter.kind.toUpperCase()}`, + selected.fallbackReason ? 'warn' : 'info', + `Selected ${selected.adapter.kind} adapter${selected.fallbackReason ? ' via Auto fallback' : ''}.`, + undefined, + { requested: config.mode, selected: selected.adapter.kind } + ) + } + } catch (error) { + const code = selectionErrorCode(error) + const message = errorMessage(error) + return { + native, + selection: { + requested: config.mode, + errorCode: code, + error: message + }, + selectionDiagnostic: diagnostic( + 'NND_DOCTOR_SELECTION_FAILED', + 'error', + message, + config.mode === 'native' + ? 'Enable the experimental flag and use a supported Node.js runtime, or choose Auto/Legacy.' + : 'Review adapter diagnostics and required capabilities.', + { code, requested: config.mode } + ) + } + } +} + +const defaultSleep = (milliseconds: number) => + new Promise((resolvePromise) => setTimeout(resolvePromise, milliseconds)) + +export async function runDoctor(options: DoctorOptions = {}): Promise { + const env = options.env ?? process.env + const nodeVersion = options.nodeVersion ?? process.versions.node + const packageVersion = options.packageVersion ?? detectPackageVersion() + const execArgv = options.execArgv ?? process.execArgv + const inspector = + options.inspector === undefined + ? (nodeInspector as unknown as NativeInspectorApi) + : options.inspector + const inspectorAvailable = + options.inspectorAvailable ?? (process.features?.inspector !== false && inspector !== null) + const methods = methodReport(inspector) + const diagnostics: Diagnostic[] = [ + diagnostic('NND_DOCTOR_NODE_VERSION', 'info', `Node.js ${nodeVersion}.`, undefined, { + nodeVersion + }), + diagnostic( + 'NND_DOCTOR_PACKAGE_VERSION', + packageVersion === 'unknown' ? 'warn' : 'info', + `node-network-devtools ${packageVersion}.`, + packageVersion === 'unknown' ? 'Run doctor from an installed package.' : undefined, + { packageVersion } + ) + ] + + let resolution: ConfigResolution | undefined + try { + resolution = await (options.resolve ?? resolveConfig)({ + cwd: options.cwd, + env, + cli: options.config, + configFile: options.configFile + }) + diagnostics.push( + resolution.sources.configFile + ? diagnostic( + 'NND_DOCTOR_CONFIG_LOADED', + 'info', + `Loaded configuration from ${resolution.sources.configFile}.`, + undefined, + { sources: resolution.sources } + ) + : diagnostic( + 'NND_DOCTOR_CONFIG_DEFAULTS', + 'info', + 'No config file found; using environment and defaults.', + undefined, + { sources: resolution.sources } + ) + ) + } catch (error) { + diagnostics.push(configErrorDiagnostic(error)) + } + + const effectiveConfig: ResolvedNndConfig = resolution?.config ?? { + mode: options.config?.mode ?? 'auto', + open: false, + wait: true, + watch: false, + runner: 'node', + inspector: { host: '127.0.0.1', port: 0 }, + requiredCapabilities: options.config?.requiredCapabilities ?? [], + legacy: {} + } + const nativeDependencies: NodeNativeAdapterDependencies = { + inspector, + inspectorAvailable, + execArgv, + nodeVersion + } + const nativeAdapter = options.nativeAdapter ?? new NodeNativeAdapter(nativeDependencies) + const legacyAdapter = options.legacyAdapter ?? new LegacyAdapter() + const sleep = options.sleep ?? defaultSleep + const now = options.now ?? Date.now + const waitMs = Math.max(0, options.probeWaitMs ?? 0) + const interval = Math.max(1, options.probeIntervalMs ?? 100) + const deadline = now() + waitMs + let attempt = await inspectSelection(nativeAdapter, legacyAdapter, effectiveConfig) + + const shouldRetry = () => + !attempt.selection.selected || + (effectiveConfig.mode === 'auto' && + attempt.selection.selected === 'legacy' && + attempt.selection.fallbackReason !== undefined) + + while (shouldRetry() && now() < deadline) { + await sleep(Math.min(interval, Math.max(0, deadline - now()))) + attempt = await inspectSelection(nativeAdapter, legacyAdapter, effectiveConfig) + } + + diagnostics.push(...attempt.native.diagnostics) + if (attempt.selection.fallbackReason) diagnostics.push(attempt.selection.fallbackReason) + diagnostics.push(attempt.selectionDiagnostic) + + return { + schemaVersion: DOCTOR_SCHEMA_VERSION, + ok: Boolean(resolution && attempt.selection.selected), + nodeVersion, + packageVersion, + inspectorAvailable, + experimentalFlag: hasNativeInspectionFlag(execArgv), + networkMethods: methods, + capabilities: attempt.native.capabilities, + native: attempt.native, + ...(resolution ? { config: resolution } : {}), + selection: attempt.selection, + diagnostics + } +} diff --git a/packages/network-debugger/src/diagnostics/format.ts b/packages/network-debugger/src/diagnostics/format.ts new file mode 100644 index 0000000..da1f671 --- /dev/null +++ b/packages/network-debugger/src/diagnostics/format.ts @@ -0,0 +1,33 @@ +import type { Diagnostic } from '../adapters/types' +import type { DoctorReport } from './doctor' + +function mark(level: Diagnostic['level']): string { + if (level === 'error') return 'x' + if (level === 'warn') return '!' + return 'i' +} + +export function formatDoctorReport(report: DoctorReport, json = false): string { + if (json) return `${JSON.stringify(report, null, 2)}\n` + + const selected = report.selection.selected ?? 'none' + const capabilities = Object.entries(report.capabilities) + .filter(([, supported]) => supported) + .map(([capability]) => capability) + const lines = [ + `Node Network Devtools doctor (${report.ok ? 'ok' : 'failed'})`, + `Node: ${report.nodeVersion}`, + `Package: ${report.packageVersion}`, + `Inspector: ${report.inspectorAvailable ? 'available' : 'unavailable'}`, + `Experimental flag: ${report.experimentalFlag ? 'enabled' : 'missing'}`, + `Network methods: ${report.networkMethods.available.length} available, ${report.networkMethods.missingRequired.length} required missing`, + `Selection: ${report.selection.requested} -> ${selected}`, + `Native capabilities: ${capabilities.length ? capabilities.join(', ') : 'none'}`, + '', + ...report.diagnostics.map((item) => { + const hint = item.hint ? ` Hint: ${item.hint}` : '' + return `[${mark(item.level)}] ${item.code}: ${item.message}${hint}` + }) + ] + return `${lines.join('\n')}\n` +} diff --git a/packages/network-debugger/src/diagnostics/index.ts b/packages/network-debugger/src/diagnostics/index.ts new file mode 100644 index 0000000..9fca59d --- /dev/null +++ b/packages/network-debugger/src/diagnostics/index.ts @@ -0,0 +1,2 @@ +export * from './doctor' +export * from './format' diff --git a/packages/network-debugger/src/fork/devtool/index.test.ts b/packages/network-debugger/src/fork/devtool/index.test.ts index ca5a2bf..01cebc3 100644 --- a/packages/network-debugger/src/fork/devtool/index.test.ts +++ b/packages/network-debugger/src/fork/devtool/index.test.ts @@ -1,533 +1,371 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' - -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { - mockWsServerInstance, - mockWsSocketInstance, - mockOpen, - mockWsDebuggerInstance, - wsServerHandlers, - wsSocketHandlers, - wsDebuggerHandlers, - MockServer, - MockWebSocket -} = vi.hoisted(() => { - const wsServerHandlers = new Map void)[]>() - const wsSocketHandlers = new Map void)[]>() - const wsDebuggerHandlers = new Map void)[]>() - - const mockWsServerInstance = { - on: vi.fn((event: string, handler: (...args: unknown[]) => void) => { - if (!wsServerHandlers.has(event)) { - wsServerHandlers.set(event, []) +import { once } from 'node:events' +import { setTimeout as delay } from 'node:timers/promises' +import { afterEach, describe, expect, test } from 'vitest' +import { WebSocket } from 'ws' +import { + CDP_ERROR_CODES, + DevtoolServer, + DevtoolServerClosedError, + MAX_BUFFERED_EVENT_BYTES, + MAX_BUFFERED_EVENTS +} from './index' + +type JsonMessage = Record + +class ProtocolClient { + readonly socket: WebSocket + private readonly messages: JsonMessage[] = [] + private readonly waiters: Array<{ + predicate(message: JsonMessage): boolean + resolve(message: JsonMessage): void + reject(error: Error): void + timer: ReturnType + }> = [] + + private constructor(url: string) { + this.socket = new WebSocket(url) + this.socket.on('message', (raw) => { + const message = JSON.parse(raw.toString()) as JsonMessage + const waiterIndex = this.waiters.findIndex((waiter) => waiter.predicate(message)) + if (waiterIndex >= 0) { + const [waiter] = this.waiters.splice(waiterIndex, 1) + clearTimeout(waiter.timer) + waiter.resolve(message) + } else { + this.messages.push(message) } - wsServerHandlers.get(event)!.push(handler) - }), - close: vi.fn() - } - - const mockWsSocketInstance = { - on: vi.fn((event: string, handler: (...args: unknown[]) => void) => { - if (!wsSocketHandlers.has(event)) { - wsSocketHandlers.set(event, []) - } - wsSocketHandlers.get(event)!.push(handler) - }), - send: vi.fn(), - close: vi.fn() + }) } - const mockWsDebuggerInstance = { - on: vi.fn((event: string, handler: (...args: unknown[]) => void) => { - if (!wsDebuggerHandlers.has(event)) { - wsDebuggerHandlers.set(event, []) - } - wsDebuggerHandlers.get(event)!.push(handler) - }), - send: vi.fn(), - close: vi.fn() + static async connect(url: string) { + const client = new ProtocolClient(url) + await once(client.socket, 'open') + return client } - // 使用 class 语法创建 mock 构造函数 - class MockServer { - constructor() { - return mockWsServerInstance - } + send(message: unknown) { + this.socket.send(JSON.stringify(message)) } - class MockWebSocket { - constructor() { - return mockWsDebuggerInstance - } + sendRaw(message: string) { + this.socket.send(message) } - const mockOpen = vi.fn() - - return { - mockWsServerInstance, - mockWsSocketInstance, - mockOpen, - mockWsDebuggerInstance, - wsServerHandlers, - wsSocketHandlers, - wsDebuggerHandlers, - MockServer, - MockWebSocket + next( + predicate: (message: JsonMessage) => boolean = () => true, + timeoutMs = 2_000 + ): Promise { + const index = this.messages.findIndex(predicate) + if (index >= 0) return Promise.resolve(this.messages.splice(index, 1)[0]) + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + const waiterIndex = this.waiters.findIndex((waiter) => waiter.timer === timer) + if (waiterIndex >= 0) this.waiters.splice(waiterIndex, 1) + reject(new Error('Timed out waiting for a CDP message.')) + }, timeoutMs) + this.waiters.push({ predicate, resolve, reject, timer }) + }) } -}) -// Mock ws 模块 -vi.mock('ws', () => { - return { - Server: MockServer, - WebSocket: MockWebSocket + async close() { + if (this.socket.readyState === WebSocket.CLOSED) return + const closed = once(this.socket, 'close') + this.socket.close() + await closed } +} + +const servers = new Set() +const clients = new Set() + +async function createServer(options: Partial[0]> = {}) { + const server = new DevtoolServer({ port: 0, ...options }) + servers.add(server) + const target = await server.ready + return { server, target } +} + +async function connect(url: string) { + const client = await ProtocolClient.connect(url) + clients.add(client) + return client +} + +afterEach(async () => { + await Promise.all([...clients].map((client) => client.close().catch(() => undefined))) + clients.clear() + await Promise.all([...servers].map((server) => server.close())) + servers.clear() }) -// Mock open 模块 -vi.mock('open', () => { - return { - default: mockOpen, - apps: { - chrome: 'google-chrome' - } - } -}) +describe('Legacy discoverable CDP target', () => { + test('binds port 0 before publishing one consistent loopback target', async () => { + const server = new DevtoolServer({ port: 0 }) + servers.add(server) + expect(server.target).toBeUndefined() + + const target = await server.ready + const discovery = new URL(target.discoveryUrl) + expect(discovery.hostname).toBe('127.0.0.1') + expect(Number(discovery.port)).toBeGreaterThan(0) + expect(target.webSocketDebuggerUrl).toMatch( + new RegExp(`^ws://127\\.0\\.0\\.1:${discovery.port}/devtools/page/${target.id}$`) + ) + expect(server.target).toEqual(target) + + const list = await fetch(target.discoveryUrl).then((response) => response.json()) + const alias = await fetch(new URL('/json', target.discoveryUrl)).then((response) => + response.json() + ) + const version = await fetch(new URL('/json/version', target.discoveryUrl)).then((response) => + response.json() + ) + const protocol = await fetch(new URL('/json/protocol', target.discoveryUrl)).then((response) => + response.json() + ) + + expect(list).toEqual([target]) + expect(alias).toEqual([target]) + expect(version).toMatchObject({ + Browser: 'node-network-devtools/2', + 'Protocol-Version': '1.3', + webSocketDebuggerUrl: target.webSocketDebuggerUrl + }) + expect(protocol.version).toEqual({ major: '1', minor: '3' }) + expect(protocol.domains.map((domain: { domain: string }) => domain.domain)).toEqual( + expect.arrayContaining(['Network', 'Debugger', 'Runtime', 'Schema']) + ) -// Mock common 模块 -vi.mock('../../common', () => ({ - IS_DEV_MODE: false, - REMOTE_DEBUGGER_PORT: 9333 -})) - -// Mock utils 模块 -vi.mock('../../utils', () => ({ - log: vi.fn() -})) - -describe('fork/devtool/index.ts', () => { - beforeEach(() => { - vi.clearAllMocks() - wsServerHandlers.clear() - wsSocketHandlers.clear() - wsDebuggerHandlers.clear() + const notFound = await fetch(new URL('/not-a-target', target.discoveryUrl)) + expect(notFound.status).toBe(404) }) - afterEach(() => { - vi.restoreAllMocks() + test('accepts upgrades only on the published WebSocket path', async () => { + const { target } = await createServer() + const wrongUrl = new URL(target.webSocketDebuggerUrl) + wrongUrl.pathname = '/devtools/page/wrong-target' + const socket = new WebSocket(wrongUrl) + const outcome = Promise.race([ + once(socket, 'open').then(() => 'open'), + once(socket, 'error').then(() => 'error'), + once(socket, 'unexpected-response').then(() => 'rejected') + ]) + await expect(outcome).resolves.not.toBe('open') + socket.terminate() }) - describe('DevtoolServer 类', () => { - describe('构造函数', () => { - test('创建 WebSocket Server 并监听指定端口', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - expect(server).toBeDefined() - }) - - test('监听 listening 事件', async () => { - const { DevtoolServer } = await import('./index') - - new DevtoolServer({ port: 5271 }) - - expect(mockWsServerInstance.on).toHaveBeenCalledWith('listening', expect.any(Function)) - }) - - test('监听 connection 事件', async () => { - const { DevtoolServer } = await import('./index') - - new DevtoolServer({ port: 5271 }) - - expect(mockWsServerInstance.on).toHaveBeenCalledWith('connection', expect.any(Function)) - }) - - test('autoOpenDevtool 默认为 true', async () => { - const { DevtoolServer } = await import('./index') - - new DevtoolServer({ port: 5271 }) - - // 触发 listening 事件 - const listeningHandler = wsServerHandlers.get('listening')?.[0] - if (listeningHandler) { - listeningHandler() - } - - // 由于 autoOpenDevtool 默认为 true,应该调用 open - // 但由于 IS_DEV_MODE 被 mock 为 false,会尝试打开浏览器 - expect(mockOpen).toHaveBeenCalled() - }) - - test('autoOpenDevtool 为 false 时不自动打开', async () => { - vi.clearAllMocks() - wsServerHandlers.clear() - - const { DevtoolServer } = await import('./index') - - new DevtoolServer({ port: 5271, autoOpenDevtool: false }) - - // 触发 listening 事件 - const listeningHandler = wsServerHandlers.get('listening')?.[0] - if (listeningHandler) { - listeningHandler() - } - - // autoOpenDevtool 为 false,不应该调用 open - expect(mockOpen).not.toHaveBeenCalled() - }) - - test('onConnect 回调在连接时被调用', async () => { - const { DevtoolServer } = await import('./index') - const onConnect = vi.fn() - - new DevtoolServer({ port: 5271, onConnect }) - - // 触发 connection 事件 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - expect(onConnect).toHaveBeenCalled() - }) - - test('onClose 回调在连接关闭时被调用', async () => { - const { DevtoolServer } = await import('./index') - const onClose = vi.fn() - - new DevtoolServer({ port: 5271, onClose }) - - // 触发 connection 事件 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - // 触发 socket close 事件 - const closeHandler = wsSocketHandlers.get('close')?.[0] - if (closeHandler) { - closeHandler() - } + test('uses a parent-supplied stable target identity in discovery and WebSocket URLs', async () => { + const { target } = await createServer({ targetId: 'stable.parent-target_1' }) + expect(target.id).toBe('stable.parent-target_1') + expect(new URL(target.webSocketDebuggerUrl).pathname).toBe( + '/devtools/page/stable.parent-target_1' + ) + }) - expect(onClose).toHaveBeenCalled() - }) + test('single-casts same-id async command responses to their source clients', async () => { + const { server, target } = await createServer() + server.on(async (_error, message, context) => { + if (!message || !('method' in message) || message.method !== 'Test.echo' || !context) { + return false + } + const token = String(message.params?.token) + if (token === 'slow') await delay(30) + await context.result({ token }) + return true }) - describe('消息处理', () => { - test('接收到消息时通知所有监听器', async () => { - const { DevtoolServer } = await import('./index') - const listener = vi.fn() - - const server = new DevtoolServer({ port: 5271 }) - server.on(listener) + const first = await connect(target.webSocketDebuggerUrl) + const second = await connect(target.webSocketDebuggerUrl) + first.send({ id: 7, method: 'Test.echo', params: { token: 'slow' } }) + second.send({ id: 7, method: 'Test.echo', params: { token: 'fast' } }) - // 触发 connection 事件 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - // 触发 message 事件 - const messageHandler = wsSocketHandlers.get('message')?.[0] - const testMessage = { method: 'Network.enable', params: {} } - if (messageHandler) { - messageHandler(Buffer.from(JSON.stringify(testMessage))) - } - - expect(listener).toHaveBeenCalledWith(null, testMessage) - }) - - test('接收到错误时通知所有监听器', async () => { - const { DevtoolServer } = await import('./index') - const listener = vi.fn() - - const server = new DevtoolServer({ port: 5271 }) - server.on(listener) - - // 触发 connection 事件 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - // 触发 error 事件 - const errorHandler = wsSocketHandlers.get('error')?.[0] - const testError = new Error('WebSocket error') - if (errorHandler) { - errorHandler(testError) - } - - expect(listener).toHaveBeenCalledWith(testError) - }) + await expect(second.next((message) => message.id === 7)).resolves.toEqual({ + id: 7, + result: { token: 'fast' } }) - - describe('send 方法', () => { - test('发送消息到 WebSocket', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - // 触发 connection 事件以建立连接 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - const message = { method: 'Network.requestWillBeSent', params: { requestId: '1' } } - await server.send(message) - - expect(mockWsSocketInstance.send).toHaveBeenCalledWith(JSON.stringify(message)) - }) - - test('发送响应消息', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - // 触发 connection 事件 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - const response = { id: '1', result: { body: 'test' } } - await server.send(response) - - expect(mockWsSocketInstance.send).toHaveBeenCalledWith(JSON.stringify(response)) - }) - - test('发送错误响应消息', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - // 触发 connection 事件 - const connectionHandler = wsServerHandlers.get('connection')?.[0] - if (connectionHandler) { - connectionHandler(mockWsSocketInstance) - } - - const errorResponse = { id: '2', error: { code: -32601, message: 'Method not found' } } - await server.send(errorResponse) - - expect(mockWsSocketInstance.send).toHaveBeenCalledWith(JSON.stringify(errorResponse)) - }) + await expect(first.next((message) => message.id === 7)).resolves.toEqual({ + id: 7, + result: { token: 'slow' } }) + }) - describe('close 方法', () => { - test('关闭 WebSocket Server', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - server.close() - - expect(mockWsServerInstance.close).toHaveBeenCalled() - }) - - test('关闭浏览器进程(如果存在)', async () => { - const { DevtoolServer } = await import('./index') - - const mockBrowserProcess = { kill: vi.fn() } - mockOpen.mockResolvedValue(mockBrowserProcess) - - const server = new DevtoolServer({ port: 5271 }) - - // 触发 listening 事件以打开浏览器 - const listeningHandler = wsServerHandlers.get('listening')?.[0] - if (listeningHandler) { - listeningHandler() - } - - // 等待 open 完成 - await vi.waitFor(() => { - expect(mockOpen).toHaveBeenCalled() - }) - - // 等待异步操作完成 - await new Promise((resolve) => setTimeout(resolve, 0)) - - server.close() - - expect(mockWsServerInstance.close).toHaveBeenCalled() - }) + test('preserves legacy devtool.send response routing across async handler work', async () => { + const { server, target } = await createServer() + server.on(async (_error, message) => { + if (!message || !('method' in message) || message.method !== 'Test.legacyReply') return false + await delay(Number(message.params?.delay ?? 0)) + await server.send({ id: message.id!, result: { owner: message.params?.owner } }) + return true }) + const first = await connect(target.webSocketDebuggerUrl) + const second = await connect(target.webSocketDebuggerUrl) - describe('open 方法', () => { - test('在开发模式下不打开浏览器', async () => { - // 重新 mock common 模块为开发模式 - vi.doMock('../../common', () => ({ - IS_DEV_MODE: true, - REMOTE_DEBUGGER_PORT: 9333 - })) - - vi.clearAllMocks() - - // 重新导入模块 - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271, autoOpenDevtool: false }) - await server.open() - - // 在开发模式下不应该调用 open - // 注意:由于模块缓存,这个测试可能需要特殊处理 - }) - - test('在非开发模式下打开 Chrome DevTools', async () => { - vi.clearAllMocks() + first.send({ id: 'same', method: 'Test.legacyReply', params: { owner: 'first', delay: 20 } }) + second.send({ id: 'same', method: 'Test.legacyReply', params: { owner: 'second' } }) - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271, autoOpenDevtool: false }) - await server.open() - - expect(mockOpen).toHaveBeenCalledWith( - expect.stringContaining('devtools://devtools/bundled/inspector.html'), - expect.objectContaining({ - app: expect.objectContaining({ - name: 'google-chrome' - }), - wait: true - }) - ) - }) - - test('打开失败时输出警告但不抛出错误', async () => { - vi.clearAllMocks() - - mockOpen.mockRejectedValue(new Error('Failed to open')) - const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) - - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271, autoOpenDevtool: false }) - await server.open() - - expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining('Open devtools failed')) - - consoleWarnSpy.mockRestore() - }) + expect(await second.next((message) => message.id === 'same')).toEqual({ + id: 'same', + result: { owner: 'second' } }) + expect(await first.next((message) => message.id === 'same')).toEqual({ + id: 'same', + result: { owner: 'first' } + }) + }) - describe('继承 BaseDevtoolServer', () => { - test('继承 timestamp 属性', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - expect(server.timestamp).toBe(0) - }) - - test('继承 getTimestamp 方法', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - expect(typeof server.getTimestamp).toBe('function') - expect(typeof server.getTimestamp()).toBe('number') - }) - - test('继承 updateTimestamp 方法', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - expect(typeof server.updateTimestamp).toBe('function') - }) - - test('继承 on 方法', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - const listener = vi.fn() - - server.on(listener) - - expect(server.listeners).toContain(listener) - }) + test('broadcasts events to every connected frontend', async () => { + const { server, target } = await createServer() + const first = await connect(target.webSocketDebuggerUrl) + const second = await connect(target.webSocketDebuggerUrl) + first.send({ id: 1, method: 'Network.enable' }) + second.send({ id: 2, method: 'Network.enable' }) + await first.next((message) => message.id === 1) + await second.next((message) => message.id === 2) + const event = { + method: 'Network.requestWillBeSent', + params: { requestId: 'broadcast-request' } + } - test('继承 listeners 属性', async () => { - const { DevtoolServer } = await import('./index') + await server.send(event) + await expect(first.next((message) => message.method === event.method)).resolves.toEqual(event) + await expect(second.next((message) => message.method === event.method)).resolves.toEqual(event) + }) - const server = new DevtoolServer({ port: 5271 }) + test('sends Network events only to clients that enabled the domain', async () => { + const { server, target } = await createServer() + const enabled = await connect(target.webSocketDebuggerUrl) + const disabled = await connect(target.webSocketDebuggerUrl) + enabled.send({ id: 'enable', method: 'Network.enable' }) + await enabled.next((message) => message.id === 'enable') - expect(Array.isArray(server.listeners)).toBe(true) - }) + await server.send({ + method: 'Network.loadingFinished', + params: { requestId: 'enabled-only' } }) + expect( + await enabled.next((message) => message.params?.requestId === 'enabled-only') + ).toMatchObject({ + method: 'Network.loadingFinished' + }) + await expect( + disabled.next((message) => message.params?.requestId === 'enabled-only', 100) + ).rejects.toThrow('Timed out') + + enabled.send({ id: 'disable', method: 'Network.disable' }) + await enabled.next((message) => message.id === 'disable') + await server.send({ method: 'Network.loadingFinished', params: { requestId: 'disabled-now' } }) + await expect( + enabled.next((message) => message.params?.requestId === 'disabled-now', 100) + ).rejects.toThrow('Timed out') + }, 6_000) + + test('returns standard results/errors for zero, string, unknown, invalid and thrown commands', async () => { + const { server, target } = await createServer() + server.on(async (_error, message, context) => { + if (!message || !('method' in message) || !context) return false + if (message.method === 'Test.fail') throw new Error('handler exploded') + if (message.method === 'Test.applicationError') { + await context.error(CDP_ERROR_CODES.SERVER_ERROR, 'request body unavailable') + return true + } + return false + }) + const client = await connect(target.webSocketDebuggerUrl) - describe('IDevtoolServer 接口实现', () => { - test('实现 send 方法', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271 }) - - expect(typeof server.send).toBe('function') - }) - - test('实现 close 方法', async () => { - const { DevtoolServer } = await import('./index') + client.send({ id: 0, method: 'Network.enable', params: {} }) + expect(await client.next((message) => message.id === 0)).toEqual({ id: 0, result: {} }) - const server = new DevtoolServer({ port: 5271 }) + client.send({ id: 'debugger', method: 'Debugger.enable', params: {} }) + expect(await client.next((message) => message.id === 'debugger')).toMatchObject({ + id: 'debugger', + result: { debuggerId: target.id } + }) - expect(typeof server.close).toBe('function') - }) + client.send({ id: 2, method: 'Missing.command', params: {} }) + expect(await client.next((message) => message.id === 2)).toMatchObject({ + id: 2, + error: { code: CDP_ERROR_CODES.METHOD_NOT_FOUND } + }) - test('实现 open 方法', async () => { - const { DevtoolServer } = await import('./index') + client.send({ id: 3, method: 'Network.enable', params: [] }) + expect(await client.next((message) => message.id === 3)).toMatchObject({ + id: 3, + error: { code: CDP_ERROR_CODES.INVALID_PARAMS } + }) - const server = new DevtoolServer({ port: 5271 }) + client.send({ id: 4, method: 'Test.fail' }) + expect(await client.next((message) => message.id === 4)).toMatchObject({ + id: 4, + error: { code: CDP_ERROR_CODES.INTERNAL_ERROR, message: 'handler exploded' } + }) - expect(typeof server.open).toBe('function') - }) + client.send({ id: 5, method: 'Test.applicationError' }) + expect(await client.next((message) => message.id === 5)).toMatchObject({ + id: 5, + error: { code: CDP_ERROR_CODES.SERVER_ERROR, message: 'request body unavailable' } }) }) - describe('DevtoolServerInitOptions 接口', () => { - test('port 是必需的', async () => { - const { DevtoolServer } = await import('./index') + test('survives malformed JSON and continues serving commands', async () => { + const { target } = await createServer() + const client = await connect(target.webSocketDebuggerUrl) + client.sendRaw('{ definitely not json') - // 这个测试主要验证类型,运行时只需确保可以创建实例 - const server = new DevtoolServer({ port: 5271 }) - expect(server).toBeDefined() + expect(await client.next((message) => message.id === null)).toMatchObject({ + error: { code: CDP_ERROR_CODES.INVALID_REQUEST } }) - test('autoOpenDevtool 是可选的', async () => { - const { DevtoolServer } = await import('./index') - - const server1 = new DevtoolServer({ port: 5271 }) - const server2 = new DevtoolServer({ port: 5272, autoOpenDevtool: true }) - const server3 = new DevtoolServer({ port: 5273, autoOpenDevtool: false }) - - expect(server1).toBeDefined() - expect(server2).toBeDefined() - expect(server3).toBeDefined() - }) + client.send({ id: 9, method: 'Runtime.enable' }) + expect(await client.next((message) => message.id === 9)).toEqual({ id: 9, result: {} }) + }) - test('onConnect 是可选的', async () => { - const { DevtoolServer } = await import('./index') + test('bounds no-client history and replays it after enable on reconnect', async () => { + const { server, target } = await createServer() + for (let index = 0; index < MAX_BUFFERED_EVENTS + 50; index += 1) { + await server.send({ + method: 'Network.requestWillBeSent', + params: { requestId: `request-${index}` } + }) + } + expect(server.bufferedEventCount).toBe(MAX_BUFFERED_EVENTS) + expect(server.bufferedEventBytes).toBeLessThanOrEqual(MAX_BUFFERED_EVENT_BYTES) + expect(server.clientCount).toBe(0) + + const first = await connect(target.webSocketDebuggerUrl) + first.send({ id: 1, method: 'Network.enable' }) + expect(await first.next((message) => message.id === 1)).toEqual({ id: 1, result: {} }) + expect(await first.next((message) => message.params?.requestId === 'request-50')).toMatchObject( + { + method: 'Network.requestWillBeSent' + } + ) + await first.close() + clients.delete(first) - const server = new DevtoolServer({ port: 5271, onConnect: () => {} }) - expect(server).toBeDefined() + await server.send({ + method: 'Network.loadingFinished', + params: { requestId: 'after-refresh' } }) - - test('onClose 是可选的', async () => { - const { DevtoolServer } = await import('./index') - - const server = new DevtoolServer({ port: 5271, onClose: () => {} }) - expect(server).toBeDefined() + const refreshed = await connect(target.webSocketDebuggerUrl) + refreshed.send({ id: 'enable-again', method: 'Network.enable' }) + expect(await refreshed.next((message) => message.id === 'enable-again')).toEqual({ + id: 'enable-again', + result: {} }) + expect( + await refreshed.next((message) => message.params?.requestId === 'after-refresh') + ).toMatchObject({ method: 'Network.loadingFinished' }) }) - describe('模块导出', () => { - test('导出 DevtoolServer 类', async () => { - const module = await import('./index') - expect(module.DevtoolServer).toBeDefined() - }) + test('close rejects an explicit pending client waiter, clears history and releases the port', async () => { + const { server, target } = await createServer() + await server.send({ method: 'Network.loadingFinished', params: { requestId: 'buffered' } }) + const pending = server.waitForClient() + const discoveryUrl = target.discoveryUrl - test('重新导出 type.ts 中的类型', async () => { - const module = await import('./index') - // BaseDevtoolServer 应该通过 export * from './type' 导出 - expect(module.BaseDevtoolServer).toBeDefined() - }) + await server.close() + await expect(pending).rejects.toBeInstanceOf(DevtoolServerClosedError) + expect(server.bufferedEventCount).toBe(0) + await expect(fetch(discoveryUrl)).rejects.toThrow() }) }) diff --git a/packages/network-debugger/src/fork/devtool/index.ts b/packages/network-debugger/src/fork/devtool/index.ts index 62c2fbb..f2d13fa 100644 --- a/packages/network-debugger/src/fork/devtool/index.ts +++ b/packages/network-debugger/src/fork/devtool/index.ts @@ -1,141 +1,737 @@ -import { Server, WebSocket } from 'ws' -import open, { apps } from 'open' -import { type ChildProcess } from 'child_process' -import { IS_DEV_MODE } from '../../common' -import { REMOTE_DEBUGGER_PORT } from '../../common' +import { AsyncLocalStorage } from 'node:async_hooks' +import { randomUUID } from 'node:crypto' +import { createServer, type Server as HttpServer, type ServerResponse } from 'node:http' +import type { AddressInfo } from 'node:net' +import type { Duplex } from 'node:stream' +import { WebSocket, WebSocketServer, type RawData } from 'ws' +import type { DevtoolsTarget } from '../../adapters/types' +import type { CdpId } from '../../legacy-bridge/contracts' import { log } from '../../utils' -import { BaseDevtoolServer, DevtoolMessage } from './type' +import { + BaseDevtoolServer, + type DevtoolCommandContext, + type DevtoolErrorResponse, + type DevtoolMessage, + type DevtoolMessageRequest, + type DevtoolMessageResponse +} from './type' + +const LOOPBACK_HOST = '127.0.0.1' +const PROTOCOL_VERSION = '1.3' +export const MAX_BUFFERED_EVENTS = 1_000 +export const MAX_BUFFERED_EVENT_BYTES = 10 * 1024 * 1024 + +export const CDP_ERROR_CODES = Object.freeze({ + INVALID_REQUEST: -32600, + METHOD_NOT_FOUND: -32601, + INVALID_PARAMS: -32602, + INTERNAL_ERROR: -32603, + SERVER_ERROR: -32000 +}) export interface DevtoolServerInitOptions { + /** Bind port. `0` asks the operating system for a free port. */ port: number + /** Only 127.0.0.1 is accepted; the endpoint is never exposed remotely. */ + host?: '127.0.0.1' + /** Stable identity supplied by the parent so a restarted child keeps its URL. */ + targetId?: string + title?: string + /** @deprecated Browser launching is owned by the caller. */ autoOpenDevtool?: boolean onConnect?: () => void onClose?: () => void } export interface IDevtoolServer { - send(message: DevtoolMessage): Promise - close(): void - open(): Promise + readonly ready?: Promise + readonly target?: DevtoolsTarget + send(message: DevtoolMessage, client?: WebSocket): Promise + close(): Promise | void + open(): Promise +} + +export class DevtoolServerClosedError extends Error { + readonly code = 'NND_LEGACY_TARGET_CLOSED' + + constructor() { + super('Legacy DevTools target closed before a frontend connection became available.') + this.name = 'DevtoolServerClosedError' + } } + export * from './type' +interface CommandScope { + client: WebSocket + id: CdpId + responded: boolean +} + +interface ClientWaiter { + resolve(client: WebSocket): void + reject(error: Error): void +} + +interface BufferedEvent { + sequence: number + method: string + serialized: string + bytes: number +} + +type BuiltinResult = Record | void + +/** + * A loopback-only, discoverable CDP target used by the Legacy adapter. + * Events fan out to every frontend while command responses are single-cast. + */ export class DevtoolServer extends BaseDevtoolServer implements IDevtoolServer { - private server: Server - private port: number - private browser: ChildProcess | null = null - private socket: Promise<[WebSocket]> + readonly ready: Promise - constructor(props: DevtoolServerInitOptions) { + private readonly host = LOOPBACK_HOST + private readonly port: number + private readonly title: string + private readonly targetId: string + private readonly webSocketPath: string + private readonly onConnect?: () => void + private readonly onClose?: () => void + private readonly commandScope = new AsyncLocalStorage() + private readonly clientWaiters = new Set() + private readonly networkEnabledClients = new WeakSet() + private readonly networkReplayingClients = new WeakSet() + private readonly networkReplayCursor = new WeakMap() + private readonly builtinCommands = this.createBuiltinCommands() + private readonly eventHistory: BufferedEvent[] = [] + + private httpServer?: HttpServer + private webSocketServer?: WebSocketServer + private startPromise?: Promise + private closePromise?: Promise + private rejectStart?: (error: Error) => void + private _target?: DevtoolsTarget + private closed = false + private eventSequence = 0 + private eventHistoryBytes = 0 + + constructor(options: DevtoolServerInitOptions) { super() - const { port, autoOpenDevtool = true, onConnect, onClose } = props + const port = options.port ?? 0 + if (!Number.isInteger(port) || port < 0 || port > 65_535) { + throw new RangeError(`Invalid Legacy target port: ${String(port)}`) + } + if (options.host !== undefined && options.host !== LOOPBACK_HOST) { + throw new Error(`Legacy target host must be ${LOOPBACK_HOST}.`) + } + if (options.targetId !== undefined && !/^[A-Za-z0-9._-]+$/.test(options.targetId)) { + throw new Error( + 'Legacy targetId may contain only letters, numbers, dot, underscore and dash.' + ) + } + this.port = port - this.server = new Server({ port }) - const { server } = this + this.targetId = options.targetId ?? `node-network-devtools-${randomUUID()}` + this.title = options.title ?? 'Node Network Devtools (Legacy)' + this.webSocketPath = `/devtools/page/${this.targetId}` + this.onConnect = options.onConnect + this.onClose = options.onClose + this.ready = this.open() + } - server.on('listening', () => { - log(`devtool server is listening on port ${port}`) - autoOpenDevtool && this.open() + get target(): DevtoolsTarget | undefined { + return this._target + } + + get clientCount(): number { + return this.webSocketServer?.clients.size ?? 0 + } + + get bufferedEventCount(): number { + return this.eventHistory.length + } + + get bufferedEventBytes(): number { + return this.eventHistoryBytes + } + + public open(): Promise { + if (this.startPromise) return this.startPromise + if (this.closed) return Promise.reject(new DevtoolServerClosedError()) + + const webSocketServer = new WebSocketServer({ noServer: true }) + const httpServer = createServer((request, response) => { + this.handleHttpRequest(request.url, response) }) + this.webSocketServer = webSocketServer + this.httpServer = httpServer - this.socket = new Promise<[WebSocket]>((resolve) => { - server.on('connection', (socket) => { - onConnect?.() - this.socket.then((l) => { - l[0] = socket - }) - log('devtool connected') - socket.on('message', (message) => { - const msg = JSON.parse(message.toString()) - this.listeners.forEach((listener) => listener(null, msg)) - }) - socket.on('close', () => { - log('devtool closed') - onClose?.() - }) - socket.on('error', (error) => { - this.listeners.forEach((listener) => listener(error)) - }) - resolve([socket] satisfies [WebSocket]) + httpServer.on('upgrade', (request, socket, head) => { + if (this.getPathname(request.url) !== this.webSocketPath) { + this.rejectUpgrade(socket) + return + } + webSocketServer.handleUpgrade(request, socket, head, (client) => { + webSocketServer.emit('connection', client, request) }) }) + + webSocketServer.on('connection', (client) => this.attachClient(client)) + webSocketServer.on('error', (error) => this.notifyError(error)) + + this.startPromise = new Promise((resolve, reject) => { + let settled = false + this.rejectStart = (error) => { + if (settled) return + settled = true + reject(error) + } + + httpServer.once('listening', () => { + if (settled) return + const address = httpServer.address() + if (!address || typeof address === 'string') { + const error = new Error('Legacy target did not expose a TCP address.') + settled = true + reject(error) + return + } + const target = this.createTarget(address) + this._target = target + settled = true + log(`legacy target is listening at ${target.discoveryUrl}`) + resolve(target) + }) + + httpServer.on('error', (error) => { + this.notifyError(error) + this.rejectStart?.(error) + }) + + try { + httpServer.listen(this.port, this.host) + } catch (error) { + const normalized = error instanceof Error ? error : new Error(String(error)) + this.notifyError(normalized) + this.rejectStart?.(normalized) + } + }) + + return this.startPromise } - public async open() { - const url = `devtools://devtools/bundled/inspector.html?ws=127.0.0.1:${this.port}` - try { - if (IS_DEV_MODE) { - log(`In dev mode, open chrome devtool manually: ${url}`) + /** Broadcast events; route responses only to their source connection. */ + public async send(message: DevtoolMessage, client?: WebSocket): Promise { + if (this.closed) throw new DevtoolServerClosedError() + + if (this.isResponse(message)) { + const scope = this.commandScope.getStore() + if (client) { + if (scope && client === scope.client && message.id === scope.id) scope.responded = true + await this.sendJson(client, message) + return + } + if (scope && message.id === scope.id) { + scope.responded = true + await this.sendJson(scope.client, message) return } - const pro = await open(url, { - app: { - name: apps.chrome, - arguments: [ - process.platform !== 'darwin' ? `--remote-debugging-port=${REMOTE_DEBUGGER_PORT}` : '' - ] - }, - wait: true + const clients = this.liveClients() + if (clients.length !== 1) { + throw new Error( + `Cannot route CDP response ${String(message.id)} without its source client.` + ) + } + await this.sendJson(clients[0], message) + return + } + + const serialized = JSON.stringify(message) + const sequence = this.rememberEvent(message.method, serialized) + const clients = this.liveClients().filter( + (connectedClient) => + !message.method.startsWith('Network.') || + (this.networkEnabledClients.has(connectedClient) && + !this.networkReplayingClients.has(connectedClient)) + ) + await Promise.all( + clients.map(async (connectedClient) => { + await this.sendSerialized(connectedClient, serialized) + if (message.method.startsWith('Network.') && sequence !== undefined) { + this.networkReplayCursor.set(connectedClient, sequence) + } }) + ) + } - cdpConnect: if (process.platform !== 'darwin') { - const json = await new Promise<{ webSocketDebuggerUrl: string; id: string }[]>( - (resolve) => { - let count = 0 - let stop = setInterval(async () => { - if (count > 5) { - clearInterval(stop) - resolve([]) - } - try { - count++ - resolve((await fetch(`http://127.0.0.1:${REMOTE_DEBUGGER_PORT}/json`)).json()) - clearInterval(stop) - } catch { - // ignore - } - }, 500) - } - ) - const [data] = json - if (!data) { - break cdpConnect + /** Explicit connection wait primitive; event delivery itself never waits. */ + public waitForClient(): Promise { + const client = this.liveClients()[0] + if (client) return Promise.resolve(client) + if (this.closed) return Promise.reject(new DevtoolServerClosedError()) + return new Promise((resolve, reject) => { + this.clientWaiters.add({ resolve, reject }) + }) + } + + public close(): Promise { + if (this.closePromise) return this.closePromise + this.closed = true + const closedError = new DevtoolServerClosedError() + this.rejectStart?.(closedError) + this.rejectClientWaiters(closedError) + + const webSocketServer = this.webSocketServer + const httpServer = this.httpServer + this.webSocketServer = undefined + this.httpServer = undefined + this._target = undefined + this.eventHistory.splice(0) + this.eventHistoryBytes = 0 + + this.closePromise = Promise.all([ + new Promise((resolve) => { + if (!webSocketServer) { + resolve() + return } - const { id, webSocketDebuggerUrl } = data - const debuggerWs = new WebSocket(webSocketDebuggerUrl) - - debuggerWs.on('open', () => { - const navigateCommand = { - id, - method: 'Page.navigate', - params: { - url - } - } - debuggerWs.send(JSON.stringify(navigateCommand)) - debuggerWs.close() - }) - } + for (const client of webSocketServer.clients) client.terminate() + webSocketServer.close(() => resolve()) + }), + new Promise((resolve) => { + if (!httpServer) { + resolve() + return + } + httpServer.close(() => resolve()) + httpServer.closeAllConnections?.() + }) + ]).then(() => undefined) + + return this.closePromise + } + + private createTarget(address: AddressInfo): DevtoolsTarget { + const authority = `${this.host}:${address.port}` + const webSocketDebuggerUrl = `ws://${authority}${this.webSocketPath}` + const frontendQuery = `${authority}${this.webSocketPath}` + return { + id: this.targetId, + title: this.title, + type: 'node', + url: process.argv[1] ? `file://${process.argv[1]}` : '', + webSocketDebuggerUrl, + devtoolsFrontendUrl: `devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=${frontendQuery}`, + devtoolsFrontendUrlCompat: `devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=${frontendQuery}`, + discoveryUrl: `http://${authority}/json/list` + } + } - log('opened in chrome or click here to open chrome devtool: ', url) - this.browser = pro + private handleHttpRequest(rawUrl: string | undefined, response: ServerResponse) { + const pathname = this.getPathname(rawUrl) + if (pathname === '/json' || pathname === '/json/list') { + this.writeJson(response, this._target ? [this._target] : []) return - } catch (error) { - console.warn( - "Open devtools failed, but don't worry, you can open it in browser(Chrome or Edge) manually: " + - url + } + if (pathname === '/json/version') { + this.writeJson(response, { + Browser: 'node-network-devtools/2', + 'Protocol-Version': PROTOCOL_VERSION, + 'User-Agent': `Node.js/${process.version}`, + 'V8-Version': process.versions.v8, + webSocketDebuggerUrl: this._target?.webSocketDebuggerUrl + }) + return + } + if (pathname === '/json/protocol') { + this.writeJson(response, LEGACY_CDP_PROTOCOL) + return + } + + response.writeHead(404, { + 'Content-Type': 'application/json; charset=utf-8', + 'Cache-Control': 'no-store' + }) + response.end(JSON.stringify({ error: 'Not Found' })) + } + + private writeJson(response: ServerResponse, value: unknown) { + response.writeHead(200, { + 'Content-Type': 'application/json; charset=utf-8', + 'Cache-Control': 'no-store', + 'Access-Control-Allow-Origin': '*' + }) + response.end(JSON.stringify(value)) + } + + private getPathname(rawUrl: string | undefined): string | undefined { + if (!rawUrl) return undefined + try { + return new URL(rawUrl, `http://${this.host}`).pathname + } catch { + return undefined + } + } + + private rejectUpgrade(socket: Duplex) { + if (socket.writable) { + socket.write('HTTP/1.1 404 Not Found\r\nConnection: close\r\nContent-Length: 0\r\n\r\n') + } + socket.destroy() + } + + private attachClient(client: WebSocket) { + const waiters = [...this.clientWaiters] + this.clientWaiters.clear() + waiters.forEach((waiter) => waiter.resolve(client)) + this.onConnect?.() + log('devtool connected') + + client.on('message', (data) => { + void this.handleClientMessage(client, data).catch((error) => this.notifyError(error)) + }) + client.on('close', () => { + this.networkEnabledClients.delete(client) + this.networkReplayingClients.delete(client) + this.networkReplayCursor.delete(client) + log('devtool closed') + this.onClose?.() + }) + client.on('error', (error) => this.notifyError(error)) + } + + private async handleClientMessage(client: WebSocket, data: RawData): Promise { + let parsed: unknown + try { + parsed = JSON.parse(data.toString()) + } catch { + await this.sendProtocolError( + client, + null, + CDP_ERROR_CODES.INVALID_REQUEST, + 'Invalid CDP message: expected JSON object.' ) + return + } + + const candidate = parsed as Partial | null + const id = candidate && this.isCdpId(candidate.id) ? candidate.id : null + if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) { + await this.sendProtocolError( + client, + id, + CDP_ERROR_CODES.INVALID_REQUEST, + 'Invalid CDP request.' + ) + return + } + if (!this.isCdpId(candidate.id) || typeof candidate.method !== 'string' || !candidate.method) { + await this.sendProtocolError( + client, + id, + CDP_ERROR_CODES.INVALID_REQUEST, + 'CDP commands require a number|string id and non-empty method.' + ) + return + } + if ( + candidate.params !== undefined && + (candidate.params === null || + typeof candidate.params !== 'object' || + Array.isArray(candidate.params)) + ) { + await this.sendProtocolError( + client, + candidate.id, + CDP_ERROR_CODES.INVALID_PARAMS, + 'CDP params must be an object.' + ) + return + } + + const request: DevtoolMessageRequest & { id: CdpId } = { + id: candidate.id, + method: candidate.method, + params: candidate.params ?? {} + } + const scope: CommandScope = { client, id: candidate.id, responded: false } + + await this.commandScope.run(scope, async () => { + const context = this.createCommandContext(scope, request) + if (request.method === 'Network.enable') { + await context.result({}) + this.networkEnabledClients.add(client) + this.networkReplayingClients.add(client) + try { + await this.replayNetworkHistory(client) + } finally { + this.networkReplayingClients.delete(client) + } + return + } + if (request.method === 'Network.disable') { + await context.result({}) + this.networkEnabledClients.delete(client) + this.networkReplayingClients.delete(client) + return + } + const builtin = this.builtinCommands.get(request.method) + if (builtin) { + try { + await context.result((await builtin(request.params ?? {})) ?? {}) + } catch (error) { + await context.error( + CDP_ERROR_CODES.INTERNAL_ERROR, + error instanceof Error ? error.message : String(error) + ) + } + return + } + + let handled = false + try { + for (const listener of this.listeners) { + const result = await listener(null, request, context) + if (result === true) handled = true + } + } catch (error) { + if (!scope.responded) { + await context.error( + CDP_ERROR_CODES.INTERNAL_ERROR, + error instanceof Error ? error.message : String(error) + ) + } + return + } + + if (scope.responded) return + if (!handled) { + await context.error(CDP_ERROR_CODES.METHOD_NOT_FOUND, `Method not found: ${request.method}`) + return + } + await context.result({}) + }) + } + + private createCommandContext( + scope: CommandScope, + request: DevtoolMessageRequest & { id: CdpId } + ): DevtoolCommandContext { + const reply = async (message: DevtoolMessageResponse | DevtoolErrorResponse) => { + if (scope.responded) return + scope.responded = true + await this.sendJson(scope.client, { ...message, id: scope.id }) + } + return { + client: scope.client, + id: scope.id, + method: request.method, + params: request.params ?? {}, + reply, + result: (result: unknown = {}) => reply({ id: scope.id, result }), + error: (code, message, data) => + reply({ + id: scope.id, + error: { code, message, ...(data === undefined ? {} : { data }) } + }) } } - public close() { - this.server.close() - this.browser && this.browser.kill() + private createBuiltinCommands(): Map< + string, + (params: Record) => BuiltinResult | Promise + > { + const noopMethods = [ + 'Network.setCacheDisabled', + 'Network.setBypassServiceWorker', + 'Network.setExtraHTTPHeaders', + 'Network.setAttachDebugStack', + 'Network.emulateNetworkConditions', + 'Network.emulateNetworkConditionsByRule', + 'Network.overrideNetworkState', + 'Network.setBlockedURLs', + 'Network.clearAcceptedEncodingsOverride', + 'Debugger.disable', + 'Debugger.setPauseOnExceptions', + 'Debugger.setAsyncCallStackDepth', + 'Debugger.setBlackboxPatterns', + 'Runtime.enable', + 'Runtime.disable', + 'Runtime.runIfWaitingForDebugger', + 'Console.enable', + 'Console.disable', + 'Log.enable', + 'Log.disable', + 'Profiler.enable', + 'Profiler.disable', + 'HeapProfiler.enable', + 'HeapProfiler.disable' + ] + const commands = new Map BuiltinResult>( + noopMethods.map((method) => [method, () => ({})]) + ) + commands.set('Network.emulateNetworkConditionsByRule', () => ({ ruleIds: [] })) + commands.set('Debugger.enable', () => ({ debuggerId: this.targetId })) + commands.set('Schema.getDomains', () => ({ + domains: LEGACY_CDP_PROTOCOL.domains.map(({ domain, version }) => ({ name: domain, version })) + })) + return commands + } + + private isResponse( + message: DevtoolMessage + ): message is DevtoolMessageResponse | DevtoolErrorResponse { + return ( + typeof message === 'object' && + message !== null && + 'id' in message && + ('result' in message || 'error' in message) + ) } - async send(message: DevtoolMessage) { - const [socket] = await this.socket - return socket.send(JSON.stringify(message)) + private isCdpId(value: unknown): value is CdpId { + return typeof value === 'string' || (typeof value === 'number' && Number.isFinite(value)) + } + + private liveClients(): WebSocket[] { + return [...(this.webSocketServer?.clients ?? [])].filter( + (client) => client.readyState === WebSocket.OPEN + ) + } + + private rejectClientWaiters(error: Error) { + const waiters = [...this.clientWaiters] + this.clientWaiters.clear() + waiters.forEach((waiter) => waiter.reject(error)) + } + + private async sendProtocolError( + client: WebSocket, + id: CdpId | null, + code: number, + message: string, + data?: unknown + ) { + await this.sendJson(client, { + id, + error: { code, message, ...(data === undefined ? {} : { data }) } + }) + } + + private sendJson(client: WebSocket, message: DevtoolMessage): Promise { + return this.sendSerialized(client, JSON.stringify(message)) + } + + private sendSerialized(client: WebSocket, serialized: string): Promise { + if (client.readyState !== WebSocket.OPEN) { + return Promise.reject(new Error('DevTools frontend connection is not open.')) + } + return new Promise((resolve, reject) => { + client.send(serialized, (error) => { + if (error) reject(error) + else resolve() + }) + }) + } + + private rememberEvent(method: string, serialized: string): number | undefined { + const bytes = Buffer.byteLength(serialized) + if (bytes > MAX_BUFFERED_EVENT_BYTES) return undefined + const sequence = ++this.eventSequence + this.eventHistory.push({ + sequence, + method, + serialized, + bytes + }) + this.eventHistoryBytes += bytes + + while ( + this.eventHistory.length > MAX_BUFFERED_EVENTS || + this.eventHistoryBytes > MAX_BUFFERED_EVENT_BYTES + ) { + const removed = this.eventHistory.shift() + if (removed) this.eventHistoryBytes -= removed.bytes + } + return sequence + } + + private async replayNetworkHistory(client: WebSocket) { + while (client.readyState === WebSocket.OPEN) { + const cursor = this.networkReplayCursor.get(client) ?? 0 + const snapshot = this.eventHistory.filter( + (event) => event.sequence > cursor && event.method.startsWith('Network.') + ) + if (snapshot.length === 0) return + for (const event of snapshot) { + await this.sendSerialized(client, event.serialized) + this.networkReplayCursor.set(client, event.sequence) + } + } + } + + private notifyError(error: unknown) { + for (const listener of this.listeners) { + void Promise.resolve(listener(error)).catch(() => undefined) + } } } + +const LEGACY_CDP_PROTOCOL = Object.freeze({ + version: { major: '1', minor: '3' }, + domains: [ + { + domain: 'Network', + version: '1.3', + commands: [ + { name: 'enable' }, + { name: 'disable' }, + { name: 'setAttachDebugStack' }, + { + name: 'emulateNetworkConditionsByRule', + returns: [{ name: 'ruleIds', type: 'array', items: { type: 'string' } }] + }, + { name: 'overrideNetworkState' }, + { name: 'clearAcceptedEncodingsOverride' }, + { + name: 'getResponseBody', + parameters: [{ name: 'requestId', type: 'string' }], + returns: [ + { name: 'body', type: 'string' }, + { name: 'base64Encoded', type: 'boolean' } + ] + } + ], + events: [ + { name: 'requestWillBeSent' }, + { name: 'responseReceived' }, + { name: 'dataReceived' }, + { name: 'loadingFinished' }, + { name: 'loadingFailed' }, + { name: 'eventSourceMessageReceived' }, + { name: 'webSocketCreated' }, + { name: 'webSocketWillSendHandshakeRequest' }, + { name: 'webSocketHandshakeResponseReceived' }, + { name: 'webSocketFrameSent' }, + { name: 'webSocketFrameReceived' }, + { name: 'webSocketClosed' } + ] + }, + { + domain: 'Debugger', + version: '1.3', + commands: [ + { name: 'enable' }, + { name: 'disable' }, + { + name: 'getScriptSource', + parameters: [{ name: 'scriptId', type: 'string' }], + returns: [{ name: 'scriptSource', type: 'string' }] + } + ], + events: [{ name: 'scriptParsed' }] + }, + { domain: 'Runtime', version: '1.3', commands: [{ name: 'enable' }, { name: 'disable' }] }, + { domain: 'Schema', version: '1.3', commands: [{ name: 'getDomains' }] } + ] +}) diff --git a/packages/network-debugger/src/fork/devtool/type.ts b/packages/network-debugger/src/fork/devtool/type.ts index c39c2a4..f55257d 100644 --- a/packages/network-debugger/src/fork/devtool/type.ts +++ b/packages/network-debugger/src/fork/devtool/type.ts @@ -1,33 +1,69 @@ +import type { WebSocket } from 'ws' +import type { CdpId } from '../../legacy-bridge/contracts' + export interface DevtoolMessageRequest { + id?: CdpId method: string - params: Record + params?: Record } export interface DevtoolMessageResponse { - id: string - result: any + id: CdpId + result: unknown + /** @deprecated CDP responses are correlated by `id`, not a method name. */ method?: string } export interface DevtoolErrorResponse { - id: string - error: { code: number; message?: string } + id: CdpId | null + error: { + code: number + message?: string + data?: unknown + } } export type DevtoolMessage = DevtoolMessageRequest | DevtoolMessageResponse | DevtoolErrorResponse +export interface DevtoolCommandContext { + /** The exact frontend connection that issued this command. */ + client: WebSocket + id: CdpId + method: string + params: Record + /** Send a complete response to the issuing connection. First response wins. */ + reply(message: DevtoolMessageResponse | DevtoolErrorResponse): Promise + /** Resolve the command for the issuing connection. */ + result(result?: unknown): Promise + /** Reject the command for the issuing connection. */ + error(code: number, message: string, data?: unknown): Promise +} + +export type DevtoolProtocolListener = ( + error: unknown | null, + message?: DevtoolMessage, + context?: DevtoolCommandContext +) => boolean | void | Promise + export class BaseDevtoolServer { public timestamp = 0 - private startTime = Date.now() + private readonly startTime = Date.now() + public readonly listeners: DevtoolProtocolListener[] = [] + public getTimestamp() { this.updateTimestamp() return this.timestamp } - public listeners: ((error: unknown | null, message?: any) => void)[] = [] + public updateTimestamp() { this.timestamp = (Date.now() - this.startTime) / 1000 } - public on(listener: (error: unknown | null, message?: any) => void) { + + public on(listener: DevtoolProtocolListener) { this.listeners.push(listener) + return () => { + const index = this.listeners.indexOf(listener) + if (index >= 0) this.listeners.splice(index, 1) + } } } diff --git a/packages/network-debugger/src/fork/fork.ts b/packages/network-debugger/src/fork/fork.ts index 46be791..2f31456 100644 --- a/packages/network-debugger/src/fork/fork.ts +++ b/packages/network-debugger/src/fork/fork.ts @@ -1,57 +1,9 @@ -import { RequestCenter } from './request-center' -import { PORT, RegisterOptions, SERVER_PORT } from '../common' -import { loadPlugin } from './module' -import { jsonParse } from '../utils' - -const options = jsonParse(process.env.NETWORK_OPTIONS || '{}', {}) - -const loadCenter = () => { - const main = new RequestCenter({ - serverPort: options.serverPort || SERVER_PORT, - port: options.port || PORT, - autoOpenDevtool: options.autoOpenDevtool - }) - loadPlugin(main) - return main -} - -let main = loadCenter() - -let restartCount = 0 -const restartLimit = 5 -const cleanRestartCountInterval = 30 * 1000 -const restart = () => { - setTimeout( - () => { - restartCount++ - if (restartCount >= restartLimit) { - console.error('Restart limit reached') - clean() - return - } - main.close() - main = loadCenter() - }, - 10 + Math.random() * 100 - ) -} - -setInterval(() => { - restartCount = 0 -}, cleanRestartCountInterval) - -const clean = () => { - process.exit(0) -} -process.on('exit', clean) -process.on('SIGINT', clean) -process.on('SIGTERM', clean) -process.on('beforeExit', clean) -process.on('uncaughtException', (e) => { - console.error('uncaughtException: ', e) - restart() -}) -process.on('unhandledRejection', (e) => { - console.error('unhandledRejection: ', e) - restart() +import { runLegacyBridgeHost } from '../legacy-bridge/host' + +void runLegacyBridgeHost().catch((error) => { + // The host already sends a structured startup diagnostic when IPC is + // available. This remains useful when someone launches the child directly. + console.error('Legacy bridge child failed:', error) + process.exitCode = 1 + if (process.connected) process.disconnect() }) diff --git a/packages/network-debugger/src/fork/module/common.ts b/packages/network-debugger/src/fork/module/common.ts index 9098f1d..74a2974 100644 --- a/packages/network-debugger/src/fork/module/common.ts +++ b/packages/network-debugger/src/fork/module/common.ts @@ -1,12 +1,24 @@ -import { DevtoolServer } from '../devtool' -import { DevtoolMessageListener, RequestCenter } from '../request-center' +import type { DevtoolMessage } from '../devtool' +import type { DevtoolMessageListener } from '../request-center' + +export interface PluginDevtool { + timestamp: number + getTimestamp(): number + updateTimestamp(): void + send(message: DevtoolMessage): Promise +} + +export interface PluginCore { + on(method: string, listener: DevtoolMessageListener): unknown + usePlugin(id: string): T +} export interface PluginContext { - devtool: DevtoolServer - core: RequestCenter + devtool: PluginDevtool + core: PluginCore } let currentPluginContext: PluginContext | null = null -const initPluginContext = (core: RequestCenter, devtool: DevtoolServer) => { +const initPluginContext = (core: PluginCore, devtool: PluginDevtool) => { currentPluginContext = { devtool, core @@ -15,8 +27,8 @@ const initPluginContext = (core: RequestCenter, devtool: DevtoolServer) => { const resetPluginContext = () => (currentPluginContext = null) export interface CoreCotext { - devtool: DevtoolServer - core: RequestCenter + devtool: PluginDevtool + core: PluginCore plugins: PluginInstance[] } diff --git a/packages/network-debugger/src/fork/module/debugger/index.test.ts b/packages/network-debugger/src/fork/module/debugger/index.test.ts index ba45d89..1469a0b 100644 --- a/packages/network-debugger/src/fork/module/debugger/index.test.ts +++ b/packages/network-debugger/src/fork/module/debugger/index.test.ts @@ -1,332 +1,142 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' +import { beforeEach, describe, expect, test, vi } from 'vitest' +import { CDP_ERROR_CODES } from '../../devtool' import type { DevtoolMessageListener } from '../../request-center' - -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { - mockCoreOn, - mockDevtoolSend, - registeredHandlers, - mockUsePlugin, - mockGetScriptSource, - mockGetLocalScriptList -} = vi.hoisted(() => { - const handlers = new Map[]>() - return { - mockCoreOn: vi.fn((type: string, fn: DevtoolMessageListener) => { - if (!handlers.has(type)) { - handlers.set(type, []) - } - handlers.get(type)!.push(fn) - return () => { - const list = handlers.get(type) - if (list) { - const index = list.indexOf(fn) - if (index > -1) { - list.splice(index, 1) - } - } - } - }), - mockDevtoolSend: vi.fn(), - registeredHandlers: handlers, - mockUsePlugin: vi.fn(), - mockGetScriptSource: vi.fn(), - mockGetLocalScriptList: vi.fn() +import type { PluginCore } from '../common' +import { debuggerPlugin } from './index' + +const handlers = new Map[]>() +const send = vi.fn().mockResolvedValue(undefined) +const getScriptSource = vi.fn() +const getLocalScriptList = vi.fn() + +function loadPlugin() { + const networkPlugin = { + getRequest: vi.fn(), + resourceService: { + getScriptSource, + getLocalScriptList, + getScriptIdByUrl: vi.fn() + } } -}) - -// Mock DevtoolServer 和 RequestCenter 模块 -vi.mock('../../devtool', () => ({ - DevtoolServer: vi.fn() -})) - -vi.mock('../../request-center', () => ({ - RequestCenter: vi.fn() -})) - -// 创建测试用的 mock 上下文对象 -const createMockContext = () => ({ - devtool: { - send: mockDevtoolSend, - getTimestamp: vi.fn().mockReturnValue(0), - updateTimestamp: vi.fn(), - timestamp: 0 - }, - core: { - on: mockCoreOn, - usePlugin: mockUsePlugin - }, - plugins: [] -}) - -describe('fork/module/debugger/index.ts', () => { - beforeEach(() => { - vi.clearAllMocks() - registeredHandlers.clear() - - // 设置 mockUsePlugin 返回 network 插件的 mock - mockUsePlugin.mockReturnValue({ - getRequest: vi.fn(), - resourceService: { - getScriptSource: mockGetScriptSource, - getLocalScriptList: mockGetLocalScriptList, - getScriptIdByUrl: vi.fn() - } - }) - - // 默认返回空脚本列表 - mockGetLocalScriptList.mockReturnValue([]) + const core: PluginCore = { + on(method: string, listener: DevtoolMessageListener) { + const list = handlers.get(method) ?? [] + list.push(listener as DevtoolMessageListener) + handlers.set(method, list) + return () => undefined + }, + usePlugin() { + return networkPlugin as unknown as T + } + } + debuggerPlugin({ + devtool: { + send, + timestamp: 0, + getTimestamp: () => 0, + updateTimestamp: () => undefined + }, + core, + plugins: [debuggerPlugin] }) +} + +function handler(method: string) { + const listener = handlers.get(method)?.[0] + if (!listener) throw new Error(`Missing handler ${method}`) + return listener +} + +beforeEach(() => { + vi.clearAllMocks() + handlers.clear() + getLocalScriptList.mockReturnValue([]) + loadPlugin() +}) - afterEach(() => { - vi.restoreAllMocks() +describe('debuggerPlugin v2 command semantics', () => { + test('registers lazy source and reconnect handlers', () => { + expect(debuggerPlugin.id).toBe('debugger') + expect(handlers.has('Debugger.getScriptSource')).toBe(true) + expect(handlers.has('onConnect')).toBe(true) }) - describe('debuggerPlugin', () => { - test('插件具有正确的 id', async () => { - const { debuggerPlugin } = await import('./index') - - expect(debuggerPlugin.id).toBe('debugger') - }) - - test('插件使用 network 插件', async () => { - const { debuggerPlugin } = await import('./index') + test('resolves getScriptSource through the command result callback', async () => { + getScriptSource.mockReturnValue('console.log("source")') + const result = vi.fn().mockResolvedValue(undefined) + const error = vi.fn().mockResolvedValue(undefined) - // 直接调用插件函数,使用 Function.prototype.call 绕过类型检查 - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - expect(mockUsePlugin).toHaveBeenCalledWith('network') + await handler('Debugger.getScriptSource')({ + data: { scriptId: 'script-1' }, + id: 0, + result, + error }) - test('插件注册 Debugger.getScriptSource 处理器', async () => { - const { debuggerPlugin } = await import('./index') - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - expect(mockCoreOn).toHaveBeenCalledWith('Debugger.getScriptSource', expect.any(Function)) - }) - - test('插件注册 onConnect 处理器', async () => { - const { debuggerPlugin } = await import('./index') - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - expect(mockCoreOn).toHaveBeenCalledWith('onConnect', expect.any(Function)) - }) + expect(getScriptSource).toHaveBeenCalledWith('script-1') + expect(result).toHaveBeenCalledWith({ scriptSource: 'console.log("source")' }) + expect(error).not.toHaveBeenCalled() + expect(send).not.toHaveBeenCalledWith(expect.objectContaining({ id: 0 })) }) - describe('Debugger.getScriptSource 处理器', () => { - test('返回脚本源代码', async () => { - const { debuggerPlugin } = await import('./index') - - mockGetScriptSource.mockReturnValue('console.log("hello world");') - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - const getScriptSourceHandlers = registeredHandlers.get('Debugger.getScriptSource') - expect(getScriptSourceHandlers).toBeDefined() - - getScriptSourceHandlers![0]({ - data: { scriptId: 'script-123' }, - id: 'request-id-1' - }) - - expect(mockGetScriptSource).toHaveBeenCalledWith('script-123') - expect(mockDevtoolSend).toHaveBeenCalledWith({ - id: 'request-id-1', - method: 'Debugger.getScriptSourceResponse', - result: { - scriptSource: 'console.log("hello world");' - } - }) - }) - - test('脚本不存在时返回 null', async () => { - const { debuggerPlugin } = await import('./index') - - mockGetScriptSource.mockReturnValue(null) - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - const getScriptSourceHandlers = registeredHandlers.get('Debugger.getScriptSource') - getScriptSourceHandlers![0]({ - data: { scriptId: 'non-existent-script' }, - id: 'request-id-2' - }) + test('rejects invalid params with -32602', async () => { + const result = vi.fn().mockResolvedValue(undefined) + const error = vi.fn().mockResolvedValue(undefined) - expect(mockDevtoolSend).toHaveBeenCalledWith({ - id: 'request-id-2', - method: 'Debugger.getScriptSourceResponse', - result: { - scriptSource: null - } - }) - }) - - test('没有 id 时不发送响应', async () => { - const { debuggerPlugin } = await import('./index') - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) + await handler('Debugger.getScriptSource')({ data: {}, result, error }) - const getScriptSourceHandlers = registeredHandlers.get('Debugger.getScriptSource') - getScriptSourceHandlers![0]({ - data: { scriptId: 'script-123' }, - id: undefined - }) - - expect(mockDevtoolSend).not.toHaveBeenCalled() - }) + expect(error).toHaveBeenCalledWith(CDP_ERROR_CODES.INVALID_PARAMS, 'scriptId must be a string.') + expect(result).not.toHaveBeenCalled() }) - describe('onConnect 处理器', () => { - test('连接时发送所有已解析的脚本', async () => { - const { debuggerPlugin } = await import('./index') - - const scriptList = [ - { - url: 'file:///path/to/script1.js', - scriptLanguage: 'JavaScript', - embedderName: 'file:///path/to/script1.js', - scriptId: '1', - sourceMapURL: '', - hasSourceURL: false - }, - { - url: 'file:///path/to/script2.js', - scriptLanguage: 'JavaScript', - embedderName: 'file:///path/to/script2.js', - scriptId: '2', - sourceMapURL: 'file:///path/to/script2.js.map', - hasSourceURL: true - } - ] - - mockGetLocalScriptList.mockReturnValue(scriptList) - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - // 触发 onConnect - const onConnectHandlers = registeredHandlers.get('onConnect') - expect(onConnectHandlers).toBeDefined() - onConnectHandlers![0]({ data: null, id: undefined }) + test('rejects an unknown lazy script with a server error', async () => { + getScriptSource.mockReturnValue(null) + const result = vi.fn().mockResolvedValue(undefined) + const error = vi.fn().mockResolvedValue(undefined) - // 验证发送了所有脚本 - expect(mockDevtoolSend).toHaveBeenCalledWith({ - method: 'Debugger.scriptParsed', - params: scriptList[0] - }) - expect(mockDevtoolSend).toHaveBeenCalledWith({ - method: 'Debugger.scriptParsed', - params: scriptList[1] - }) + await handler('Debugger.getScriptSource')({ + data: { scriptId: 'missing' }, + result, + error }) - test('没有脚本时不发送消息', async () => { - const { debuggerPlugin } = await import('./index') - - mockGetLocalScriptList.mockReturnValue([]) - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - // 触发 onConnect - const onConnectHandlers = registeredHandlers.get('onConnect') - onConnectHandlers![0]({ data: null, id: undefined }) - - // 不应该发送任何消息 - expect(mockDevtoolSend).not.toHaveBeenCalled() - }) - - test('发送包含 sourceMapURL 的脚本信息', async () => { - const { debuggerPlugin } = await import('./index') - - const scriptWithSourceMap = { - url: 'file:///path/to/app.js', - scriptLanguage: 'JavaScript', - embedderName: 'file:///path/to/app.js', - scriptId: '100', - sourceMapURL: 'data:application/json;base64,eyJ2ZXJzaW9uIjozfQ==', - hasSourceURL: true - } - - mockGetLocalScriptList.mockReturnValue([scriptWithSourceMap]) - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - const onConnectHandlers = registeredHandlers.get('onConnect') - onConnectHandlers![0]({ data: null, id: undefined }) - - expect(mockDevtoolSend).toHaveBeenCalledWith({ - method: 'Debugger.scriptParsed', - params: expect.objectContaining({ - sourceMapURL: 'data:application/json;base64,eyJ2ZXJzaW9uIjozfQ==', - hasSourceURL: true - }) - }) - }) + expect(error).toHaveBeenCalledWith(CDP_ERROR_CODES.SERVER_ERROR, 'Unknown script id missing.') + expect(result).not.toHaveBeenCalled() }) - describe('ScriptSourceData 接口', () => { - test('处理器接收正确的数据格式', async () => { - const { debuggerPlugin } = await import('./index') - - mockGetScriptSource.mockReturnValue('// script content') - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - const getScriptSourceHandlers = registeredHandlers.get('Debugger.getScriptSource') - - // 验证处理器可以正确处理 ScriptSourceData 格式的数据 - getScriptSourceHandlers![0]({ - data: { scriptId: 'test-script-id' }, - id: 'test-request-id' - }) - - expect(mockGetScriptSource).toHaveBeenCalledWith('test-script-id') + test('reads the current lazy script list on every frontend connection', () => { + const first = { + url: 'file:///first.js', + scriptLanguage: 'JavaScript', + embedderName: 'file:///first.js', + scriptId: '1', + sourceMapURL: '', + hasSourceURL: false + } + const second = { + ...first, + url: 'file:///second.js', + embedderName: 'file:///second.js', + scriptId: '2' + } + getLocalScriptList.mockReturnValueOnce([first]).mockReturnValueOnce([first, second]) + + handler('onConnect')({ data: null }) + handler('onConnect')({ data: null }) + + expect(getLocalScriptList).toHaveBeenCalledTimes(2) + expect(send).toHaveBeenNthCalledWith(1, { + method: 'Debugger.scriptParsed', + params: first + }) + expect(send).toHaveBeenNthCalledWith(3, { + method: 'Debugger.scriptParsed', + params: second }) }) - describe('IScriptParsed 接口', () => { - test('脚本信息包含所有必要字段', async () => { - const { debuggerPlugin } = await import('./index') - - const completeScript = { - url: 'file:///complete/script.js', - scriptLanguage: 'JavaScript', - embedderName: 'file:///complete/script.js', - scriptId: '999', - sourceMapURL: 'file:///complete/script.js.map', - hasSourceURL: true - } - - mockGetLocalScriptList.mockReturnValue([completeScript]) - - const context = createMockContext() - ;(debuggerPlugin as Function)(context) - - const onConnectHandlers = registeredHandlers.get('onConnect') - onConnectHandlers![0]({ data: null, id: undefined }) - - expect(mockDevtoolSend).toHaveBeenCalledWith({ - method: 'Debugger.scriptParsed', - params: { - url: 'file:///complete/script.js', - scriptLanguage: 'JavaScript', - embedderName: 'file:///complete/script.js', - scriptId: '999', - sourceMapURL: 'file:///complete/script.js.map', - hasSourceURL: true - } - }) - }) + test('does not announce scripts before lazy registration', () => { + handler('onConnect')({ data: null }) + expect(send).not.toHaveBeenCalled() }) }) diff --git a/packages/network-debugger/src/fork/module/debugger/index.ts b/packages/network-debugger/src/fork/module/debugger/index.ts index 3196460..25b780e 100644 --- a/packages/network-debugger/src/fork/module/debugger/index.ts +++ b/packages/network-debugger/src/fork/module/debugger/index.ts @@ -1,3 +1,4 @@ +import { CDP_ERROR_CODES } from '../../devtool' import { createPlugin, useConnect, useHandler } from '../common' import { NetworkPluginCore } from '../network' export interface ISciprtParsed { @@ -15,27 +16,25 @@ export interface ScriptSourceData { export const debuggerPlugin = createPlugin('debugger', ({ devtool, core }) => { const networkPlugin = core.usePlugin('network') - useHandler('Debugger.getScriptSource', ({ id, data }) => { - if (!id) { + useHandler('Debugger.getScriptSource', async ({ data, result, error }) => { + if (!data || typeof data.scriptId !== 'string') { + await error?.(CDP_ERROR_CODES.INVALID_PARAMS, 'scriptId must be a string.') return } const { scriptId } = data const scriptSource = networkPlugin.resourceService.getScriptSource(scriptId) - devtool.send({ - id: id, - method: 'Debugger.getScriptSourceResponse', - result: { - scriptSource - } - }) + if (typeof scriptSource !== 'string') { + await error?.(CDP_ERROR_CODES.SERVER_ERROR, `Unknown script id ${scriptId}.`) + return + } + await result?.({ scriptSource }) }) - const scriptList = networkPlugin.resourceService.getLocalScriptList() useConnect(() => { - scriptList.forEach((script) => { + networkPlugin.resourceService.getLocalScriptList().forEach((script) => { devtool.send({ method: 'Debugger.scriptParsed', - params: script + params: { ...script } }) }) }) diff --git a/packages/network-debugger/src/fork/module/health/index.test.ts b/packages/network-debugger/src/fork/module/health/index.test.ts deleted file mode 100644 index 2f1efc0..0000000 --- a/packages/network-debugger/src/fork/module/health/index.test.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import type { DevtoolMessageListener } from '../../request-center' - -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { mockCoreOn, mockDevtoolSend, registeredHandlers } = vi.hoisted(() => { - const handlers = new Map[]>() - return { - mockCoreOn: vi.fn((type: string, fn: DevtoolMessageListener) => { - if (!handlers.has(type)) { - handlers.set(type, []) - } - handlers.get(type)!.push(fn) - return () => { - const list = handlers.get(type) - if (list) { - const index = list.indexOf(fn) - if (index > -1) { - list.splice(index, 1) - } - } - } - }), - mockDevtoolSend: vi.fn(), - registeredHandlers: handlers - } -}) - -// 定义 mock 对象的接口类型 -interface MockDevtoolServer { - send: ReturnType - close: ReturnType - open: ReturnType - on: ReturnType - listeners: Array<() => void> - timestamp: number - getTimestamp: ReturnType - updateTimestamp: ReturnType -} - -interface MockRequestCenter { - on: typeof mockCoreOn - loadPlugins: ReturnType - usePlugin: ReturnType - close: ReturnType -} - -// 创建 mock 对象 -function createMockDevtool(): MockDevtoolServer { - return { - send: mockDevtoolSend, - close: vi.fn(), - open: vi.fn(), - on: vi.fn(), - listeners: [], - timestamp: 0, - getTimestamp: vi.fn().mockReturnValue(0), - updateTimestamp: vi.fn() - } -} - -function createMockCore(): MockRequestCenter { - return { - on: mockCoreOn, - loadPlugins: vi.fn(), - usePlugin: vi.fn(), - close: vi.fn() - } -} - -describe('fork/module/health/index.ts', () => { - let originalProcessExit: typeof process.exit - - beforeEach(() => { - vi.clearAllMocks() - registeredHandlers.clear() - vi.useFakeTimers() - // 保存原始的 process.exit - originalProcessExit = process.exit - // Mock process.exit - process.exit = vi.fn() as never - }) - - afterEach(() => { - vi.restoreAllMocks() - vi.useRealTimers() - // 恢复原始的 process.exit - process.exit = originalProcessExit - }) - - describe('healthPlugin', () => { - test('插件具有正确的 id', async () => { - const { healthPlugin } = await import('./index') - - expect(healthPlugin.id).toBe('health') - }) - - test('插件注册 healthcheck 处理器', async () => { - const { healthPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - healthPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [healthPlugin] - }) - - expect(mockCoreOn).toHaveBeenCalledWith('healthcheck', expect.any(Function)) - }) - - test('10 秒内没有 healthcheck 时退出进程', async () => { - const { healthPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - healthPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [healthPlugin] - }) - - // 快进 10 秒 - vi.advanceTimersByTime(10000) - - expect(process.exit).toHaveBeenCalledWith(0) - }) - - test('收到 healthcheck 后重置超时计时器', async () => { - const { healthPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - healthPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [healthPlugin] - }) - - // 快进 5 秒 - vi.advanceTimersByTime(5000) - - // 触发 healthcheck - const healthcheckHandlers = registeredHandlers.get('healthcheck') - expect(healthcheckHandlers).toBeDefined() - expect(healthcheckHandlers!.length).toBeGreaterThan(0) - healthcheckHandlers![0]({ data: null, id: undefined }) - - // 再快进 5 秒(总共 10 秒,但因为重置了计时器,不应该退出) - vi.advanceTimersByTime(5000) - - expect(process.exit).not.toHaveBeenCalled() - - // 再快进 5 秒(从上次 healthcheck 开始已经 10 秒) - vi.advanceTimersByTime(5000) - - expect(process.exit).toHaveBeenCalledWith(0) - }) - - test('多次 healthcheck 持续重置计时器', async () => { - const { healthPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - healthPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [healthPlugin] - }) - - const healthcheckHandlers = registeredHandlers.get('healthcheck') - expect(healthcheckHandlers).toBeDefined() - - // 模拟多次 healthcheck - for (let i = 0; i < 5; i++) { - vi.advanceTimersByTime(5000) - healthcheckHandlers![0]({ data: null, id: undefined }) - } - - // 总共过了 25 秒,但每次都重置了计时器,所以不应该退出 - expect(process.exit).not.toHaveBeenCalled() - - // 再等 10 秒不发送 healthcheck - vi.advanceTimersByTime(10000) - - expect(process.exit).toHaveBeenCalledWith(0) - }) - - test('healthcheck 处理器接收正确的参数格式', async () => { - const { healthPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - healthPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [healthPlugin] - }) - - const healthcheckHandlers = registeredHandlers.get('healthcheck') - expect(healthcheckHandlers).toBeDefined() - - // 验证处理器可以正常调用 - expect(() => { - healthcheckHandlers![0]({ data: { timestamp: Date.now() }, id: '123' }) - }).not.toThrow() - }) - }) -}) diff --git a/packages/network-debugger/src/fork/module/health/index.ts b/packages/network-debugger/src/fork/module/health/index.ts deleted file mode 100644 index c37b179..0000000 --- a/packages/network-debugger/src/fork/module/health/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createPlugin, useHandler } from '../common' - -export const healthPlugin = createPlugin('health', ({ devtool }) => { - const exitProcess = () => { - process.exit(0) - } - - let id = setTimeout(exitProcess, 10000) - useHandler('healthcheck', () => { - clearTimeout(id) - id = setTimeout(exitProcess, 10000) - }) -}) diff --git a/packages/network-debugger/src/fork/module/index.ts b/packages/network-debugger/src/fork/module/index.ts index bce3cd8..30a6507 100644 --- a/packages/network-debugger/src/fork/module/index.ts +++ b/packages/network-debugger/src/fork/module/index.ts @@ -2,8 +2,7 @@ import { RequestCenter } from '../request-center' import { debuggerPlugin } from './debugger' import { networkPlugin } from './network' import { websocketPlugin } from './websocket' -import { healthPlugin } from './health' export const loadPlugin = (instance: RequestCenter) => { - instance.loadPlugins([healthPlugin, networkPlugin, debuggerPlugin, websocketPlugin]) + instance.loadPlugins([networkPlugin, debuggerPlugin, websocketPlugin]) } diff --git a/packages/network-debugger/src/fork/module/network/index.test.ts b/packages/network-debugger/src/fork/module/network/index.test.ts index 8ca9a61..f5c94e8 100644 --- a/packages/network-debugger/src/fork/module/network/index.test.ts +++ b/packages/network-debugger/src/fork/module/network/index.test.ts @@ -1,1167 +1,373 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import zlib from 'node:zlib' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import { RequestDetail } from '../../../common' +import { CDP_ERROR_CODES } from '../../devtool' import type { DevtoolMessageListener } from '../../request-center' - -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { mockCoreOn, mockDevtoolSend, registeredHandlers, mockUsePlugin } = vi.hoisted(() => { - const handlers = new Map[]>() - return { - mockCoreOn: vi.fn((type: string, fn: DevtoolMessageListener) => { - if (!handlers.has(type)) { - handlers.set(type, []) - } - handlers.get(type)!.push(fn) - return () => { - const list = handlers.get(type) - if (list) { - const index = list.indexOf(fn) - if (index > -1) { - list.splice(index, 1) - } - } - } - }), - mockDevtoolSend: vi.fn(), - registeredHandlers: handlers, - mockUsePlugin: vi.fn() - } -}) - -// 定义 mock 对象的接口类型 -interface MockDevtoolServer { - send: ReturnType - close: ReturnType - open: ReturnType - on: ReturnType - listeners: Array<() => void> - timestamp: number - getTimestamp: ReturnType - updateTimestamp: ReturnType +import { networkPlugin, toMimeType, type NetworkPluginCore } from './index' + +const handlers = new Map[]>() +const send = vi.fn().mockResolvedValue(undefined) +let timestamp = 100 +let plugin: NetworkPluginCore +let fixtureDir = '' + +function request(overrides: Partial = {}) { + const detail = new RequestDetail() + detail.url = 'http://127.0.0.1:43123/api?source=dynamic' + detail.method = 'GET' + detail.requestHeaders = {} + detail.responseHeaders = {} + detail.responseInfo = {} + detail.requestStartTime = 1_787_891_800.25 + Object.assign(detail, overrides) + return detail } -interface MockRequestCenter { - on: typeof mockCoreOn - loadPlugins: ReturnType - usePlugin: typeof mockUsePlugin - close: ReturnType -} - -// 创建 mock 对象 -function createMockDevtool(): MockDevtoolServer { - return { - send: mockDevtoolSend, - close: vi.fn(), - open: vi.fn(), - on: vi.fn(), - listeners: [], - timestamp: 0, - getTimestamp: vi.fn().mockReturnValue(0), - updateTimestamp: vi.fn() +function loadPlugin() { + const core = { + on(method: string, listener: DevtoolMessageListener) { + const list = handlers.get(method) ?? [] + list.push(listener) + handlers.set(method, list) + return () => undefined + }, + usePlugin: vi.fn() } + return networkPlugin({ + devtool: { + send, + timestamp: 0, + getTimestamp: () => (timestamp += 0.25), + updateTimestamp: () => undefined + }, + core, + plugins: [networkPlugin] + }) } -function createMockCore(): MockRequestCenter { - return { - on: mockCoreOn, - loadPlugins: vi.fn(), - usePlugin: mockUsePlugin, - close: vi.fn() - } +function handler(method: string) { + const listener = handlers.get(method)?.[0] + if (!listener) throw new Error(`Missing handler ${method}`) + return listener } -// 创建测试用的 RequestDetail -function createTestRequest(overrides: Partial = {}): RequestDetail { - const request = new RequestDetail() - request.id = overrides.id || 'test-request-id' - request.url = overrides.url || 'http://example.com/api/test' - request.method = overrides.method || 'GET' - request.requestHeaders = overrides.requestHeaders || { 'Content-Type': 'application/json' } - request.requestData = overrides.requestData - request.responseData = overrides.responseData - request.responseStatusCode = overrides.responseStatusCode || 200 - request.responseHeaders = overrides.responseHeaders || { 'Content-Type': 'application/json' } - request.responseInfo = overrides.responseInfo || { encodedDataLength: 100, dataLength: 100 } - request.requestStartTime = overrides.requestStartTime || Date.now() - request.requestEndTime = overrides.requestEndTime - request.initiator = overrides.initiator - return request +function messages() { + return send.mock.calls.map(([message]) => message as Record) } -describe('fork/module/network/index.ts', () => { - beforeEach(() => { - vi.clearAllMocks() - registeredHandlers.clear() - }) - - afterEach(() => { - vi.restoreAllMocks() - }) - - describe('toMimeType 函数', () => { - test('从 content-type 中提取 mime type', async () => { - const { toMimeType } = await import('./index') - - expect(toMimeType('application/json; charset=utf-8')).toBe('application/json') - expect(toMimeType('text/html; charset=utf-8')).toBe('text/html') - expect(toMimeType('image/png')).toBe('image/png') - }) - - test('没有分号时返回完整的 content-type', async () => { - const { toMimeType } = await import('./index') - - expect(toMimeType('application/json')).toBe('application/json') - expect(toMimeType('text/plain')).toBe('text/plain') - }) - - test('空字符串返回 text/plain', async () => { - const { toMimeType } = await import('./index') - - expect(toMimeType('')).toBe('text/plain') - }) - }) - - describe('networkPlugin', () => { - test('插件具有正确的 id', async () => { - const { networkPlugin } = await import('./index') - - expect(networkPlugin.id).toBe('network') - }) - - test('插件注册所有必要的处理器', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 验证注册了所有必要的处理器 - expect(mockCoreOn).toHaveBeenCalledWith('Network.getResponseBody', expect.any(Function)) - expect(mockCoreOn).toHaveBeenCalledWith('initRequest', expect.any(Function)) - expect(mockCoreOn).toHaveBeenCalledWith('registerRequest', expect.any(Function)) - expect(mockCoreOn).toHaveBeenCalledWith('endRequest', expect.any(Function)) - expect(mockCoreOn).toHaveBeenCalledWith('responseData', expect.any(Function)) - }) - - test('插件返回 getRequest 和 resourceService', async () => { - const { networkPlugin } = await import('./index') +function methods() { + return messages().map((message) => message.method) +} - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() +beforeEach(() => { + vi.clearAllMocks() + handlers.clear() + timestamp = 100 + fixtureDir = fs.mkdtempSync(path.join(os.tmpdir(), 'nnd-network-plugin-')) + plugin = loadPlugin() +}) - const result = networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) +afterEach(() => { + fs.rmSync(fixtureDir, { recursive: true, force: true }) +}) - expect(result).toHaveProperty('getRequest') - expect(result).toHaveProperty('resourceService') - expect(typeof result.getRequest).toBe('function') - }) +describe('networkPlugin v2 lifecycle', () => { + test('registers capture and asynchronous CDP command handlers', () => { + expect(networkPlugin.id).toBe('network') + expect([...handlers.keys()]).toEqual( + expect.arrayContaining([ + 'initRequest', + 'registerRequest', + 'updateRequest', + 'responseReceived', + 'responseData', + 'requestFailed', + 'endRequest', + 'eventSourceResponseReceived', + 'eventSourceMessage', + 'Network.getResponseBody', + 'Network.getRequestPostData' + ]) + ) + expect(plugin.requestCount()).toBe(0) }) - describe('initRequest 处理器', () => { - test('初始化请求并存储', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - const result = networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - const testRequest = createTestRequest({ id: 'init-test-id' }) - - // 触发 initRequest 处理器 - const initRequestHandlers = registeredHandlers.get('initRequest') - expect(initRequestHandlers).toBeDefined() - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 验证请求被存储 - const storedRequest = result.getRequest('init-test-id') - expect(storedRequest).toBeDefined() - expect(storedRequest.id).toBe('init-test-id') - }) - - test('处理带有 initiator 的请求', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - const result = networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - const testRequest = createTestRequest({ - id: 'initiator-test-id', - initiator: { - type: 'script', - stack: { - callFrames: [ - { - columnNumber: 10, - functionName: 'testFunction', - lineNumber: 20, - url: '/path/to/file.js' - } - ] - } + test('preserves the real dynamic-origin URL and emits second-based timestamps', async () => { + const detail = request({ + method: 'POST', + requestHeaders: { 'content-type': 'application/json' }, + requestData: Buffer.from('{"ok":true}'), + // Accept old millisecond inputs at the bridge boundary. + requestStartTime: 1_787_891_800_250 + }) + + await handler('registerRequest')({ data: detail }) + + const event = messages()[0] + expect(event).toMatchObject({ + method: 'Network.requestWillBeSent', + params: { + documentURL: 'http://127.0.0.1:43123/api?source=dynamic', + wallTime: 1_787_891_800.25, + request: { + url: 'http://127.0.0.1:43123/api?source=dynamic', + method: 'POST', + postData: '{"ok":true}', + hasPostData: true } - }) - - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - const storedRequest = result.getRequest('initiator-test-id') - expect(storedRequest).toBeDefined() - expect(storedRequest.initiator).toBeDefined() + } }) + expect(event.params.timestamp).toBeGreaterThan(0) + expect(event.params.timestamp).toBeLessThan(10_000_000_000) + expect(event.params.wallTime).toBeLessThan(10_000_000_000) + }) - test('处理带有 initiator 且 scriptId 存在的请求', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - const pluginResult = networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先获取本地脚本列表,这会填充 resourceService - const scriptList = pluginResult.resourceService.getLocalScriptList() - - // 使用一个已知的脚本 URL - const knownScriptUrl = scriptList.length > 0 ? scriptList[0].url : '' - - if (knownScriptUrl) { - const testRequest = createTestRequest({ - id: 'initiator-scriptid-test-id', - initiator: { - type: 'script', - stack: { - callFrames: [ - { - columnNumber: 10, - functionName: 'testFunction', - lineNumber: 20, - url: knownScriptUrl.replace('file://', ''), - scriptId: '' - } - ] - } - } - }) - - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - const storedRequest = pluginResult.getRequest('initiator-scriptid-test-id') - expect(storedRequest).toBeDefined() - // scriptId 应该被设置 - if (storedRequest.initiator?.stack.callFrames[0]) { - expect(storedRequest.initiator.stack.callFrames[0].scriptId).toBeDefined() + test('emits responseReceived before data and the successful terminal event exactly once', async () => { + const detail = request({ + responseStatusCode: 201, + responseStatusText: 'Created', + responseHeaders: { 'content-type': 'application/json; charset=utf-8' }, + responseData: Buffer.from('{"created":true}'), + responseInfo: { dataLength: 16, encodedDataLength: 16 } + }) + + await handler('registerRequest')({ data: detail }) + await handler('responseReceived')({ data: detail }) + await handler('endRequest')({ data: detail }) + await handler('endRequest')({ data: detail }) + + expect(methods()).toEqual([ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.dataReceived', + 'Network.loadingFinished' + ]) + expect(messages()[1]).toMatchObject({ + params: { + type: 'Other', + response: { + status: 201, + statusText: 'Created', + mimeType: 'application/json', + charset: 'utf-8' } } }) + const timestamps = messages() + .map((message) => message.params?.timestamp) + .filter((value): value is number => typeof value === 'number') + expect(timestamps).toEqual([...timestamps].sort((a, b) => a - b)) }) - describe('registerRequest 处理器', () => { - test('注册请求并发送 Network.requestWillBeSent', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - const testRequest = createTestRequest({ - id: 'register-test-id', - url: 'http://example.com/api/data', - method: 'POST', - requestData: { key: 'value' }, - requestHeaders: { 'Content-Type': 'application/json' } - }) - - const registerRequestHandlers = registeredHandlers.get('registerRequest') - expect(registerRequestHandlers).toBeDefined() - registerRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 验证发送了 Network.requestWillBeSent - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.requestWillBeSent', - params: expect.objectContaining({ - requestId: 'register-test-id', - request: expect.objectContaining({ - url: 'http://example.com/api/data', - method: 'POST' - }) - }) - }) - ) - }) - - test('WebSocket 请求类型为 WebSocket', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - const testRequest = createTestRequest({ - id: 'ws-test-id', - url: 'ws://example.com/socket', - requestHeaders: { Upgrade: 'websocket' } - }) - - const registerRequestHandlers = registeredHandlers.get('registerRequest') - registerRequestHandlers![0]({ data: testRequest, id: undefined }) - - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.requestWillBeSent', - params: expect.objectContaining({ - type: 'WebSocket' - }) - }) - ) - }) - - test('普通请求类型为 Fetch', async () => { - const { networkPlugin } = await import('./index') + test('a pre-response failure emits only requestWillBeSent then loadingFailed', async () => { + const detail = request() - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - const testRequest = createTestRequest({ - id: 'fetch-test-id', - requestHeaders: { 'Content-Type': 'application/json' } - }) - - const registerRequestHandlers = registeredHandlers.get('registerRequest') - registerRequestHandlers![0]({ data: testRequest, id: undefined }) - - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.requestWillBeSent', - params: expect.objectContaining({ - type: 'Fetch' - }) - }) - ) + await handler('requestFailed')({ + data: { + request: detail, + errorText: 'ECONNREFUSED', + canceled: true, + blockedReason: 'other' + } }) - test('处理带有 initiator 且 scriptId 存在的 registerRequest', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - const pluginResult = networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先获取本地脚本列表,这会填充 resourceService - const scriptList = pluginResult.resourceService.getLocalScriptList() - - // 使用一个已知的脚本 URL - const knownScriptUrl = scriptList.length > 0 ? scriptList[0].url : '' - - if (knownScriptUrl) { - const testRequest = createTestRequest({ - id: 'register-initiator-scriptid-test-id', - initiator: { - type: 'script', - stack: { - callFrames: [ - { - columnNumber: 10, - functionName: 'testFunction', - lineNumber: 20, - url: knownScriptUrl.replace('file://', ''), - scriptId: '' - } - ] - } - } - }) - - const registerRequestHandlers = registeredHandlers.get('registerRequest') - registerRequestHandlers![0]({ data: testRequest, id: undefined }) - - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.requestWillBeSent' - }) - ) + expect(methods()).toEqual(['Network.requestWillBeSent', 'Network.loadingFailed']) + expect(messages()[1]).toMatchObject({ + params: { + errorText: 'ECONNREFUSED', + canceled: true, + blockedReason: 'other' } }) + expect(methods()).not.toContain('Network.loadingFinished') + expect(methods()).not.toContain('Network.responseReceived') }) - describe('endRequest 处理器', () => { - test('结束请求并发送完整的响应消息序列', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - const testRequest = createTestRequest({ - id: 'end-test-id', - responseStatusCode: 200, - responseHeaders: { 'Content-Type': 'application/json' }, - responseInfo: { encodedDataLength: 100, dataLength: 100 } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - expect(endRequestHandlers).toBeDefined() - endRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 验证发送了完整的消息序列 - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived' - }) - ) - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.dataReceived' - }) - ) - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.loadingFinished' - }) - ) - }) - - test('根据 content-type 确定响应类型', async () => { - const { networkPlugin } = await import('./index') - - // 测试 Image 类型 - const mockDevtool1 = createMockDevtool() - const mockCore1 = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool1, - core: mockCore1, - plugins: [] - }) - - const imageRequest = createTestRequest({ - id: 'image-test-id', - responseHeaders: { 'Content-Type': 'image/png' } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: imageRequest, id: undefined }) - - expect(mockDevtool1.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - type: 'Image' - }) - }) - ) - }) - - test('JavaScript 响应类型为 Script', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const jsRequest = createTestRequest({ - id: 'js-test-id', - responseHeaders: { 'Content-Type': 'application/javascript' } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: jsRequest, id: undefined }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - type: 'Script' - }) - }) - ) - }) - - test('CSS 响应类型为 Stylesheet', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const cssRequest = createTestRequest({ - id: 'css-test-id', - responseHeaders: { 'Content-Type': 'text/css' } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: cssRequest, id: undefined }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - type: 'Stylesheet' - }) - }) - ) - }) - - test('HTML 响应类型为 Document', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const htmlRequest = createTestRequest({ - id: 'html-test-id', - responseHeaders: { 'Content-Type': 'text/html' } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: htmlRequest, id: undefined }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - type: 'Document' - }) - }) - ) + test('a post-header failure keeps responseReceived but never emits loadingFinished', async () => { + const detail = request({ + responseStatusCode: 502, + responseStatusText: 'Bad Gateway', + responseHeaders: { 'content-type': 'text/plain' } }) - test('未知类型响应为 Other', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() + await handler('registerRequest')({ data: detail }) + await handler('requestFailed')({ data: { request: detail, errorText: 'stream reset' } }) - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const otherRequest = createTestRequest({ - id: 'other-test-id', - responseHeaders: { 'Content-Type': 'application/octet-stream' } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: otherRequest, id: undefined }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - type: 'Other' - }) - }) - ) - }) + expect(methods()).toEqual([ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.loadingFailed' + ]) + expect(methods()).not.toContain('Network.loadingFinished') }) - describe('Network.getResponseBody 处理器', () => { - test('返回请求的响应体', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - const result = networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先初始化一个请求 - const testRequest = createTestRequest({ - id: 'body-test-id', - responseData: Buffer.from('{"message":"hello"}'), - responseHeaders: { 'Content-Type': 'application/json' } - }) - - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - // 请求响应体 - const getResponseBodyHandlers = registeredHandlers.get('Network.getResponseBody') - expect(getResponseBodyHandlers).toBeDefined() - getResponseBodyHandlers![0]({ data: { requestId: 'body-test-id' }, id: 'response-id-1' }) - - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - id: 'response-id-1', - result: expect.objectContaining({ - body: expect.any(String), - base64Encoded: expect.any(Boolean) - }) - }) - ) + test('decodes compressed response DTOs and exposes body through async result', async () => { + const detail = request() + const body = Buffer.from('compressed response') + await handler('registerRequest')({ data: detail }) + await handler('responseData')({ + data: { + id: detail.id, + rawData: zlib.gzipSync(body), + statusCode: 200, + statusMessage: 'OK', + headers: { 'content-type': 'text/plain; charset=utf-8' }, + contentEncoding: 'gzip' + } }) + const result = vi.fn().mockResolvedValue(undefined) + const error = vi.fn().mockResolvedValue(undefined) - test('请求不存在时不发送响应', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - - // 请求不存在的响应体 - const getResponseBodyHandlers = registeredHandlers.get('Network.getResponseBody') - getResponseBodyHandlers![0]({ data: { requestId: 'non-existent-id' }, id: 'response-id-2' }) - - expect(consoleErrorSpy).toHaveBeenCalledWith('request is not found') - - consoleErrorSpy.mockRestore() + await handler('Network.getResponseBody')({ + data: { requestId: detail.id }, + id: 0, + result, + error }) - test('没有 id 时不发送响应', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - - // 没有 id 的请求 - const getResponseBodyHandlers = registeredHandlers.get('Network.getResponseBody') - getResponseBodyHandlers![0]({ data: { requestId: 'some-id' }, id: undefined }) - - expect(consoleErrorSpy).toHaveBeenCalledWith('request is not found') - - consoleErrorSpy.mockRestore() - }) + expect(methods()).toEqual([ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.dataReceived', + 'Network.loadingFinished' + ]) + expect(result).toHaveBeenCalledWith({ body: 'compressed response', base64Encoded: false }) + expect(error).not.toHaveBeenCalled() }) - describe('responseData 处理器', () => { - test('处理响应数据并结束请求', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先初始化一个请求 - const testRequest = createTestRequest({ id: 'response-data-test-id' }) - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - // 发送响应数据 - const responseDataHandlers = registeredHandlers.get('responseData') - expect(responseDataHandlers).toBeDefined() - - const rawData = Array.from(Buffer.from('{"result":"success"}')) - responseDataHandlers![0]({ - data: { - id: 'response-data-test-id', - rawData, - statusCode: 200, - headers: { 'Content-Type': 'application/json' } - }, - id: undefined - }) - - // 等待异步解压缩完成 - await vi.waitFor(() => { - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived' - }) - ) - }) - }) - - test('请求不存在时不处理响应数据', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - // 发送不存在请求的响应数据 - const responseDataHandlers = registeredHandlers.get('responseData') - const rawData = Array.from(Buffer.from('test')) - responseDataHandlers![0]({ - data: { - id: 'non-existent-id', - rawData, - statusCode: 200, - headers: {} - }, - id: undefined - }) - - // 不应该发送任何消息 - expect(mockDevtoolSend).not.toHaveBeenCalled() - }) - - test('处理 gzip 压缩的响应数据', async () => { - const zlib = await import('zlib') - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先初始化一个请求 - const testRequest = createTestRequest({ id: 'gzip-test-id' }) - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - // 创建 gzip 压缩的数据 - const originalData = '{"compressed":"data"}' - const compressedData = zlib.gzipSync(Buffer.from(originalData)) - - const responseDataHandlers = registeredHandlers.get('responseData') - responseDataHandlers![0]({ - data: { - id: 'gzip-test-id', - rawData: Array.from(compressedData), - statusCode: 200, - headers: { 'Content-Encoding': 'gzip' } - }, - id: undefined - }) - - // 等待异步解压缩完成 - await vi.waitFor(() => { - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived' - }) - ) - }) - }) - - test('处理 deflate 压缩的响应数据', async () => { - const zlib = await import('zlib') - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先初始化一个请求 - const testRequest = createTestRequest({ id: 'deflate-test-id' }) - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - // 创建 deflate 压缩的数据 - const originalData = '{"deflate":"data"}' - const compressedData = zlib.deflateSync(Buffer.from(originalData)) - - const responseDataHandlers = registeredHandlers.get('responseData') - responseDataHandlers![0]({ - data: { - id: 'deflate-test-id', - rawData: Array.from(compressedData), - statusCode: 200, - headers: { 'Content-Encoding': 'deflate' } - }, - id: undefined - }) - - // 等待异步解压缩完成 - await vi.waitFor(() => { - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived' - }) - ) - }) - }) - - test('处理 brotli 压缩的响应数据', async () => { - const zlib = await import('zlib') - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [networkPlugin] - }) - - // 先初始化一个请求 - const testRequest = createTestRequest({ id: 'brotli-test-id' }) - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 清除之前的调用记录 - mockDevtoolSend.mockClear() - - // 创建 brotli 压缩的数据 - const originalData = '{"brotli":"data"}' - const compressedData = zlib.brotliCompressSync(Buffer.from(originalData)) - - const responseDataHandlers = registeredHandlers.get('responseData') - responseDataHandlers![0]({ - data: { - id: 'brotli-test-id', - rawData: Array.from(compressedData), - statusCode: 200, - headers: { 'Content-Encoding': 'br' } - }, - id: undefined - }) - - // 等待异步解压缩完成 - await vi.waitFor(() => { - expect(mockDevtoolSend).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived' - }) - ) - }) - }) + test('returns standard command errors for invalid or unfinished body requests', async () => { + const detail = request() + await handler('initRequest')({ data: detail }) + const error = vi.fn().mockResolvedValue(undefined) + + await handler('Network.getResponseBody')({ data: {}, error }) + expect(error).toHaveBeenLastCalledWith( + CDP_ERROR_CODES.INVALID_PARAMS, + 'requestId must be a string.' + ) + + await handler('Network.getResponseBody')({ data: { requestId: detail.id }, error }) + expect(error).toHaveBeenLastCalledWith( + CDP_ERROR_CODES.SERVER_ERROR, + `No finished request with id ${detail.id}.` + ) }) - describe('endRequest 边界情况', () => { - test('没有 content-type 时使用默认值', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const testRequest = createTestRequest({ - id: 'no-content-type-id', - responseHeaders: {} // 没有 content-type - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: testRequest, id: undefined }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - response: expect.objectContaining({ - mimeType: 'text/plain' - }) - }) - }) - ) - }) - - test('没有 requestEndTime 时使用当前时间', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const testRequest = createTestRequest({ - id: 'no-end-time-id', - requestEndTime: undefined - }) - - const beforeTime = Date.now() - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: testRequest, id: undefined }) - const afterTime = Date.now() - - // 验证 requestEndTime 被设置 - expect(mockDevtool.send).toHaveBeenCalled() - }) + test('returns captured post data or a server error through command callbacks', async () => { + const withBody = request({ requestData: new Uint8Array(Buffer.from('a=1')) }) + const withoutBody = request() + await handler('initRequest')({ data: withBody }) + await handler('initRequest')({ data: withoutBody }) + const result = vi.fn().mockResolvedValue(undefined) + const error = vi.fn().mockResolvedValue(undefined) + + await handler('Network.getRequestPostData')({ + data: { requestId: withBody.id }, + result, + error + }) + await handler('Network.getRequestPostData')({ + data: { requestId: withoutBody.id }, + result, + error + }) + + expect(result).toHaveBeenCalledWith({ postData: 'a=1' }) + expect(error).toHaveBeenCalledWith( + CDP_ERROR_CODES.SERVER_ERROR, + `No request body for ${withoutBody.id}.` + ) }) - describe('Server-Sent Events (SSE) 支持', () => { - test('eventSourceMessage 处理器发送 CDP 消息', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - // 先注册一个请求 - const testRequest = createTestRequest({ - id: 'sse-request-id', - url: 'http://example.com/sse' - }) - - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 发送 eventSourceMessage - const eventSourceHandlers = registeredHandlers.get('eventSourceMessage') - expect(eventSourceHandlers).toBeDefined() - - eventSourceHandlers![0]({ - data: { - requestId: 'sse-request-id', - eventName: 'message', - eventId: '1', - data: 'Hello SSE' - }, - id: undefined - }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.eventSourceMessageReceived', - params: expect.objectContaining({ - requestId: 'sse-request-id', - eventName: 'message', - eventId: '1', - data: 'Hello SSE' - }) - }) - ) + test('emits SSE response, messages, and terminal events in protocol order', async () => { + const detail = request({ + responseStatusCode: 200, + responseStatusText: 'OK', + responseHeaders: { 'content-type': 'text/event-stream; charset=utf-8' }, + responseData: Buffer.from('event: update\ndata: one\n\n'), + responseInfo: { dataLength: 25, encodedDataLength: 25 } + }) + + await handler('registerRequest')({ data: detail }) + await handler('eventSourceResponseReceived')({ data: detail }) + await handler('eventSourceMessage')({ + data: { requestId: detail.id, eventName: 'update', eventId: '42', data: 'one\ntwo' } + }) + await handler('endRequest')({ data: detail }) + + expect(methods()).toEqual([ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.eventSourceMessageReceived', + 'Network.dataReceived', + 'Network.loadingFinished' + ]) + expect(messages()[1].params.type).toBe('EventSource') + expect(messages()[2].params).toMatchObject({ + eventName: 'update', + eventId: '42', + data: 'one\ntwo' }) + }) - test('eventSourceMessage 处理自定义事件类型', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - // 先注册一个请求 - const testRequest = createTestRequest({ - id: 'sse-custom-event-id', - url: 'http://example.com/sse' - }) - - const initRequestHandlers = registeredHandlers.get('initRequest') - initRequestHandlers![0]({ data: testRequest, id: undefined }) - - // 发送自定义事件类型的 eventSourceMessage - const eventSourceHandlers = registeredHandlers.get('eventSourceMessage') - - eventSourceHandlers![0]({ - data: { - requestId: 'sse-custom-event-id', - eventName: 'customEvent', - eventId: '42', - data: '{"status": "complete"}' - }, - id: undefined - }) - - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.eventSourceMessageReceived', - params: expect.objectContaining({ - requestId: 'sse-custom-event-id', - eventName: 'customEvent', - eventId: '42', - data: '{"status": "complete"}' - }) - }) - ) + test('lazily registers and announces an initiator script before its request', async () => { + const scriptPath = path.join(fixtureDir, 'initiator.js') + fs.writeFileSync(scriptPath, 'export const initiator = true') + const detail = request({ + initiator: { + type: 'script', + stack: { + callFrames: [ + { + functionName: 'callApi', + url: scriptPath, + lineNumber: 1, + columnNumber: 2 + } + ] + } + } }) - test('eventSourceMessage 对未知请求 ID 不发送消息', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) + await handler('registerRequest')({ data: detail }) + await handler('registerRequest')({ data: detail }) - // 不注册请求,直接发送 eventSourceMessage - const eventSourceHandlers = registeredHandlers.get('eventSourceMessage') - - eventSourceHandlers![0]({ - data: { - requestId: 'unknown-request-id', - eventName: 'message', - eventId: '', - data: 'test' - }, - id: undefined - }) - - // 不应该发送 eventSourceMessageReceived - const eventSourceCalls = mockDevtool.send.mock.calls.filter( - (call: unknown[]) => - (call[0] as { method?: string })?.method === 'Network.eventSourceMessageReceived' - ) - expect(eventSourceCalls.length).toBe(0) + expect(methods()).toEqual(['Debugger.scriptParsed', 'Network.requestWillBeSent']) + expect(messages()[0].params).toMatchObject({ + scriptId: '1', + scriptLanguage: 'JavaScript' }) + expect(detail.initiator!.stack.callFrames[0].scriptId).toBe('1') + expect(plugin.resourceService.getLocalScriptList()).toHaveLength(1) + }) - test('text/event-stream 类型被识别为 EventSource', async () => { - const { networkPlugin } = await import('./index') - - const mockDevtool = createMockDevtool() - const mockCore = createMockCore() - registeredHandlers.clear() - - networkPlugin({ - devtool: mockDevtool, - core: mockCore, - plugins: [] - }) - - const testRequest = createTestRequest({ - id: 'sse-type-test-id', - responseHeaders: { 'content-type': 'text/event-stream' } - }) - - const endRequestHandlers = registeredHandlers.get('endRequest') - endRequestHandlers![0]({ data: testRequest, id: undefined }) + test.each([ + ['image/png', 'Image'], + ['application/javascript', 'Script'], + ['text/css', 'Stylesheet'], + ['text/html', 'Document'], + ['application/octet-stream', 'Other'] + ])('maps %s responses to %s', async (contentType, type) => { + const detail = request({ + responseStatusCode: 200, + responseHeaders: { 'content-type': contentType } + }) + await handler('responseReceived')({ data: detail }) + expect( + messages().find((message) => message.method === 'Network.responseReceived')?.params.type + ).toBe(type) + }) +}) - expect(mockDevtool.send).toHaveBeenCalledWith( - expect.objectContaining({ - method: 'Network.responseReceived', - params: expect.objectContaining({ - type: 'EventSource' - }) - }) - ) - }) +describe('toMimeType', () => { + test.each([ + ['application/json; charset=utf-8', 'application/json'], + ['text/plain', 'text/plain'], + ['', 'text/plain'] + ])('normalizes %j', (input, expected) => { + expect(toMimeType(input)).toBe(expected) }) }) diff --git a/packages/network-debugger/src/fork/module/network/index.ts b/packages/network-debugger/src/fork/module/network/index.ts index e37732d..f285be7 100644 --- a/packages/network-debugger/src/fork/module/network/index.ts +++ b/packages/network-debugger/src/fork/module/network/index.ts @@ -1,283 +1,374 @@ -import { pathToFileURL } from 'url' +import { pathToFileURL } from 'node:url' +import zlib from 'node:zlib' +import { promisify } from 'node:util' import { RequestDetail } from '../../../common' +import type { LegacyRequestFailure, LegacyResponseData } from '../../../legacy-bridge/contracts' import { BodyTransformer, RequestHeaderPipe } from '../../pipe' -import { createPlugin, useHandler } from '../common' -import zlib from 'node:zlib' import { ResourceService } from '../../resource-service' +import { CDP_ERROR_CODES } from '../../devtool' +import { createPlugin, useHandler } from '../common' -const frameId = '517.528' -const loaderId = '517.529' +const gunzip = promisify(zlib.gunzip) +const inflate = promisify(zlib.inflate) +const brotliDecompress = promisify(zlib.brotliDecompress) +const frameId = 'nnd.legacy.frame' +const loaderId = 'nnd.legacy.loader' +const MAX_RETAINED_REQUESTS = 1_000 -export const toMimeType = (contentType: string) => { - return contentType.split(';')[0] || 'text/plain' +interface RequestState { + request: RequestDetail + requestSent: boolean + responseSent: boolean + terminal?: 'finished' | 'failed' } -export const networkPlugin = createPlugin('network', ({ devtool, core }) => { - const requests: Record = {} +export const toMimeType = (contentType: string) => contentType.split(';')[0] || 'text/plain' + +function resourceType(contentType: string, eventSource = false) { + if (eventSource || /text\/event-stream/i.test(contentType)) return 'EventSource' + if (/image/i.test(contentType)) return 'Image' + if (/javascript/i.test(contentType)) return 'Script' + if (/css/i.test(contentType)) return 'Stylesheet' + if (/html/i.test(contentType)) return 'Document' + return 'Other' +} + +function wallTime(value: number | undefined): number { + if (!value) return Date.now() / 1000 + return value > 10_000_000_000 ? value / 1000 : value +} +function statusText(request: RequestDetail): string { + if (request.responseStatusText) return request.responseStatusText + if (request.responseStatusCode === 200) return 'OK' + return '' +} + +function bufferFrom(value: unknown): Buffer | undefined { + if (Buffer.isBuffer(value)) return value + if (value instanceof Uint8Array) return Buffer.from(value) + if ( + value && + typeof value === 'object' && + 'type' in value && + value.type === 'Buffer' && + 'data' in value && + Array.isArray(value.data) + ) { + return Buffer.from(value.data) + } + return undefined +} + +async function decodeContent(data: Buffer, encoding: string | undefined): Promise { + const normalized = encoding?.split(',')[0]?.trim().toLowerCase() + try { + if (normalized === 'gzip' || normalized === 'x-gzip') return await gunzip(data) + if (normalized === 'deflate') return await inflate(data) + if (normalized === 'br') return await brotliDecompress(data) + } catch { + // Preserve the actual bytes if a server declared a bad encoding. Capture + // must not turn a successful application response into a protocol failure. + } + return data +} + +function requestPostData(request: RequestDetail): string | undefined { + if (request.requestData === undefined || request.requestData === null) return undefined + const buffer = bufferFrom(request.requestData) + return buffer ? buffer.toString('utf8') : String(request.requestData) +} + +export const networkPlugin = createPlugin('network', ({ devtool }) => { + const states = new Map() const resourceService = new ResourceService() + const announcedScripts = new Set() - const getRequest = (id: string) => requests[id] - const updateRequest = (request: RequestDetail) => { - requests[request.id] = request + const stateFor = (input: RequestDetail): RequestState => { + let state = states.get(input.id) + const request = new RequestDetail(input) + if (!state) { + state = { request, requestSent: false, responseSent: false } + states.set(input.id, state) + } else { + state.request = request + } + return state } - const endRequest = (request: RequestDetail) => { - requests[request.id] = request - request.requestEndTime = request.requestEndTime || Date.now() - devtool.updateTimestamp() - const headers = new RequestHeaderPipe(request.responseHeaders) - const contentType = headers.getHeader('content-type') || 'text/plain; charset=utf-8' + const trim = () => { + if (states.size <= MAX_RETAINED_REQUESTS) return + for (const [id, state] of states) { + if (!state.terminal) continue + states.delete(id) + if (states.size <= MAX_RETAINED_REQUESTS) break + } + } - const type = (() => { - if (/text\/event-stream/.test(contentType)) { - return 'EventSource' - } - if (/image/.test(contentType)) { - return 'Image' - } - if (/javascript/.test(contentType)) { - return 'Script' + const mapInitiatorScripts = async (request: RequestDetail) => { + for (const frame of request.initiator?.stack.callFrames ?? []) { + let url = frame.url + if (url && !/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(url)) { + try { + url = pathToFileURL(url).href + } catch { + // Keep the original call-frame URL. + } } - if (/css/.test(contentType)) { - return 'Stylesheet' + const scriptId = + resourceService.getScriptIdByUrl(url) ?? resourceService.getScriptIdByUrl(frame.url) + if (scriptId) { + frame.scriptId = scriptId + if (!announcedScripts.has(scriptId)) { + const descriptor = resourceService + .getLocalScriptList() + .find((script) => script.scriptId === scriptId) + if (descriptor) { + announcedScripts.add(scriptId) + await devtool.send({ method: 'Debugger.scriptParsed', params: { ...descriptor } }) + } + } } - if (/html/.test(contentType)) { - return 'Document' + } + } + + const emitRequest = async (state: RequestState) => { + if (state.requestSent) return + state.requestSent = true + const request = state.request + await mapInitiatorScripts(request) + const headers = new RequestHeaderPipe(request.requestHeaders).getData() + const postData = requestPostData(request) + await devtool.send({ + method: 'Network.requestWillBeSent', + params: { + requestId: request.id, + frameId, + loaderId, + documentURL: request.url, + request: { + url: request.url, + method: request.method ?? 'GET', + headers, + initialPriority: 'High', + mixedContentType: 'none', + ...(postData !== undefined ? { postData, hasPostData: true } : {}) + }, + timestamp: devtool.getTimestamp(), + wallTime: wallTime(request.requestStartTime), + initiator: request.initiator ?? { type: 'other' }, + type: request.isWebSocket() ? 'WebSocket' : 'Fetch' } - return 'Other' - })() + }) + } - devtool.send({ + const emitResponse = async (state: RequestState, eventSource = false) => { + if (state.responseSent) return + if (!state.requestSent) await emitRequest(state) + state.responseSent = true + const request = state.request + const headers = new RequestHeaderPipe(request.responseHeaders).getData() + const contentType = String( + new RequestHeaderPipe(headers).getHeader('content-type') ?? 'text/plain; charset=utf-8' + ) + await devtool.send({ method: 'Network.responseReceived', params: { requestId: request.id, frameId, loaderId, - timestamp: devtool.timestamp, - type, + timestamp: devtool.getTimestamp(), + type: resourceType(contentType, eventSource), response: { url: request.url, - status: request.responseStatusCode, - statusText: request.responseStatusCode === 200 ? 'OK' : '', - headers: request.responseHeaders, + status: request.responseStatusCode ?? 0, + statusText: statusText(request), + headers, connectionReused: false, - encodedDataLength: request.responseInfo.encodedDataLength, - charset: 'utf-8', + encodedDataLength: request.responseInfo.encodedDataLength ?? 0, + charset: /charset=([^;]+)/i.exec(contentType)?.[1] ?? 'utf-8', mimeType: toMimeType(contentType) } } }) + } - devtool.updateTimestamp() - devtool.send({ - method: 'Network.dataReceived', + const finish = async (state: RequestState) => { + if (state.terminal) return + await emitResponse(state) + const request = state.request + const dataLength = + request.responseInfo.dataLength ?? bufferFrom(request.responseData)?.length ?? 0 + const encodedDataLength = request.responseInfo.encodedDataLength ?? dataLength + if (dataLength > 0 || encodedDataLength > 0) { + await devtool.send({ + method: 'Network.dataReceived', + params: { + requestId: request.id, + timestamp: devtool.getTimestamp(), + dataLength, + encodedDataLength + } + }) + } + state.terminal = 'finished' + await devtool.send({ + method: 'Network.loadingFinished', params: { requestId: request.id, - timestamp: devtool.timestamp, - dataLength: request.responseInfo.dataLength, - encodedDataLength: request.responseInfo.encodedDataLength + timestamp: devtool.getTimestamp(), + encodedDataLength } }) + trim() + } - devtool.updateTimestamp() - devtool.send({ - method: 'Network.loadingFinished', + const fail = async (failure: LegacyRequestFailure) => { + const state = stateFor(failure.request) + if (state.terminal) return + if (!state.requestSent) await emitRequest(state) + if ((state.request.responseStatusCode ?? 0) > 0) await emitResponse(state) + state.terminal = 'failed' + await devtool.send({ + method: 'Network.loadingFailed', params: { - requestId: request.id, - timestamp: devtool.timestamp, - encodedDataLength: request.responseInfo.encodedDataLength + requestId: state.request.id, + timestamp: devtool.getTimestamp(), + type: 'Fetch', + errorText: failure.errorText || 'Request failed', + canceled: Boolean(failure.canceled), + ...(failure.blockedReason ? { blockedReason: failure.blockedReason } : {}) } }) + trim() } - const tryDecompression = (data: Buffer, callback: (result: Buffer) => void) => { - const decompressors: Array< - (data: Buffer, cb: (err: Error | null, result: Buffer) => void) => void - > = [zlib.gunzip, zlib.inflate, zlib.brotliDecompress] - - let attempts = 0 - - const tryNext = () => { - if (attempts >= decompressors.length) { - callback(data) // 理论上没有压缩 + useHandler<{ requestId?: unknown }>( + 'Network.getResponseBody', + async ({ data, result, error }) => { + if (typeof data?.requestId !== 'string') { + await error?.(CDP_ERROR_CODES.INVALID_PARAMS, 'requestId must be a string.') return } - - const decompressor = decompressors[attempts] - attempts += 1 - - decompressor(data, (err, result) => { - if (!err) { - callback(result) - } else { - tryNext() - } - }) + const state = states.get(data.requestId) + if (!state || state.terminal !== 'finished') { + await error?.( + CDP_ERROR_CODES.SERVER_ERROR, + `No finished request with id ${data.requestId}.` + ) + return + } + const body = new BodyTransformer(state.request).decodeBody() + await result?.({ body: body.body ?? '', base64Encoded: body.base64Encoded }) } + ) - tryNext() - } - - useHandler<{ requestId: string }>('Network.getResponseBody', ({ data, id }) => { - const request = getRequest(data.requestId) - if (!id || !request) { - console.error('request is not found') - return + useHandler<{ requestId?: unknown }>( + 'Network.getRequestPostData', + async ({ data, result, error }) => { + if (typeof data?.requestId !== 'string') { + await error?.(CDP_ERROR_CODES.INVALID_PARAMS, 'requestId must be a string.') + return + } + const state = states.get(data.requestId) + const postData = state ? requestPostData(state.request) : undefined + if (postData === undefined) { + await error?.(CDP_ERROR_CODES.SERVER_ERROR, `No request body for ${data.requestId}.`) + return + } + await result?.({ postData }) } - const body = new BodyTransformer(request).decodeBody() - - devtool.send({ - id, - result: body - }) - }) + ) useHandler('initRequest', ({ data }) => { - const request = new RequestDetail(data) - if (request.initiator) { - request.initiator.stack.callFrames.forEach((frame) => { - const fileUrl = pathToFileURL(frame.url) - const scriptId = - resourceService.getScriptIdByUrl(fileUrl.href) ?? - resourceService.getScriptIdByUrl(frame.url) - if (scriptId) { - frame.scriptId = scriptId - } - }) - } - requests[request.id] = request + stateFor(data) }) - useHandler('registerRequest', ({ data }) => { - const request = new RequestDetail(data) - - requests[request.id] = request - // replace callFrames' scriptId - if (request.initiator) { - request.initiator.stack.callFrames.forEach((frame) => { - const fileUrl = pathToFileURL(frame.url) - const scriptId = - resourceService.getScriptIdByUrl(fileUrl.href) ?? - resourceService.getScriptIdByUrl(frame.url) - if (scriptId) { - frame.scriptId = scriptId - } - }) - } - devtool.updateTimestamp() - - const headerPipe = new RequestHeaderPipe(request.requestHeaders) - const contentType = headerPipe.getHeader('content-type') + useHandler('registerRequest', async ({ data }) => { + const state = stateFor(data) + await emitRequest(state) + }) - return devtool.send({ - method: 'Network.requestWillBeSent', - params: { - requestId: request.id, - frameId, - loaderId, - request: { - url: request.url, - method: request.method, - headers: headerPipe.getData(), - initialPriority: 'High', - mixedContentType: 'none', - ...(request.requestData ? { postData: request.requestData.toString() } : {}) - }, - timestamp: devtool.timestamp, - wallTime: request.requestStartTime, - initiator: request.initiator, - type: request.isWebSocket() ? 'WebSocket' : 'Fetch' - } - }) + useHandler('updateRequest', ({ data }) => { + stateFor(data) }) - useHandler('endRequest', ({ data }) => { - const request = new RequestDetail(data) - endRequest(request) + useHandler('responseReceived', async ({ data }) => { + const state = stateFor(data) + await emitResponse(state) }) - // Handle SSE response received - send responseReceived with type: EventSource before streaming messages - useHandler('eventSourceResponseReceived', ({ data }) => { - const request = new RequestDetail(data) - requests[request.id] = request - devtool.updateTimestamp() - const headers = new RequestHeaderPipe(request.responseHeaders) - const contentType = headers.getHeader('content-type') || 'text/event-stream' + useHandler('eventSourceResponseReceived', async ({ data }) => { + const state = stateFor(data) + await emitResponse(state, true) + }) - devtool.send({ - method: 'Network.responseReceived', - params: { - requestId: request.id, - frameId, - loaderId, - timestamp: devtool.timestamp, - type: 'EventSource', - response: { - url: request.url, - status: request.responseStatusCode, - statusText: request.responseStatusCode === 200 ? 'OK' : '', - headers: request.responseHeaders, - connectionReused: false, - encodedDataLength: 0, - charset: 'utf-8', - mimeType: toMimeType(contentType) - } - } - }) + useHandler('endRequest', async ({ data }) => { + const state = stateFor(data) + if ((state.request.responseStatusCode ?? 0) === 0) { + await fail({ request: state.request, errorText: 'Request failed' }) + return + } + const body = bufferFrom(state.request.responseData) ?? Buffer.alloc(0) + state.request.responseData = body + state.request.responseInfo = { + dataLength: state.request.responseInfo.dataLength ?? body.length, + encodedDataLength: state.request.responseInfo.encodedDataLength ?? body.length + } + await finish(state) }) - useHandler<{ - id: string - rawData: Array - statusCode: number - headers: Record - }>('responseData', ({ data }) => { - const { id, rawData: _rawData, statusCode, headers } = data - const request = getRequest(id) - const rawData = Buffer.from(_rawData) - if (request) { - request.responseInfo.encodedDataLength = rawData.length - tryDecompression(rawData, (decodedData) => { - request.responseData = decodedData - request.responseInfo.dataLength = decodedData.length - request.responseStatusCode = statusCode - request.responseHeaders = new RequestHeaderPipe(headers).getData() - updateRequest(request) - endRequest(request) - }) + useHandler('responseData', async ({ data }) => { + const state = states.get(data.id) + if (!state || state.terminal) return + const raw = bufferFrom(data.rawData) ?? Buffer.alloc(0) + const decoded = await decodeContent(raw, data.contentEncoding) + state.request.responseData = decoded + state.request.responseStatusCode = data.statusCode + state.request.responseStatusText = data.statusMessage + state.request.responseHeaders = new RequestHeaderPipe(data.headers).getData() + state.request.responseInfo = { + dataLength: decoded.length, + encodedDataLength: raw.length } + await finish(state) + }) + + useHandler('requestFailed', async ({ data }) => { + await fail(data) }) - // Handle Server-Sent Events (SSE) messages useHandler<{ requestId: string eventName: string eventId: string data: string - }>('eventSourceMessage', ({ data }) => { - const { requestId, eventName, eventId, data: eventData } = data - const request = getRequest(requestId) - if (!request) { - return - } - - devtool.updateTimestamp() - devtool.send({ + }>('eventSourceMessage', async ({ data }) => { + const state = states.get(data.requestId) + if (!state || state.terminal) return + await devtool.send({ method: 'Network.eventSourceMessageReceived', params: { - requestId, - timestamp: devtool.timestamp, - eventName, - eventId, - data: eventData + requestId: data.requestId, + timestamp: devtool.getTimestamp(), + eventName: data.eventName, + eventId: data.eventId, + data: data.data } }) }) return { - getRequest, - resourceService + getRequest(id: string) { + return states.get(id)?.request + }, + removeRequest(id: string) { + states.delete(id) + }, + resourceService, + requestCount() { + return states.size + } } }) diff --git a/packages/network-debugger/src/fork/module/websocket/index.test.ts b/packages/network-debugger/src/fork/module/websocket/index.test.ts index aec1d3d..9f5f516 100644 --- a/packages/network-debugger/src/fork/module/websocket/index.test.ts +++ b/packages/network-debugger/src/fork/module/websocket/index.test.ts @@ -4,31 +4,38 @@ import type { DevtoolMessageListener } from '../../request-center' import type { IncomingMessage } from 'http' // 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { mockCoreOn, mockDevtoolSend, registeredHandlers, mockUsePlugin, mockGetRequest } = - vi.hoisted(() => { - const handlers = new Map[]>() - return { - mockCoreOn: vi.fn((type: string, fn: DevtoolMessageListener) => { - if (!handlers.has(type)) { - handlers.set(type, []) - } - handlers.get(type)!.push(fn) - return () => { - const list = handlers.get(type) - if (list) { - const index = list.indexOf(fn) - if (index > -1) { - list.splice(index, 1) - } +const { + mockCoreOn, + mockDevtoolSend, + registeredHandlers, + mockUsePlugin, + mockGetRequest, + mockRemoveRequest +} = vi.hoisted(() => { + const handlers = new Map[]>() + return { + mockCoreOn: vi.fn((type: string, fn: DevtoolMessageListener) => { + if (!handlers.has(type)) { + handlers.set(type, []) + } + handlers.get(type)!.push(fn) + return () => { + const list = handlers.get(type) + if (list) { + const index = list.indexOf(fn) + if (index > -1) { + list.splice(index, 1) } } - }), - mockDevtoolSend: vi.fn().mockResolvedValue(undefined), - registeredHandlers: handlers, - mockUsePlugin: vi.fn(), - mockGetRequest: vi.fn() - } - }) + } + }), + mockDevtoolSend: vi.fn().mockResolvedValue(undefined), + registeredHandlers: handlers, + mockUsePlugin: vi.fn(), + mockGetRequest: vi.fn(), + mockRemoveRequest: vi.fn() + } +}) // Mock DevtoolServer 和 RequestCenter 模块 vi.mock('../../devtool', () => ({ @@ -113,6 +120,7 @@ describe('fork/module/websocket/index.ts', () => { // 设置 mockUsePlugin 返回 network 插件的 mock mockUsePlugin.mockReturnValue({ getRequest: mockGetRequest, + removeRequest: mockRemoveRequest, resourceService: { getScriptSource: vi.fn(), getLocalScriptList: vi.fn().mockReturnValue([]), @@ -489,6 +497,7 @@ describe('fork/module/websocket/index.ts', () => { requestId: 'ws-closed-test' }) }) + expect(mockRemoveRequest).toHaveBeenCalledWith('ws-closed-test') }) test('没有 requestId 时不发送', async () => { diff --git a/packages/network-debugger/src/fork/module/websocket/index.ts b/packages/network-debugger/src/fork/module/websocket/index.ts index 8ab9853..165f2a0 100644 --- a/packages/network-debugger/src/fork/module/websocket/index.ts +++ b/packages/network-debugger/src/fork/module/websocket/index.ts @@ -1,33 +1,15 @@ -import { IncomingMessage } from 'http' -import { CDPCallFrame } from '../../../common' -import { - formatHeadersToHeaderText, - getTimestamp, - parseRawHeaders, - stringifyNestedObj -} from '../../../utils' +import type { + LegacyWebSocketFrame, + LegacyWebSocketHandshake +} from '../../../legacy-bridge/contracts' +import { formatHeadersToHeaderText, parseRawHeaders, stringifyNestedObj } from '../../../utils' import { createPlugin, useHandler } from '../common' import { NetworkPluginCore } from '../network' -export interface WebSocketFrameSent { - requestId: string - response: { - payloadData: string - opcode: number - mask: boolean - } -} - export interface WebSocketCreated { requestId: string url: string - initiator: { - type: string - stack: { - callFrames: CDPCallFrame[] - } - } - response: IncomingMessage + response: LegacyWebSocketHandshake } export const websocketPlugin = createPlugin('websocket', ({ devtool, core }) => { @@ -44,7 +26,7 @@ export const websocketPlugin = createPlugin('websocket', ({ devtool, core }) => return } - const convertedResponseHeaders = parseRawHeaders(response.rawHeaders) + const convertedResponseHeaders = parseRawHeaders([...response.rawHeaders]) await devtool.send({ method: 'Network.webSocketCreated', @@ -57,7 +39,7 @@ export const websocketPlugin = createPlugin('websocket', ({ devtool, core }) => await devtool.send({ method: 'Network.webSocketWillSendHandshakeRequest', params: { - wallTime: Date.now(), + wallTime: Date.now() / 1000, timestamp: devtool.getTimestamp(), requestId: request.id, request: { @@ -90,7 +72,7 @@ export const websocketPlugin = createPlugin('websocket', ({ devtool, core }) => } ) - useHandler('Network.webSocketFrameSent', async ({ data }) => { + useHandler('Network.webSocketFrameSent', async ({ data }) => { if (!data.requestId) { return } @@ -101,12 +83,12 @@ export const websocketPlugin = createPlugin('websocket', ({ devtool, core }) => requestId: data.requestId, response: data.response, // Network中数据时间戳 - timestamp: getTimestamp() + timestamp: devtool.getTimestamp() } }) }) - useHandler('Network.webSocketFrameReceived', async ({ data }) => { + useHandler('Network.webSocketFrameReceived', async ({ data }) => { if (!data.requestId) { return } @@ -115,21 +97,25 @@ export const websocketPlugin = createPlugin('websocket', ({ devtool, core }) => params: { requestId: data.requestId, response: data.response, - timestamp: getTimestamp() + timestamp: devtool.getTimestamp() } }) }) - useHandler('Network.webSocketClosed', async ({ data }) => { + useHandler<{ requestId: string }>('Network.webSocketClosed', async ({ data }) => { if (!data.requestId) { return } - await devtool.send({ - method: 'Network.webSocketClosed', - params: { - requestId: data.requestId, - timestamp: getTimestamp() - } - }) + try { + await devtool.send({ + method: 'Network.webSocketClosed', + params: { + requestId: data.requestId, + timestamp: devtool.getTimestamp() + } + }) + } finally { + networkPlugin.removeRequest(data.requestId) + } }) }) diff --git a/packages/network-debugger/src/fork/pipe/body-transformer.ts b/packages/network-debugger/src/fork/pipe/body-transformer.ts index f3525fe..d1d35b0 100644 --- a/packages/network-debugger/src/fork/pipe/body-transformer.ts +++ b/packages/network-debugger/src/fork/pipe/body-transformer.ts @@ -15,28 +15,30 @@ export class BodyTransformer { const match = contentType.match(/charset=([^;]+)/) const encoding = match ? match[1] : 'utf-8' - const isBinary = !/text|json|xml/.test(contentType) - const body = (() => { - if (req.responseData === undefined || req.responseData === null) { - return void 0 - } - if (isBinary) { - return req.responseData.toString('base64') - } - if (Buffer.isBuffer(req.responseData)) { - return iconv.decode(req.responseData, encoding) - } - // if responseData is `JSON.stringify(Buffer)` => {"type":"Buffer","data":[1,2,3,4,5]} - // need to decode the Buffer + const isBinary = !/text|json|xml|javascript|x-www-form-urlencoded/.test(contentType) + const responseBuffer = (() => { + if (Buffer.isBuffer(req.responseData)) return req.responseData if ( typeof req.responseData === 'object' && + req.responseData !== null && 'type' in req.responseData && req.responseData.type === 'Buffer' && 'data' in req.responseData && Array.isArray(req.responseData.data) ) { - return iconv.decode(Buffer.from(req.responseData.data), encoding) + return Buffer.from(req.responseData.data) + } + if (req.responseData instanceof Uint8Array) return Buffer.from(req.responseData) + return undefined + })() + const body = (() => { + if (req.responseData === undefined || req.responseData === null) { + return void 0 + } + if (isBinary) { + return (responseBuffer ?? Buffer.from(String(req.responseData))).toString('base64') } + if (responseBuffer) return iconv.decode(responseBuffer, encoding) return req.responseData })() diff --git a/packages/network-debugger/src/fork/request-center.test.ts b/packages/network-debugger/src/fork/request-center.test.ts index c39161e..e696b12 100644 --- a/packages/network-debugger/src/fork/request-center.test.ts +++ b/packages/network-debugger/src/fork/request-center.test.ts @@ -1,554 +1,111 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import { EventEmitter } from 'events' -import { READY_MESSAGE } from '../common' -import type { PluginInstance } from './module/common' - -// 定义 DevtoolServer 实例的类型 -interface MockDevtoolServerInstance { - listeners: Array< - ( - error: unknown | null, - message?: { method: string; params?: Record; id?: string } - ) => void - > - getTimestamp: () => number - timestamp: number -} - -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { - mockWsServerClose, - mockDevtoolOn, - mockDevtoolSend, - mockDevtoolClose, - mockLog, - mockProcessSend, - wsServerInstances, - devtoolInstances, - onConnectCallbacks -} = vi.hoisted(() => { - // 使用 unknown[] 来避免类型问题,在测试中使用时再转换 - const wsInstances: unknown[] = [] - const devInstances: unknown[] = [] - - return { - mockWsServerClose: vi.fn(), - mockDevtoolOn: vi.fn(), - mockDevtoolSend: vi.fn().mockResolvedValue(undefined), - mockDevtoolClose: vi.fn(), - mockLog: vi.fn(), - mockProcessSend: vi.fn(), - wsServerInstances: wsInstances, - devtoolInstances: devInstances, - onConnectCallbacks: [] as Array<() => void> - } +import { once } from 'node:events' +import { createServer } from 'node:http' +import type { AddressInfo } from 'node:net' +import { afterEach, describe, expect, test, vi } from 'vitest' +import { WebSocket } from 'ws' +import { RequestDetail } from '../common' +import { createPlugin, useHandler } from './module/common' +import { RequestCenter } from './request-center' + +const centers = new Set() +const sockets = new Set() + +afterEach(async () => { + for (const socket of sockets) socket.terminate() + sockets.clear() + await Promise.all([...centers].map((center) => center.close())) + centers.clear() }) -// 类型安全的辅助函数 -function getWsServer(index: number): EventEmitter { - const instance = wsServerInstances[index] - if (instance instanceof EventEmitter) { - return instance - } - // 对于 mock 创建的实例,它们继承自 EventEmitter 但 TypeScript 不知道 - // 我们通过检查 emit 方法来验证 - const emitter = instance as { emit?: (event: string, ...args: unknown[]) => boolean } - if (emitter && typeof emitter.emit === 'function') { - return instance as EventEmitter - } - throw new Error('Invalid WebSocket server instance') +async function createCenter(options: ConstructorParameters[0] = {}) { + const center = new RequestCenter({ serverPort: 0, ...options }) + centers.add(center) + const target = await center.ready + return { center, target } } -function getDevtool(index: number): MockDevtoolServerInstance { - const instance = devtoolInstances[index] - const devtool = instance as { listeners?: unknown[] } - if (devtool && Array.isArray(devtool.listeners)) { - return instance as MockDevtoolServerInstance - } - throw new Error('Invalid DevtoolServer instance') +async function connect(url: string) { + const socket = new WebSocket(url) + sockets.add(socket) + await once(socket, 'open') + return socket } -// Mock ws 模块 -vi.mock('ws', () => { - const events = require('events') - - return { - Server: class MockServer extends events.EventEmitter { - close = mockWsServerClose - constructor() { - super() - wsServerInstances.push(this) - } - } - } -}) - -// Mock DevtoolServer -vi.mock('./devtool', () => { - return { - DevtoolServer: class MockDevtoolServer { - listeners: Array< - ( - error: unknown | null, - message?: { method: string; params?: Record; id?: string } - ) => void - > = [] - timestamp = 0 - - constructor(options: { onConnect?: () => void }) { - devtoolInstances.push(this) - // 保存 onConnect 回调以便测试 - if (options.onConnect) { - onConnectCallbacks.push(options.onConnect) - } - } - - on( - listener: ( - error: unknown | null, - message?: { method: string; params?: Record; id?: string } - ) => void - ) { - mockDevtoolOn(listener) - this.listeners.push(listener) - } - - send(message: unknown) { - return mockDevtoolSend(message) - } - - close() { - mockDevtoolClose() - } - - getTimestamp() { - return this.timestamp - } - } - } -}) - -// Mock utils 模块 -vi.mock('../utils', () => ({ - log: mockLog -})) +function nextJson(socket: WebSocket): Promise> { + return once(socket, 'message').then(([raw]) => JSON.parse(raw.toString())) +} -describe('fork/request-center.ts', () => { - const originalProcessSend = process.send +describe('RequestCenter', () => { + test('exposes its bound target and does not bind the deprecated application port', async () => { + const occupied = createServer() + occupied.listen(0, '127.0.0.1') + await once(occupied, 'listening') + const occupiedPort = (occupied.address() as AddressInfo).port - beforeEach(() => { - vi.clearAllMocks() - wsServerInstances.length = 0 - devtoolInstances.length = 0 - onConnectCallbacks.length = 0 - // 设置 process.send - process.send = mockProcessSend - }) + const { center, target } = await createCenter({ port: occupiedPort }) + expect(center.target).toEqual(target) + expect(target.discoveryUrl).toMatch(/^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) - afterEach(() => { - // 恢复 process.send - process.send = originalProcessSend + await new Promise((resolve) => occupied.close(() => resolve())) }) - describe('RequestCenter 类', () => { - describe('构造函数', () => { - test('创建 DevtoolServer 和 WebSocket Server', async () => { - const { RequestCenter } = await import('./request-center') - - new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - // 验证 DevtoolServer 被创建 - expect(devtoolInstances.length).toBe(1) - - // 验证 WebSocket Server 被创建 - expect(wsServerInstances.length).toBe(1) - }) - - test('使用正确的端口配置', async () => { - const { RequestCenter } = await import('./request-center') - - new RequestCenter({ - port: 6000, - serverPort: 6001 - }) - - // 验证 DevtoolServer 的 on 方法被调用 - expect(mockDevtoolOn).toHaveBeenCalled() - }) - - test('DevtoolServer 连接时触发 onConnect 监听器', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const onConnectListener = vi.fn() - center.on('onConnect', onConnectListener) - - // 触发 DevtoolServer 的 onConnect 回调 - // 这个回调是在构造函数中传递给 DevtoolServer 的 - expect(onConnectCallbacks.length).toBe(1) - onConnectCallbacks[0]() - - expect(onConnectListener).toHaveBeenCalledWith({ - data: null, - id: 'onConnect' - }) - }) - - test('DevtoolServer 连接时没有监听器不会报错', async () => { - const { RequestCenter } = await import('./request-center') - - new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - // 触发 DevtoolServer 的 onConnect 回调,但没有注册监听器 - expect(onConnectCallbacks.length).toBe(1) - // 不应该抛出错误 - expect(() => onConnectCallbacks[0]()).not.toThrow() - }) - }) - - describe('on 方法', () => { - test('注册消息监听器', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const listener = vi.fn() - center.on('test-method', listener) - - // 模拟 DevtoolServer 发送消息 - const devtool = getDevtool(0) - devtool.listeners.forEach((l) => - l(null, { method: 'test-method', params: { foo: 'bar' }, id: '123' }) - ) - - expect(listener).toHaveBeenCalledWith({ - data: { foo: 'bar' }, - id: '123' - }) - }) - - test('返回取消订阅函数', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const listener = vi.fn() - const unsubscribe = center.on('test-method', listener) - - // 取消订阅 - unsubscribe() - - // 模拟 DevtoolServer 发送消息 - const devtool = getDevtool(0) - devtool.listeners.forEach((l) => l(null, { method: 'test-method', params: { foo: 'bar' } })) - - // 监听器不应该被调用 - expect(listener).not.toHaveBeenCalled() - }) - - test('支持多个监听器订阅同一方法', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const listener1 = vi.fn() - const listener2 = vi.fn() - - center.on('test-method', listener1) - center.on('test-method', listener2) - - // 模拟 DevtoolServer 发送消息 - const devtool = getDevtool(0) - devtool.listeners.forEach((l) => l(null, { method: 'test-method', params: { foo: 'bar' } })) - - expect(listener1).toHaveBeenCalled() - expect(listener2).toHaveBeenCalled() - }) - - test('未注册的方法不触发监听器', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const listener = vi.fn() - center.on('test-method', listener) - - // 模拟 DevtoolServer 发送不同方法的消息 - const devtool = getDevtool(0) - devtool.listeners.forEach((l) => - l(null, { method: 'other-method', params: { foo: 'bar' } }) - ) - - expect(listener).not.toHaveBeenCalled() - }) - }) - - describe('DevtoolServer 错误处理', () => { - test('DevtoolServer 错误时记录日志', async () => { - const { RequestCenter } = await import('./request-center') - - new RequestCenter({ - port: 5270, - serverPort: 5271 - }) + test('routes structured capture events directly to plugin listeners', async () => { + const { center } = await createCenter() + const listener = vi.fn() + center.on('initRequest', listener) + const request = new RequestDetail() + request.url = 'https://example.test/capture' - // 模拟 DevtoolServer 发送错误 - const devtool = getDevtool(0) - const error = new Error('Test error') - devtool.listeners.forEach((l) => l(error)) - - expect(mockLog).toHaveBeenCalledWith(error) - }) - }) - - describe('loadPlugins 方法', () => { - test('加载插件并执行', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const pluginFn = vi.fn().mockReturnValue({ result: 'test' }) - const plugin: PluginInstance<{ result: string }> = Object.assign(pluginFn, { - id: 'test-plugin' - }) - - center.loadPlugins([plugin]) - - expect(pluginFn).toHaveBeenCalledWith({ - devtool: devtoolInstances[0], - core: center, - plugins: [plugin] - }) - }) - - test('加载多个插件', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const plugin1Fn = vi.fn().mockReturnValue({ result: 'test1' }) - const plugin1: PluginInstance<{ result: string }> = Object.assign(plugin1Fn, { - id: 'plugin-1' - }) - - const plugin2Fn = vi.fn().mockReturnValue({ result: 'test2' }) - const plugin2: PluginInstance<{ result: string }> = Object.assign(plugin2Fn, { - id: 'plugin-2' - }) - - center.loadPlugins([plugin1, plugin2]) - - expect(plugin1Fn).toHaveBeenCalled() - expect(plugin2Fn).toHaveBeenCalled() - }) - }) - - describe('usePlugin 方法', () => { - test('获取已加载插件的输出', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const pluginOutput = { result: 'test', value: 42 } - const pluginFn = vi.fn().mockReturnValue(pluginOutput) - const plugin: PluginInstance = Object.assign(pluginFn, { - id: 'test-plugin' - }) - - center.loadPlugins([plugin]) - - const output = center.usePlugin('test-plugin') - expect(output).toEqual(pluginOutput) - }) - - test('获取不存在的插件返回 null', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const pluginFn = vi.fn().mockReturnValue({ result: 'test' }) - const plugin: PluginInstance<{ result: string }> = Object.assign(pluginFn, { - id: 'test-plugin' - }) - - center.loadPlugins([plugin]) - - const output = center.usePlugin('non-existent-plugin') - expect(output).toBeUndefined() - }) - - test('未加载插件时返回 null', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) + center.handleCaptureEvent({ type: 'initRequest', data: request }) + await vi.waitFor(() => expect(listener).toHaveBeenCalledOnce()) + expect(listener).toHaveBeenCalledWith({ data: request }) + }) - const output = center.usePlugin('any-plugin') - expect(output).toBeNull() - }) + test('supplies source-client result/error helpers to command plugins, including id 0', async () => { + const { center, target } = await createCenter() + const handler = vi.fn(async ({ id, client, result }) => { + expect(id).toBe(0) + expect(client).toBeInstanceOf(WebSocket) + await result?.({ echoed: true }) }) + center.on('Test.echo', handler) + const socket = await connect(target.webSocketDebuggerUrl) - describe('close 方法', () => { - test('关闭 WebSocket Server 和 DevtoolServer', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - center.close() + const response = nextJson(socket) + socket.send(JSON.stringify({ id: 0, method: 'Test.echo', params: { value: 1 } })) + await expect(response).resolves.toEqual({ id: 0, result: { echoed: true } }) + expect(handler).toHaveBeenCalledOnce() + }) - expect(mockWsServerClose).toHaveBeenCalled() - expect(mockDevtoolClose).toHaveBeenCalled() - }) + test('loads plugins, exposes outputs and invokes cleanup during idempotent close', async () => { + const { center } = await createCenter() + const cleanup = vi.fn() + const plugin = createPlugin('owned-plugin', () => { + useHandler('capture-owned', () => undefined) + return cleanup }) - describe('WebSocket Server 消息处理', () => { - test('处理来自主进程的消息', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const listener = vi.fn() - center.on('initRequest', listener) - - // 模拟 WebSocket 连接 - const wsServer = getWsServer(0) - const mockWsClient = new EventEmitter() - - wsServer.emit('connection', mockWsClient) - - // 模拟接收消息 - const message = JSON.stringify({ - type: 'initRequest', - data: { id: 'test-id', url: 'http://example.com' } - }) - mockWsClient.emit('message', Buffer.from(message)) - - expect(listener).toHaveBeenCalledWith({ - data: { id: 'test-id', url: 'http://example.com' } - }) - }) - - test('未知消息类型不触发监听器', async () => { - const { RequestCenter } = await import('./request-center') - - const center = new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - const listener = vi.fn() - center.on('initRequest', listener) - - // 模拟 WebSocket 连接 - const wsServer = getWsServer(0) - const mockWsClient = new EventEmitter() - - wsServer.emit('connection', mockWsClient) - - // 模拟接收未知类型的消息 - const message = JSON.stringify({ - type: 'unknownType', - data: { foo: 'bar' } - }) - mockWsClient.emit('message', Buffer.from(message)) - - expect(listener).not.toHaveBeenCalled() - }) - - test('WebSocket Server 监听时发送 READY_MESSAGE', async () => { - const { RequestCenter } = await import('./request-center') - - new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - // 模拟 WebSocket Server 开始监听 - const wsServer = getWsServer(0) - wsServer.emit('listening') - - expect(mockProcessSend).toHaveBeenCalledWith(READY_MESSAGE) - }) - - test('process.send 不存在时不发送 READY_MESSAGE', async () => { - // 移除 process.send - const originalSend = process.send - process.send = undefined - - const { RequestCenter } = await import('./request-center') - - new RequestCenter({ - port: 5270, - serverPort: 5271 - }) - - // 模拟 WebSocket Server 开始监听 - const wsServer = getWsServer(0) - wsServer.emit('listening') - - // 不应该抛出错误 - expect(mockProcessSend).not.toHaveBeenCalled() - - // 恢复 process.send - process.send = originalSend - }) - }) + center.loadPlugins([plugin]) + expect(center.usePlugin('owned-plugin')).toBe(cleanup) + const firstClose = center.close() + const secondClose = center.close() + expect(secondClose).toBe(firstClose) + await firstClose + expect(cleanup).toHaveBeenCalledOnce() + }) - describe('默认端口配置', () => { - test('使用默认端口 PORT 当 port 为 0', async () => { - const { RequestCenter } = await import('./request-center') + test('notifies onConnect listeners for every reconnect', async () => { + const { center, target } = await createCenter() + const listener = vi.fn() + center.on('onConnect', listener) - // 当 port 为 0 时,应该使用默认的 PORT 常量 - new RequestCenter({ - port: 0, - serverPort: 5271 - }) + const first = await connect(target.webSocketDebuggerUrl) + await vi.waitFor(() => expect(listener).toHaveBeenCalledTimes(1)) + first.close() + await once(first, 'close') + sockets.delete(first) - // 验证 WebSocket Server 被创建 - expect(wsServerInstances.length).toBe(1) - }) - }) + await connect(target.webSocketDebuggerUrl) + await vi.waitFor(() => expect(listener).toHaveBeenCalledTimes(2)) }) }) diff --git a/packages/network-debugger/src/fork/request-center.ts b/packages/network-debugger/src/fork/request-center.ts index d0389cd..d9db658 100644 --- a/packages/network-debugger/src/fork/request-center.ts +++ b/packages/network-debugger/src/fork/request-center.ts @@ -1,138 +1,176 @@ -import { DevtoolServer } from './devtool' -import { PORT, READY_MESSAGE, RequestDetail } from '../common' -import { Server } from 'ws' +import type { WebSocket } from 'ws' +import type { DevtoolsTarget } from '../adapters/types' +import type { RequestDetail } from '../common' +import type { CdpId, LegacyCaptureEvent } from '../legacy-bridge/contracts' import { log } from '../utils' -import { PluginInstance } from './module/common' +import { + DevtoolServer, + type DevtoolCommandContext, + type DevtoolMessage, + type DevtoolMessageRequest +} from './devtool' +import type { PluginInstance } from './module/common' export interface RequestCenterInitOptions { - port: number - serverPort: number + /** @deprecated The application-side WebSocket transport has been removed. */ + port?: number + /** CDP discovery/target port. `0` selects a free loopback port. */ + serverPort?: number + /** Stable identity used to preserve the target URL across child restarts. */ + targetId?: string + title?: string autoOpenDevtool?: boolean requests?: Record } -/** - * @param data message data - * @param id? message id, Only for devtool message - * @param request? request detail - */ -export interface DevtoolMessageListener { - (props: { data: T; request?: RequestDetail; id?: string }): void +export interface DevtoolMessageListenerProps { + data: T + request?: RequestDetail + id?: CdpId + /** Present for frontend commands, absent for capture events. */ + client?: WebSocket + /** Present for frontend commands. First response wins. */ + reply?: DevtoolCommandContext['reply'] + /** Present for frontend commands. */ + result?: DevtoolCommandContext['result'] + /** Present for frontend commands. */ + error?: DevtoolCommandContext['error'] +} + +export interface DevtoolMessageListener { + (props: DevtoolMessageListenerProps): unknown | Promise } +/** + * Routes in-process Legacy capture events to plugins and exposes one standard + * CDP discovery/target server. There is no application-side TCP transport. + */ export class RequestCenter { - private devtool: DevtoolServer - private server: Server - private listeners: Record | undefined> = {} - private options: RequestCenterInitOptions - constructor(options: RequestCenterInitOptions) { - this.options = options - const { serverPort, autoOpenDevtool } = options + public readonly ready: Promise + private readonly devtool: DevtoolServer + private readonly listeners: Record | undefined> = {} + private plugins: PluginInstance[] = [] + private pluginOutputs?: Map + private closePromise?: Promise + private captureQueue: Promise = Promise.resolve() + + constructor(options: RequestCenterInitOptions = {}) { this.devtool = new DevtoolServer({ - port: serverPort, - autoOpenDevtool: autoOpenDevtool, + port: options.serverPort ?? 0, + targetId: options.targetId, + title: options.title, + autoOpenDevtool: options.autoOpenDevtool, onConnect: () => { - const listeners = this.listeners['onConnect'] - listeners?.forEach((listener) => - listener({ - data: null, - id: 'onConnect' - }) - ) + void this.dispatch('onConnect', { + data: null, + id: 'onConnect' + }).catch(log) } }) - this.devtool.on((error, message) => { + this.ready = this.devtool.ready + + this.devtool.on(async (error, message, context) => { if (error) { log(error) - return + return false } - - const listenerList = this.listeners[message.method] - if (!listenerList) { - return + if (!message || !context || !('method' in message) || typeof message.method !== 'string') { + return false } - - listenerList.forEach((listener) => { - listener({ - data: message.params, - id: message.id - }) - }) + const request = message as DevtoolMessageRequest + return this.dispatchCommand(request.method, request.params ?? {}, request.id, context) }) - this.server = this.initServer() } - #plugins: PluginInstance[] = [] - #pluginOutputs?: Map + get target(): DevtoolsTarget | undefined { + return this.devtool.target + } + public loadPlugins(plugins: PluginInstance[]) { - this.#plugins = plugins - this.#pluginOutputs = new Map() + this.plugins = plugins + this.pluginOutputs = new Map() - plugins.forEach((plugin) => { + for (const plugin of plugins) { const output = plugin({ devtool: this.devtool, core: this, - plugins: this.#plugins + plugins: this.plugins }) - this.#pluginOutputs!.set(plugin.id, output) - }) + this.pluginOutputs.set(plugin.id, output) + } } public usePlugin(id: string) { - if (!this.#pluginOutputs) { - return null as T - } - - const output = this.#pluginOutputs.get(id) - return output as T + if (!this.pluginOutputs) return null as T + return this.pluginOutputs.get(id) as T } - public on(method: string, listener: DevtoolMessageListener) { - if (!this.listeners[method]) { - this.listeners[method] = new Set() - } - this.listeners[method]!.add(listener) - return () => { - this.listeners[method]!.delete(listener) - } + public on(method: string, listener: DevtoolMessageListener) { + if (!this.listeners[method]) this.listeners[method] = new Set() + const listeners = this.listeners[method] as Set> + listeners.add(listener) + return () => listeners.delete(listener) } - public close() { - this.server.close() - this.devtool.close() + /** Deliver an IPC-decoded capture event without another serialization hop. */ + public handleCaptureEvent(event: LegacyCaptureEvent): void { + if (this.closePromise) return + this.captureQueue = this.captureQueue + .then(async () => { + await this.dispatch(event.type, { data: event.data }) + }) + .catch(log) } - private initServer() { - const server = new Server({ port: this.options.port || PORT }) - server.on('connection', (ws) => { - ws.on('message', (data) => { - const message = JSON.parse(data.toString()) - const _message = message as { type: string; data: any } - switch (_message.type) { - default: - { - const listenerList = this.listeners[_message.type] - if (!listenerList) { - // console.warn('unknown message type', _message.type) - break - } - - listenerList.forEach((listener) => { - listener({ - data: _message.data - }) - }) - } - break + public close(): Promise { + if (this.closePromise) return this.closePromise + this.closePromise = (async () => { + await this.captureQueue + if (this.pluginOutputs) { + for (const output of this.pluginOutputs.values()) { + if (typeof output === 'function') await output() } - }) - }) - server.on('listening', () => { - if (process.send) { - process.send(READY_MESSAGE) } - }) + for (const key of Object.keys(this.listeners)) this.listeners[key]?.clear() + await this.devtool.close() + })() + return this.closePromise + } + + private async dispatchCommand( + method: string, + params: Record, + id: CdpId | undefined, + context: DevtoolCommandContext + ): Promise { + if (id === undefined) return false + const listeners = this.listeners[method] + if (!listeners?.size) return false - return server + for (const listener of [...listeners]) { + await listener({ + data: params, + id, + client: context.client, + reply: context.reply, + result: context.result, + error: context.error + }) + } + return true + } + + private async dispatch( + method: string, + props: DevtoolMessageListenerProps + ): Promise { + const listeners = this.listeners[method] + if (!listeners?.size) return false + for (const listener of [...listeners]) await listener(props) + return true } } + +// Kept as a type-only compatibility export for plugins compiled against the +// previous RequestCenter module. +export type { DevtoolMessage } diff --git a/packages/network-debugger/src/fork/resource-service.test.ts b/packages/network-debugger/src/fork/resource-service.test.ts index 7769be3..819ae89 100644 --- a/packages/network-debugger/src/fork/resource-service.test.ts +++ b/packages/network-debugger/src/fork/resource-service.test.ts @@ -1,852 +1,165 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import { fileURLToPath, pathToFileURL } from 'url' -import path from 'path' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { pathToFileURL } from 'node:url' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { ResourceService, ScriptMap } from './resource-service' + +let fixtureDir = '' + +function fixture(name: string, source = '') { + const filePath = path.join(fixtureDir, name) + fs.mkdirSync(path.dirname(filePath), { recursive: true }) + fs.writeFileSync(filePath, source) + return filePath +} + +beforeEach(() => { + fixtureDir = fs.mkdtempSync(path.join(os.tmpdir(), 'nnd-resource-')) +}) -// 使用 vi.hoisted 确保变量在 mock 提升时可用 -const { - mockReadFileSync, - mockReaddirSync, - mockStatSync, - mockOpenSync, - mockReadSync, - mockCloseSync, - mockExistsSync, - fileContents, - directoryStructure -} = vi.hoisted(() => { - return { - mockReadFileSync: vi.fn(), - mockReaddirSync: vi.fn(), - mockStatSync: vi.fn(), - mockOpenSync: vi.fn(), - mockReadSync: vi.fn(), - mockCloseSync: vi.fn(), - mockExistsSync: vi.fn(), - fileContents: new Map(), - directoryStructure: new Map() - } +afterEach(() => { + vi.restoreAllMocks() + fs.rmSync(fixtureDir, { recursive: true, force: true }) }) -// Mock fs 模块 -vi.mock('fs', () => { - return { - default: { - readFileSync: mockReadFileSync, - readdirSync: mockReaddirSync, - statSync: mockStatSync, - openSync: mockOpenSync, - readSync: mockReadSync, - closeSync: mockCloseSync, - existsSync: mockExistsSync - }, - readFileSync: mockReadFileSync, - readdirSync: mockReaddirSync, - statSync: mockStatSync, - openSync: mockOpenSync, - readSync: mockReadSync, - closeSync: mockCloseSync, - existsSync: mockExistsSync - } +describe('ScriptMap', () => { + test('maintains bidirectional mappings and replaces a URL mapping', () => { + const map = new ScriptMap() + map.addMapping('file:///one.js', '1') + map.addMapping('file:///two.js', '2') + map.addMapping('file:///one.js', '3') + + expect(map.getScriptIdByUrl('file:///one.js')).toBe('3') + expect(map.getScriptIdByUrl('file:///two.js')).toBe('2') + expect(map.getUrlByScriptId('1')).toBe('file:///one.js') + expect(map.getUrlByScriptId('3')).toBe('file:///one.js') + expect(map.getScriptIdByUrl('file:///missing.js')).toBeUndefined() + }) }) -// Mock common 模块中的 __dirname -vi.mock('../common', () => ({ - __dirname: '/mock/common/dir' -})) +describe('ResourceService lazy registration', () => { + test('starts empty and never scans cwd eagerly', () => { + const unreferenced = fixture('unreferenced.js', 'console.log("not announced")') + const service = new ResourceService() -describe('fork/resource-service.ts', () => { - beforeEach(() => { - vi.clearAllMocks() - fileContents.clear() - directoryStructure.clear() + expect(service.getLocalScriptList()).toEqual([]) + expect(service.getUrlByScriptId('1')).toBeUndefined() + expect(fs.existsSync(unreferenced)).toBe(true) }) - afterEach(() => { - vi.restoreAllMocks() + test('registers an existing file only when its URL is requested', () => { + const filePath = fixture('app.js', 'export const value = 1') + const fileUrl = pathToFileURL(filePath).href + const service = new ResourceService() + + const id = service.getScriptIdByUrl(fileUrl) + + expect(id).toBe('1') + expect(service.getScriptIdByUrl(fileUrl)).toBe(id) + expect(service.getScriptIdByUrl(filePath)).toBe(id) + expect(service.getUrlByScriptId(id!)).toBe(fileUrl) + expect(service.getLocalScriptList()).toEqual([ + expect.objectContaining({ + scriptId: id, + url: fileUrl, + embedderName: fileUrl, + scriptLanguage: 'JavaScript' + }) + ]) }) - describe('ScriptMap 类', () => { - test('addMapping 添加 URL 和 scriptId 的双向映射', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() - - scriptMap.addMapping('file:///test/file.js', '1') - - expect(scriptMap.getScriptIdByUrl('file:///test/file.js')).toBe('1') - expect(scriptMap.getUrlByScriptId('1')).toBe('file:///test/file.js') - }) - - test('getUrlByScriptId 返回正确的 URL', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() - - scriptMap.addMapping('file:///path/to/script.js', '42') - - expect(scriptMap.getUrlByScriptId('42')).toBe('file:///path/to/script.js') - }) - - test('getUrlByScriptId 对于不存在的 scriptId 返回 undefined', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() - - expect(scriptMap.getUrlByScriptId('non-existent')).toBeUndefined() - }) - - test('getScriptIdByUrl 返回正确的 scriptId', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() + test('does not register missing files, directories, or invalid file URLs', () => { + const service = new ResourceService() - scriptMap.addMapping('file:///another/script.mjs', '100') - - expect(scriptMap.getScriptIdByUrl('file:///another/script.mjs')).toBe('100') - }) - - test('getScriptIdByUrl 对于不存在的 URL 返回 undefined', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() - - expect(scriptMap.getScriptIdByUrl('file:///non-existent.js')).toBeUndefined() - }) - - test('支持多个映射', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() - - scriptMap.addMapping('file:///file1.js', '1') - scriptMap.addMapping('file:///file2.js', '2') - scriptMap.addMapping('file:///file3.cjs', '3') - - expect(scriptMap.getScriptIdByUrl('file:///file1.js')).toBe('1') - expect(scriptMap.getScriptIdByUrl('file:///file2.js')).toBe('2') - expect(scriptMap.getScriptIdByUrl('file:///file3.cjs')).toBe('3') + expect(service.getScriptIdByUrl(path.join(fixtureDir, 'missing.js'))).toBeUndefined() + expect(service.getScriptIdByUrl(fixtureDir)).toBeUndefined() + expect(service.getScriptIdByUrl('file:///%zz')).toBeUndefined() + expect(service.getLocalScriptList()).toEqual([]) + }) - expect(scriptMap.getUrlByScriptId('1')).toBe('file:///file1.js') - expect(scriptMap.getUrlByScriptId('2')).toBe('file:///file2.js') - expect(scriptMap.getUrlByScriptId('3')).toBe('file:///file3.cjs') + test.each([ + ['entry.js', 'JavaScript'], + ['entry.mjs', 'JavaScript'], + ['entry.cjs', 'JavaScript'], + ['module.wasm', 'WebAssembly'], + ['entry.ts', 'Unknown'], + ['README', 'Unknown'] + ])('classifies %s as %s after lazy registration', (name, language) => { + const service = new ResourceService() + const filePath = fixture(name, 'content') + + const id = service.getScriptIdByUrl(filePath) + + expect(service.getLocalScriptList().find((script) => script.scriptId === id)).toMatchObject({ + scriptLanguage: language }) + }) - test('覆盖已存在的映射', async () => { - const { ScriptMap } = await import('./resource-service') - const scriptMap = new ScriptMap() + test('resolves an external source map relative to the script', () => { + const service = new ResourceService() + const mapPath = fixture('maps/app.js.map', '{}') + const scriptPath = fixture('maps/app.js', 'console.log(1)\n//# sourceMappingURL=app.js.map\n') - scriptMap.addMapping('file:///file.js', '1') - scriptMap.addMapping('file:///file.js', '2') + const id = service.getScriptIdByUrl(scriptPath) + const descriptor = service.getLocalScriptList().find((script) => script.scriptId === id) - // URL 映射到新的 scriptId - expect(scriptMap.getScriptIdByUrl('file:///file.js')).toBe('2') - // 旧的 scriptId 仍然映射到 URL - expect(scriptMap.getUrlByScriptId('1')).toBe('file:///file.js') - // 新的 scriptId 也映射到 URL - expect(scriptMap.getUrlByScriptId('2')).toBe('file:///file.js') + expect(descriptor).toMatchObject({ + sourceMapURL: pathToFileURL(mapPath).href, + hasSourceURL: true }) }) - describe('ResourceService 类', () => { - describe('getScriptIdByUrl 方法', () => { - test('返回正确的 scriptId', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - // 通过内部 scriptMap 添加映射(使用 traverseDirToMap 间接测试) - // 由于 scriptMap 是私有的,我们需要通过 getLocalScriptList 来添加映射 - // 或者直接测试返回 undefined 的情况 - expect(service.getScriptIdByUrl('file:///non-existent.js')).toBeUndefined() - }) - }) + test('preserves inline source maps and reports scripts without maps', () => { + const service = new ResourceService() + const inline = 'data:application/json;base64,eyJ2ZXJzaW9uIjozfQ==' + const inlinePath = fixture('inline.js', `code();\n//# sourceMappingURL=${inline}`) + const plainPath = fixture('plain.js', 'code();') - describe('getUrlByScriptId 方法', () => { - test('返回正确的 URL', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() + const inlineId = service.getScriptIdByUrl(inlinePath) + const plainId = service.getScriptIdByUrl(plainPath) + const scripts = service.getLocalScriptList() - expect(service.getUrlByScriptId('non-existent')).toBeUndefined() - }) + expect(scripts.find((script) => script.scriptId === inlineId)).toMatchObject({ + sourceMapURL: inline, + hasSourceURL: true }) - - describe('getScriptSource 方法', () => { - test('返回脚本源代码', async () => { - const { ResourceService, ScriptMap } = await import('./resource-service') - const service = new ResourceService() - - // 手动设置映射(通过反射访问私有属性) - const scriptMap = Reflect.get(service, 'scriptMap') as InstanceType - const testUrl = pathToFileURL('/test/script.js').href - scriptMap.addMapping(testUrl, '1') - - // 设置 mock 返回值 - mockReadFileSync.mockReturnValue('console.log("hello");') - - const source = service.getScriptSource('1') - - expect(source).toBe('console.log("hello");') - expect(mockReadFileSync).toHaveBeenCalledWith('/test/script.js', 'utf-8') - }) - - test('scriptId 不存在时返回 null', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - - const source = service.getScriptSource('non-existent') - - expect(source).toBeNull() - expect(consoleErrorSpy).toHaveBeenCalledWith( - 'No file path found for script ID: non-existent' - ) - - consoleErrorSpy.mockRestore() - }) - - test('读取文件失败时返回 null', async () => { - const { ResourceService, ScriptMap } = await import('./resource-service') - const service = new ResourceService() - - // 手动设置映射 - const scriptMap = Reflect.get(service, 'scriptMap') as InstanceType - const testUrl = pathToFileURL('/test/error-script.js').href - scriptMap.addMapping(testUrl, '2') - - // 设置 mock 抛出错误 - const readError = new Error('File not found') - mockReadFileSync.mockImplementation(() => { - throw readError - }) - - const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - - const source = service.getScriptSource('2') - - expect(source).toBeNull() - expect(consoleErrorSpy).toHaveBeenCalledWith('Error reading file:', readError) - - consoleErrorSpy.mockRestore() - }) + expect(scripts.find((script) => script.scriptId === plainId)).toMatchObject({ + sourceMapURL: '', + hasSourceURL: false }) + }) - describe('readLastLine 方法', () => { - test('读取文件最后一行', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const fileContent = 'line1\nline2\nline3\nlast line' - const filePath = '/test/file.txt' - const fileSize = Buffer.byteLength(fileContent) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation( - (fd: number, buffer: Buffer, offset: number, length: number, position: number) => { - const content = fileContent.slice(position, position + length) - buffer.write(content, offset) - return content.length - } - ) - mockCloseSync.mockImplementation(() => {}) - - const stat = { size: fileSize } as import('fs').Stats - - const result = service.readLastLine(filePath, stat, 1) - - expect(mockOpenSync).toHaveBeenCalledWith(filePath, 'r') - expect(mockCloseSync).toHaveBeenCalledWith(1) - expect(result).toBe('last line') - }) - - test('读取文件最后两行', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const fileContent = 'line1\nline2\nline3\nlast line' - const filePath = '/test/file.txt' - const fileSize = Buffer.byteLength(fileContent) - - mockOpenSync.mockReturnValue(2) - mockReadSync.mockImplementation( - (fd: number, buffer: Buffer, offset: number, length: number, position: number) => { - const content = fileContent.slice(position, position + length) - buffer.write(content, offset) - return content.length - } - ) - mockCloseSync.mockImplementation(() => {}) - - const stat = { size: fileSize } as import('fs').Stats - - const result = service.readLastLine(filePath, stat, 2) - - expect(result).toContain('line3') - expect(result).toContain('last line') - }) - - test('文件小于 chunkSize 时正确处理', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const fileContent = 'small file' - const filePath = '/test/small.txt' - const fileSize = Buffer.byteLength(fileContent) - - mockOpenSync.mockReturnValue(3) - mockReadSync.mockImplementation( - (fd: number, buffer: Buffer, offset: number, length: number, position: number) => { - const content = fileContent.slice(position, position + length) - buffer.write(content, offset) - return content.length - } - ) - mockCloseSync.mockImplementation(() => {}) - - const stat = { size: fileSize } as import('fs').Stats - - const result = service.readLastLine(filePath, stat, 1) - - expect(result).toBe('small file') - }) - - test('默认读取 1 行', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const fileContent = 'line1\nline2' - const filePath = '/test/default.txt' - const fileSize = Buffer.byteLength(fileContent) - - mockOpenSync.mockReturnValue(4) - mockReadSync.mockImplementation( - (fd: number, buffer: Buffer, offset: number, length: number, position: number) => { - const content = fileContent.slice(position, position + length) - buffer.write(content, offset) - return content.length - } - ) - mockCloseSync.mockImplementation(() => {}) - - const stat = { size: fileSize } as import('fs').Stats - - // 不传 totalLines 参数,使用默认值 1 - const result = service.readLastLine(filePath, stat) - - expect(result).toBe('line2') - }) - - test('需要多次读取时 startPos 变为负数的情况', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - // 创建一个大于 1024 字节的文件,这样 chunkSize = 1024 - // startPos = fileSize - 1024 - // 当 startPos -= 1024 后,如果 startPos < 0,则进入分支 - // 例如:fileSize = 1500,chunkSize = 1024,startPos = 476 - // 第一次循环后:startPos = 476 - 1024 = -548 < 0,进入分支 - // 分支内:startPos = 0,buffer = Buffer.alloc(1500 - 0) = Buffer.alloc(1500) - // 然后循环继续(如果 lines.length < totalLines) - - // 创建一个 1500 字节左右的文件 - const lineContent = 'x'.repeat(100) // 每行 100 个字符 - const lines = [] - for (let i = 0; i < 15; i++) { - lines.push(`${lineContent}${i.toString().padStart(2, '0')}`) - } - const fileContent = lines.join('\n') - const filePath = '/test/multiread.txt' - const fileSize = Buffer.byteLength(fileContent) // 约 1545 字节 - - mockOpenSync.mockReturnValue(5) - mockReadSync.mockImplementation( - (fd: number, buffer: Buffer, offset: number, length: number, position: number) => { - const actualPosition = Math.max(0, position) - const endPosition = Math.min(actualPosition + length, fileSize) - const content = fileContent.slice(actualPosition, endPosition) - buffer.write(content, offset) - return content.length - } - ) - mockCloseSync.mockImplementation(() => {}) - - const stat = { size: fileSize } as import('fs').Stats - - // 请求读取 15 行,这会导致循环执行多次 - // 第一次读取后,可能只有部分行,需要继续读取 - const result = service.readLastLine(filePath, stat, 15) - - // 验证结果包含最后的行 - const resultLines = result.split('\n') - expect(resultLines.length).toBe(15) - }) - }) - - describe('getLocalScriptList 方法', () => { - test('遍历目录并返回脚本列表', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - // 保存原始的 process.cwd - const originalCwd = process.cwd - - // Mock process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - // 设置目录结构 - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['index.js', 'utils.mjs', 'lib'] - } - if (dirPath === '/mock/project/lib') { - return ['helper.cjs'] - } - if (dirPath === '/mock/common/dir') { - return ['core.js'] - } - return [] - }) - - mockStatSync.mockImplementation((filePath: string) => { - if (filePath === '/mock/project/lib' || filePath === path.join('/mock/project', 'lib')) { - return { isDirectory: () => true, size: 0 } - } - return { isDirectory: () => false, size: 100 } - }) - - // Mock readLastLine 相关 - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - buffer.write('// no sourcemap') - return 15 - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - // 验证返回的脚本列表 - expect(scripts.length).toBeGreaterThan(0) - - // 验证脚本属性 - const jsScript = scripts.find((s) => s.url.includes('index.js')) - if (jsScript) { - expect(jsScript.scriptLanguage).toBe('JavaScript') - expect(jsScript.scriptId).toBeDefined() - } - - // 恢复 process.cwd - process.cwd = originalCwd - }) - - test('忽略 node_modules 目录', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['index.js', 'node_modules'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - // node_modules 不应该被访问 - if (dirPath.includes('node_modules')) { - throw new Error('Should not access node_modules') - } - return [] - }) - - mockStatSync.mockImplementation((filePath: string) => { - if (filePath.includes('node_modules')) { - return { isDirectory: () => true, size: 0 } - } - return { isDirectory: () => false, size: 100 } - }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - buffer.write('// code') - return 7 - }) - mockCloseSync.mockImplementation(() => {}) - - // 不应该抛出错误 - expect(() => service.getLocalScriptList()).not.toThrow() - - process.cwd = originalCwd - }) - - test('正确识别 JavaScript 文件扩展名', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['file.js', 'file.mjs', 'file.cjs'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 50 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - buffer.write('// code') - return 7 - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - const jsFiles = scripts.filter((s) => s.scriptLanguage === 'JavaScript') - expect(jsFiles.length).toBe(3) - - process.cwd = originalCwd - }) - - test('正确识别 WebAssembly 文件', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['module.wasm'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 1000 }) - - const scripts = service.getLocalScriptList() - - const wasmFile = scripts.find((s) => s.url.includes('.wasm')) - expect(wasmFile).toBeDefined() - expect(wasmFile?.scriptLanguage).toBe('WebAssembly') - - process.cwd = originalCwd - }) - - test('未知扩展名返回 Unknown', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['file.txt', 'file.json', 'file'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 50 }) - - const scripts = service.getLocalScriptList() - - const unknownFiles = scripts.filter((s) => s.scriptLanguage === 'Unknown') - expect(unknownFiles.length).toBe(3) - - process.cwd = originalCwd - }) - - test('文件名没有扩展名时返回 Unknown', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['Makefile', 'Dockerfile', 'README'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 50 }) - - const scripts = service.getLocalScriptList() - - // 所有没有扩展名的文件都应该返回 Unknown - scripts.forEach((script) => { - expect(script.scriptLanguage).toBe('Unknown') - }) - - process.cwd = originalCwd - }) - - test('处理带有 sourceMappingURL 的文件', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['bundle.js'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 200 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - const content = '// some code\n//# sourceMappingURL=bundle.js.map' - buffer.write(content) - return content.length - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - const bundleScript = scripts.find((s) => s.url.includes('bundle.js')) - expect(bundleScript).toBeDefined() - expect(bundleScript?.hasSourceURL).toBe(true) - expect(bundleScript?.sourceMapURL).toContain('bundle.js.map') - - process.cwd = originalCwd - }) - - test('处理内联 sourcemap (data: URL)', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['inline.js'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 500 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - const content = - '// code\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozfQ==' - buffer.write(content) - return content.length - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - const inlineScript = scripts.find((s) => s.url.includes('inline.js')) - expect(inlineScript).toBeDefined() - expect(inlineScript?.hasSourceURL).toBe(true) - expect(inlineScript?.sourceMapURL).toContain('data:application/json') - - process.cwd = originalCwd - }) - - test('处理 TypeScript 文件的 sourcemap', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['app.ts'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 300 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - const content = '// ts code\n//# sourceMappingURL=app.ts.map' - buffer.write(content) - return content.length - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - const tsScript = scripts.find((s) => s.url.includes('app.ts')) - expect(tsScript).toBeDefined() - expect(tsScript?.hasSourceURL).toBe(true) - - process.cwd = originalCwd - }) - - test('没有 sourcemap 的文件', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['simple.js'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 100 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - const content = 'console.log("hello");' - buffer.write(content) - return content.length - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - const simpleScript = scripts.find((s) => s.url.includes('simple.js')) - expect(simpleScript).toBeDefined() - expect(simpleScript?.hasSourceURL).toBe(false) - expect(simpleScript?.sourceMapURL).toBe('') - - process.cwd = originalCwd - }) - - test('scriptId 递增', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['a.js', 'b.js', 'c.js'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 50 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - buffer.write('// code') - return 7 - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - // 验证 scriptId 是递增的 - const scriptIds = scripts.map((s) => parseInt(s.scriptId, 10)) - for (let i = 1; i < scriptIds.length; i++) { - expect(scriptIds[i]).toBeGreaterThan(scriptIds[i - 1]) - } - - process.cwd = originalCwd - }) - - test('embedderName 与 url 相同', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['test.js'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) - - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 50 }) - - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - buffer.write('// code') - return 7 - }) - mockCloseSync.mockImplementation(() => {}) - - const scripts = service.getLocalScriptList() - - scripts.forEach((script) => { - expect(script.embedderName).toBe(script.url) - }) - - process.cwd = originalCwd - }) - - test('调用 getLocalScriptList 后可以通过 getScriptIdByUrl 获取 scriptId', async () => { - const { ResourceService } = await import('./resource-service') - const service = new ResourceService() - - const originalCwd = process.cwd - process.cwd = vi.fn().mockReturnValue('/mock/project') - - mockReaddirSync.mockImplementation((dirPath: string) => { - if (dirPath === '/mock/project') { - return ['mapped.js'] - } - if (dirPath === '/mock/common/dir') { - return [] - } - return [] - }) + test('returns source only for a lazily registered script', () => { + const source = 'export default "source"\n' + const filePath = fixture('source.js', source) + const service = new ResourceService() + const error = vi.spyOn(console, 'error').mockImplementation(() => undefined) - mockStatSync.mockReturnValue({ isDirectory: () => false, size: 50 }) + expect(service.getScriptSource('missing')).toBeNull() + const id = service.getScriptIdByUrl(filePath) + expect(service.getScriptSource(id!)).toBe(source) + expect(error).toHaveBeenCalledWith('No file path found for script ID: missing') + }) - mockOpenSync.mockReturnValue(1) - mockReadSync.mockImplementation((fd: number, buffer: Buffer) => { - buffer.write('// code') - return 7 - }) - mockCloseSync.mockImplementation(() => {}) + test('allocates stable increasing IDs without duplicating aliases', () => { + const first = fixture('first.js', '') + const second = fixture('second.js', '') + const service = new ResourceService() - const scripts = service.getLocalScriptList() + expect(service.getScriptIdByUrl(first)).toBe('1') + expect(service.getScriptIdByUrl(pathToFileURL(first).href)).toBe('1') + expect(service.getScriptIdByUrl(second)).toBe('2') + expect(service.getLocalScriptList()).toHaveLength(2) + }) - // 验证映射已建立 - const script = scripts[0] - if (script) { - expect(service.getScriptIdByUrl(script.url)).toBe(script.scriptId) - expect(service.getUrlByScriptId(script.scriptId)).toBe(script.url) - } + test('reads bounded final lines with and without a trailing newline', () => { + const filePath = fixture('tail.js', 'first\nsecond\nthird') + const service = new ResourceService() + const stat = fs.statSync(filePath) - process.cwd = originalCwd - }) - }) + expect(service.readLastLine(filePath, stat)).toBe('third') + expect(service.readLastLine(filePath, stat, 2)).toBe('second\nthird') + expect(service.readLastLine(filePath, stat, 0)).toBe('') }) }) diff --git a/packages/network-debugger/src/fork/resource-service.ts b/packages/network-debugger/src/fork/resource-service.ts index 553d85e..bc71d15 100644 --- a/packages/network-debugger/src/fork/resource-service.ts +++ b/packages/network-debugger/src/fork/resource-service.ts @@ -1,7 +1,15 @@ import fs from 'fs' import path from 'path' import { fileURLToPath, pathToFileURL } from 'url' -import { __dirname } from '../common' + +export interface ScriptDescriptor { + url: string + scriptLanguage: string + embedderName: string + scriptId: string + sourceMapURL: string + hasSourceURL: boolean +} // Actually Allowed Values: JavaScript, WebAssembly function getScriptLangByFileName(fileName: string) { @@ -32,6 +40,11 @@ export class ScriptMap { this.scriptIdToUrl.set(scriptId, filePath) } + /** Add an alternate lookup key without replacing the canonical file URL. */ + public addAlias(alias: string, scriptId: string) { + this.urlToScriptId.set(alias, scriptId) + } + public getUrlByScriptId(scriptId: string) { return this.scriptIdToUrl.get(scriptId) } @@ -44,14 +57,18 @@ export class ScriptMap { export class ResourceService { private scriptMap: ScriptMap private scriptIdCounter: number + private scripts: Map constructor() { this.scriptMap = new ScriptMap() this.scriptIdCounter = 0 + this.scripts = new Map() } public getScriptIdByUrl(url: string) { - return this.scriptMap.getScriptIdByUrl(url) + const existing = this.scriptMap.getScriptIdByUrl(url) + if (existing) return existing + return this.registerScript(url)?.scriptId } public getUrlByScriptId(scriptId: string) { @@ -82,86 +99,67 @@ export class ResourceService { * @returns string */ readLastLine(filePath: string, stat: fs.Stats, totalLines = 1) { - const fileSize = stat.size - const chunkSize = Math.min(1024, fileSize) - let startPos = fileSize - chunkSize - let buffer = Buffer.alloc(chunkSize) - let lines: string[] = [] - + if (totalLines <= 0 || stat.size === 0) return '' + // Source-map directives are short and live at EOF. A bounded tail read + // avoids the old zero-progress loop for files without a trailing newline. + const length = Math.min(stat.size, 64 * 1024) + const start = stat.size - length + const buffer = Buffer.alloc(length) const fd = fs.openSync(filePath, 'r') - - while (lines.length < totalLines && startPos >= 0) { - fs.readSync(fd, buffer, 0, chunkSize, startPos) - const chunk = buffer.toString('utf8') - lines = chunk.split('\n').concat(lines) - startPos -= chunkSize - if (startPos < 0) { - startPos = 0 - buffer = Buffer.alloc(fileSize - startPos) - } + try { + fs.readSync(fd, buffer, 0, length, start) + } finally { + fs.closeSync(fd) } + return buffer.toString('utf8').split(/\r?\n/).slice(-totalLines).join('\n') + } - fs.closeSync(fd) - - // Return the last `totalLines` lines - return lines.slice(-totalLines).join('\n') + public getLocalScriptList() { + return [...this.scripts.values()] } - private traverseDirToMap(directoryPath: string, ignoreList: string[] = ['node_modules']) { - const scriptList = [] - const stack = [directoryPath] - let scriptId = this.scriptIdCounter - - while (stack.length > 0) { - const currentPath = stack.pop()! - const items = fs.readdirSync(currentPath) - for (const item of items) { - if (ignoreList.includes(item)) { - continue - } - - const fullPath = path.join(currentPath, item) - const stats = fs.statSync(fullPath) - if (stats.isDirectory()) { - stack.push(fullPath) - } else { - const resolvedPath = path.resolve(fullPath) - const fileUrl = pathToFileURL(resolvedPath) - const scriptIdStr = `${++scriptId}` - let sourceMapURL = '' - if (/\.(js|ts)$/.test(resolvedPath)) { - const lastChunkCode = this.readLastLine(fullPath, stats, 2) - const sourceMapFilePathMatch = lastChunkCode.match(/sourceMappingURL=(.+)$/m)?.[1] ?? '' - sourceMapURL = sourceMapFilePathMatch - ? sourceMapFilePathMatch.startsWith('data:') - ? // inline sourcemap - sourceMapFilePathMatch - : // file path - pathToFileURL(path.join(currentPath, sourceMapFilePathMatch)).href - : '' - } - const url = fileUrl.href - const scriptLanguage = getScriptLangByFileName(url) - scriptList.push({ - url, - scriptLanguage, - embedderName: fileUrl.href, - scriptId: scriptIdStr, - sourceMapURL: sourceMapURL, - hasSourceURL: Boolean(sourceMapURL) - }) - this.scriptMap.addMapping(url, scriptIdStr) - } + private registerScript(input: string): ScriptDescriptor | undefined { + let filePath: string + try { + filePath = input.startsWith('file:') ? fileURLToPath(input) : path.resolve(input) + } catch { + return undefined + } + let stat: fs.Stats + try { + stat = fs.statSync(filePath) + } catch { + return undefined + } + if (!stat || typeof stat.isFile !== 'function' || !stat.isFile()) return undefined + + const url = pathToFileURL(filePath).href + const known = this.scriptMap.getScriptIdByUrl(url) + if (known) return this.scripts.get(known) + + let sourceMapURL = '' + if (/\.(?:[cm]?js|ts)$/i.test(filePath)) { + const tail = this.readLastLine(filePath, stat, 2) + const sourceMap = tail.match(/sourceMappingURL=(.+)$/m)?.[1]?.trim() + if (sourceMap) { + sourceMapURL = sourceMap.startsWith('data:') + ? sourceMap + : pathToFileURL(path.resolve(path.dirname(filePath), sourceMap)).href } } - this.scriptIdCounter += scriptList.length - return scriptList - } - - public getLocalScriptList() { - const projectScripts = this.traverseDirToMap(process.cwd()) - const coreScripts = this.traverseDirToMap(__dirname) - return [...projectScripts, ...coreScripts] + const scriptId = `${++this.scriptIdCounter}` + const descriptor: ScriptDescriptor = { + url, + scriptLanguage: getScriptLangByFileName(url), + embedderName: url, + scriptId, + sourceMapURL, + hasSourceURL: Boolean(sourceMapURL) + } + this.scriptMap.addMapping(url, scriptId) + if (input !== url) this.scriptMap.addAlias(input, scriptId) + this.scripts.set(scriptId, descriptor) + return descriptor } } diff --git a/packages/network-debugger/src/legacy-bridge/client.test.ts b/packages/network-debugger/src/legacy-bridge/client.test.ts new file mode 100644 index 0000000..478eec0 --- /dev/null +++ b/packages/network-debugger/src/legacy-bridge/client.test.ts @@ -0,0 +1,497 @@ +import { EventEmitter } from 'node:events' +import type { ChildProcess, ForkOptions } from 'node:child_process' +import { describe, expect, test, vi } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' +import type { LegacyCaptureEvent, LegacyChildMessage } from './contracts' +import { + LEGACY_BRIDGE_OPTIONS_ENV, + LegacyBridgeClient, + sanitizeLegacyEnvironment, + sanitizeLegacyExecArgv, + tokenizeNodeOptions +} from './client' + +class FakeChild extends EventEmitter { + pid = 42_000 + connected = true + killed = false + exitCode: number | null = null + signalCode: NodeJS.Signals | null = null + readonly sent: unknown[] = [] + readonly signals: Array = [] + readonly sendCallbacks: Array<(error: Error | null) => void> = [] + refCalls = 0 + unrefCalls = 0 + channelRefCalls = 0 + channelUnrefCalls = 0 + readonly channel = { + ref: () => { + this.channelRefCalls += 1 + }, + unref: () => { + this.channelUnrefCalls += 1 + } + } + + constructor( + private readonly autoDisposeAck = true, + private readonly manualSendCallbacks = false + ) { + super() + } + + send(message: unknown, callback?: (error: Error | null) => void): boolean { + if (!this.connected) throw new Error('disconnected') + this.sent.push(message) + if ( + this.autoDisposeAck && + message && + typeof message === 'object' && + 'type' in message && + (message as { type: unknown }).type === 'dispose' + ) { + queueMicrotask(() => { + this.emit('message', { type: 'disposed' } satisfies LegacyChildMessage) + this.exitCode = 0 + this.emit('exit', 0, null) + }) + } + if (callback) { + this.sendCallbacks.push(callback) + if (!this.manualSendCallbacks) queueMicrotask(() => callback(null)) + } + return true + } + + disconnect(): void { + this.connected = false + } + + ref(): void { + this.refCalls += 1 + } + + unref(): void { + this.unrefCalls += 1 + } + + kill(signal?: NodeJS.Signals | number): boolean { + this.signals.push(signal) + this.killed = true + this.connected = false + if (signal === 'SIGKILL') { + this.signalCode = 'SIGKILL' + queueMicrotask(() => this.emit('exit', null, 'SIGKILL')) + } + return true + } + + child(): ChildProcess { + return this as unknown as ChildProcess + } +} + +function target(port: number): DevtoolsTarget { + return { + id: 'legacy', + title: 'Legacy', + type: 'node', + url: '', + webSocketDebuggerUrl: `ws://127.0.0.1:${port}/devtools/page/legacy`, + discoveryUrl: `http://127.0.0.1:${port}/json/list` + } +} + +function ready(child: FakeChild, port: number): void { + child.emit('message', { type: 'ready', target: target(port) } satisfies LegacyChildMessage) +} + +function harness( + overrides: { + maxRestarts?: number + queueLimit?: number + autoDisposeAck?: boolean + shutdownGraceMs?: number + shutdownForceMs?: number + recoveryForceKillMs?: number + manualSendCallbacks?: boolean + } = {} +) { + const children: FakeChild[] = [] + const calls: Array<{ modulePath: string; args: string[]; options: ForkOptions }> = [] + const fork = vi.fn((modulePath: string, args: string[], options: ForkOptions) => { + const child = new FakeChild(overrides.autoDisposeAck, overrides.manualSendCallbacks) + children.push(child) + calls.push({ modulePath, args, options }) + return child.child() + }) + const client = new LegacyBridgeClient( + { host: '127.0.0.1', targetPort: 0 }, + { + fork, + childEntry: '/fixture/fork.js', + execArgv: [ + '--inspect-wait=127.0.0.1:0', + '--experimental-network-inspection', + '--watch', + '--import=/project/dist/register.mjs', + '--import', + 'safe-observer', + '--max-old-space-size=2048' + ], + env: { + NODE_OPTIONS: '--trace-warnings --import="/project/dist/register.mjs" --require safe-hook' + }, + maxRestarts: overrides.maxRestarts, + queueLimit: overrides.queueLimit, + shutdownGraceMs: overrides.shutdownGraceMs, + shutdownForceMs: overrides.shutdownForceMs, + recoveryForceKillMs: overrides.recoveryForceKillMs + } + ) + return { client, children, calls, fork } +} + +describe('LegacyBridgeClient', () => { + test('forks synchronously with advanced IPC and sanitized child flags/environment', async () => { + const { client, children, calls } = harness() + + expect(children).toHaveLength(1) + expect(calls[0]).toMatchObject({ + modulePath: '/fixture/fork.js', + args: [], + options: { + serialization: 'advanced', + execArgv: ['--import', 'safe-observer', '--max-old-space-size=2048'], + stdio: ['inherit', 'inherit', 'inherit', 'ipc'] + } + }) + expect(calls[0].options.env?.NODE_OPTIONS).toBe('--trace-warnings --require safe-hook') + expect(JSON.parse(calls[0].options.env?.[LEGACY_BRIDGE_OPTIONS_ENV] ?? '{}')).toMatchObject({ + host: '127.0.0.1', + targetPort: 0 + }) + await client.dispose() + }) + + test('queues an immutable first event until ready and preserves Buffer values', async () => { + const { client, children } = harness() + const rawData = Buffer.from('original') + const event: LegacyCaptureEvent = { + type: 'responseData', + data: { id: 'request-1', rawData, statusCode: 200, headers: {} } + } + + await client.send(event) + rawData.fill(0) + expect(children[0].sent).toEqual([]) + + ready(children[0], 43101) + await expect(client.ready).resolves.toMatchObject({ webSocketDebuggerUrl: expect.any(String) }) + expect(children[0].sent).toHaveLength(1) + const sent = children[0].sent[0] as { + type: 'capture' + event: Extract + } + expect(sent.type).toBe('capture') + expect(Buffer.isBuffer(sent.event.data.rawData)).toBe(true) + expect(sent.event.data.rawData.toString()).toBe('original') + await client.dispose() + }) + + test('releases ready child references and restores them for explicit disposal', async () => { + const { client, children } = harness() + const child = children[0] + + expect(child.unrefCalls).toBe(0) + expect(child.channelUnrefCalls).toBe(0) + ready(child, 43108) + await client.ready + expect(child.unrefCalls).toBe(1) + expect(child.channelUnrefCalls).toBe(1) + + const disposing = client.dispose() + expect(child.refCalls).toBe(1) + expect(child.channelRefCalls).toBe(1) + await disposing + }) + + test('bounds startup capture while preserving the earliest request event', async () => { + const { client, children } = harness({ queueLimit: 1 }) + const diagnostics: string[] = [] + client.onDiagnostic((diagnostic) => diagnostics.push(diagnostic.code)) + const first = { type: 'initRequest', data: { id: 'first' } } as LegacyCaptureEvent + const overflow = { type: 'initRequest', data: { id: 'overflow' } } as LegacyCaptureEvent + + await client.send(first) + await client.send(overflow) + ready(children[0], 43102) + + const sent = children[0].sent[0] as { event: { data: { id: string } } } + expect(sent.event.data.id).toBe('first') + expect(diagnostics).toContain('NND_LEGACY_CAPTURE_QUEUE_FULL') + await client.dispose() + }) + + test('recovers on the original target port and flushes events captured during restart', async () => { + const { client, children, calls } = harness() + const diagnostics: string[] = [] + client.onDiagnostic((diagnostic) => diagnostics.push(diagnostic.code)) + ready(children[0], 43103) + await client.ready + + children[0].emit('exit', 1, null) + expect(children).toHaveLength(2) + expect(JSON.parse(calls[1].options.env?.[LEGACY_BRIDGE_OPTIONS_ENV] ?? '{}').targetPort).toBe( + 43103 + ) + expect(JSON.parse(calls[1].options.env?.[LEGACY_BRIDGE_OPTIONS_ENV] ?? '{}').targetId).toBe( + JSON.parse(calls[0].options.env?.[LEGACY_BRIDGE_OPTIONS_ENV] ?? '{}').targetId + ) + await client.send({ type: 'initRequest', data: { id: 'during-restart' } } as LegacyCaptureEvent) + expect(children[1].sent).toEqual([]) + + ready(children[1], 43103) + expect((children[1].sent[0] as any).event.data.id).toBe('during-restart') + expect(diagnostics).toEqual( + expect.arrayContaining(['NND_LEGACY_CHILD_RESTARTING', 'NND_LEGACY_CHILD_RECOVERED']) + ) + await client.dispose() + }) + + test('waits for an errored child to exit before rebinding instead of exhausting retries', async () => { + const { client, children, calls } = harness({ recoveryForceKillMs: 50 }) + ready(children[0], 43106) + await client.ready + const first = children[0] + + first.emit('error', new Error('ipc failure while process is still alive')) + expect(first.signals).toEqual(['SIGTERM']) + expect(children).toHaveLength(1) + await client.send({ + type: 'initRequest', + data: { id: 'held-until-exit' } + } as LegacyCaptureEvent) + + first.emit('exit', 1, null) + expect(children).toHaveLength(2) + expect(JSON.parse(calls[1].options.env?.[LEGACY_BRIDGE_OPTIONS_ENV] ?? '{}').targetPort).toBe( + 43106 + ) + expect(children[1].sent).toEqual([]) + ready(children[1], 43106) + expect((children[1].sent[0] as any).event.data.id).toBe('held-until-exit') + await client.dispose() + }) + + test('requeues async send callback failures in order and starts only one recovery', async () => { + const { client, children } = harness({ + manualSendCallbacks: true, + recoveryForceKillMs: 50 + }) + const diagnostics: string[] = [] + client.onDiagnostic((diagnostic) => diagnostics.push(diagnostic.code)) + ready(children[0], 43107) + await client.ready + const first = children[0] + + await client.send({ type: 'initRequest', data: { id: 'send-a' } } as LegacyCaptureEvent) + await client.send({ type: 'initRequest', data: { id: 'send-b' } } as LegacyCaptureEvent) + expect(first.sendCallbacks).toHaveLength(2) + + first.sendCallbacks[0](new Error('first async send failed')) + first.sendCallbacks[1](new Error('second async send failed')) + expect(first.signals).toEqual(['SIGTERM']) + expect(first.listenerCount('exit')).toBe(1) + expect(children).toHaveLength(1) + + first.emit('exit', 1, null) + expect(children).toHaveLength(2) + expect(diagnostics.filter((code) => code === 'NND_LEGACY_CHILD_RESTARTING')).toHaveLength(1) + ready(children[1], 43107) + const replayedIds = children[1].sent + .filter((message: any) => message.type === 'capture') + .map((message: any) => message.event.data.id) + expect(replayedIds).toEqual(['send-a', 'send-b']) + await client.dispose() + }) + + test('rejects initial ready after exactly three bounded restart attempts', async () => { + const { client, children } = harness({ maxRestarts: 3 }) + const diagnostics: string[] = [] + const onFailure = vi.fn() + client.onDiagnostic((diagnostic) => diagnostics.push(diagnostic.code)) + client.onFailure(onFailure) + for (let index = 0; index < 4; index += 1) { + children[index].emit('exit', 1, null) + } + + expect(children).toHaveLength(4) + await expect(client.ready).rejects.toMatchObject({ + code: 'NND_LEGACY_CHILD_START_FAILED' + }) + expect(diagnostics.filter((code) => code === 'NND_LEGACY_CHILD_RESTARTING')).toHaveLength(3) + expect(diagnostics.at(-1)).toBe('NND_LEGACY_CHILD_START_FAILED') + expect(onFailure).toHaveBeenCalledOnce() + expect(onFailure).toHaveBeenCalledWith( + expect.objectContaining({ code: 'NND_LEGACY_CHILD_START_FAILED' }) + ) + const replayedFailure = vi.fn() + client.onFailure(replayedFailure) + expect(replayedFailure).toHaveBeenCalledWith( + expect.objectContaining({ code: 'NND_LEGACY_CHILD_START_FAILED' }) + ) + }) + + test('forwards and replays structured diagnostics reported by the child', async () => { + const { client, children } = harness() + children[0].emit('message', { + type: 'diagnostic', + diagnostic: { + code: 'NND_LEGACY_CHILD_NOTICE', + level: 'warn', + message: 'child notice', + details: { generation: 1 } + } + } satisfies LegacyChildMessage) + + const listener = vi.fn() + client.onDiagnostic(listener) + expect(listener).toHaveBeenCalledWith({ + code: 'NND_LEGACY_CHILD_NOTICE', + level: 'warn', + message: 'child notice', + details: { generation: 1 } + }) + await client.dispose() + }) + + test('never silently accepts a changed target during recovery', async () => { + const { client, children } = harness({ maxRestarts: 1 }) + const diagnostics: string[] = [] + const onFailure = vi.fn() + client.onDiagnostic((diagnostic) => diagnostics.push(diagnostic.code)) + client.onFailure(onFailure) + ready(children[0], 43104) + await client.ready + children[0].emit('exit', 1, null) + + ready(children[1], 43105) + // A mismatched child must fully exit before the fixed port can be retried. + children[1].emit('exit', 1, null) + expect(children).toHaveLength(2) + expect(diagnostics).toEqual( + expect.arrayContaining(['NND_LEGACY_TARGET_CHANGED', 'NND_LEGACY_CHILD_RECOVERY_FAILED']) + ) + expect(onFailure).toHaveBeenCalledWith( + expect.objectContaining({ code: 'NND_LEGACY_CHILD_RECOVERY_FAILED' }) + ) + await client.dispose() + }) + + test('dispose clears queued work/listeners and cannot trigger a restart', async () => { + const { client, children } = harness() + await client.send({ type: 'initRequest', data: { id: 'queued' } } as LegacyCaptureEvent) + const first = children[0] + + await client.dispose() + expect(first.sent).toContainEqual({ type: 'dispose' }) + expect(first.connected).toBe(false) + expect(first.signals).toEqual([]) + expect(first.listenerCount('message')).toBe(0) + first.emit('exit', 1, null) + await client.send({ type: 'initRequest', data: { id: 'ignored' } } as LegacyCaptureEvent) + expect(children).toHaveLength(1) + }) + + test('uses bounded SIGTERM/SIGKILL fallback and waits for child exit without an ack', async () => { + const { client, children } = harness({ + autoDisposeAck: false, + shutdownGraceMs: 5, + shutdownForceMs: 10 + }) + const first = children[0] + + let resolved = false + const disposing = client.dispose().then(() => { + resolved = true + }) + first.emit('disconnect') + await Promise.resolve() + expect(resolved).toBe(false) + await disposing + + expect(first.sent).toContainEqual({ type: 'dispose' }) + expect(first.signals).toEqual(['SIGTERM', 'SIGKILL']) + expect(first.listenerCount('exit')).toBe(0) + expect(first.listenerCount('message')).toBe(0) + }) +}) + +describe('Legacy child option sanitization', () => { + test('removes inspector/watch/project preload/tsx while keeping unrelated flags', () => { + expect( + sanitizeLegacyExecArgv([ + '--inspect', + '--inspect-port', + '9229', + '--experimental-network-inspection', + '--watch-path=src', + '--watch-kill-signal', + 'SIGTERM', + '--import=node-network-devtools/register', + '--loader', + 'tsx', + '--require=safe-hook', + '--trace-warnings' + ]) + ).toEqual(['--require=safe-hook', '--trace-warnings']) + }) + + test('tokenizes quoted NODE_OPTIONS and sanitizes a copy without mutating the parent', () => { + const env = { + NODE_OPTIONS: '--import="/some path/dist/register.mjs" --require "safe hook"' + } + expect(tokenizeNodeOptions(env.NODE_OPTIONS)).toEqual([ + '--import=/some path/dist/register.mjs', + '--require', + 'safe hook' + ]) + const child = sanitizeLegacyEnvironment(env) + expect(child.NODE_OPTIONS).toBe('--require "safe hook"') + expect(env.NODE_OPTIONS).toContain('register.mjs') + }) + + test.each([ + [['-e', 'console.log("short eval")', '--trace-warnings']], + [['--eval', 'console.log("long eval")', '--trace-warnings']], + [['-e=console.log("equals eval")', '--trace-warnings']], + [['--eval=console.log("equals eval")', '--trace-warnings']], + [['-econsole.log("attached eval")', '--trace-warnings']], + [['-p', 'process.version', '--trace-warnings']], + [['--print', 'process.version', '--trace-warnings']], + [['-p=process.version', '--trace-warnings']], + [['--print=process.version', '--trace-warnings']], + [['-pprocess.version', '--trace-warnings']], + [['--input-type', 'module', '--trace-warnings']], + [['--input-type=module', '--trace-warnings']] + ])('removes parent-only string input options from %j', (execArgv) => { + expect(sanitizeLegacyExecArgv(execArgv)).toEqual(['--trace-warnings']) + }) + + test('preserves Windows path separators while still handling quoted spaces', () => { + const nodeOptions = String.raw`--require="C:\Program Files\safe\hook.cjs" --import=C:\repo\node-network-devtools\dist\register.mjs --trace-warnings` + expect(tokenizeNodeOptions(nodeOptions)).toEqual([ + String.raw`--require=C:\Program Files\safe\hook.cjs`, + String.raw`--import=C:\repo\node-network-devtools\dist\register.mjs`, + '--trace-warnings' + ]) + + const child = sanitizeLegacyEnvironment({ NODE_OPTIONS: nodeOptions }) + expect(child.NODE_OPTIONS).not.toContain('register.mjs') + expect(tokenizeNodeOptions(child.NODE_OPTIONS ?? '')).toEqual([ + String.raw`--require=C:\Program Files\safe\hook.cjs`, + '--trace-warnings' + ]) + }) +}) diff --git a/packages/network-debugger/src/legacy-bridge/client.ts b/packages/network-debugger/src/legacy-bridge/client.ts new file mode 100644 index 0000000..ff511cd --- /dev/null +++ b/packages/network-debugger/src/legacy-bridge/client.ts @@ -0,0 +1,722 @@ +import { fork as nodeFork, type ChildProcess, type ForkOptions } from 'node:child_process' +import { randomUUID } from 'node:crypto' +import { resolve as resolvePath } from 'node:path' +import { deserialize, serialize } from 'node:v8' +import { __dirname } from '../common' +import type { DevtoolsTarget, Diagnostic } from '../adapters/types' +import type { + LegacyBridgeOptions, + LegacyCaptureEvent, + LegacyChildMessage, + LegacyParentMessage +} from './contracts' + +const DEFAULT_MAX_RESTARTS = 3 +const DEFAULT_QUEUE_LIMIT = 1_024 +const DIAGNOSTIC_HISTORY_LIMIT = 64 +export const LEGACY_BRIDGE_OPTIONS_ENV = 'NND_LEGACY_BRIDGE_OPTIONS' + +type ForkProcess = (modulePath: string, args: string[], options: ForkOptions) => ChildProcess + +export interface LegacyBridgeClientDependencies { + fork?: ForkProcess + childEntry?: string + execArgv?: readonly string[] + env?: NodeJS.ProcessEnv + maxRestarts?: number + queueLimit?: number + shutdownGraceMs?: number + shutdownForceMs?: number + recoveryForceKillMs?: number +} + +export type DiagnosticListener = (diagnostic: Diagnostic) => void +export type FailureListener = (error: LegacyBridgeError) => void + +interface QueuedParentMessage { + sequence: number + message: LegacyParentMessage +} + +export class LegacyBridgeError extends Error { + constructor( + readonly code: + | 'NND_LEGACY_CHILD_START_FAILED' + | 'NND_LEGACY_CHILD_RECOVERY_FAILED' + | 'NND_LEGACY_DISPOSED', + message: string, + readonly details: Readonly> = {} + ) { + super(message) + this.name = 'LegacyBridgeError' + } +} + +function optionName(argument: string): string { + const separator = argument.indexOf('=') + return separator === -1 ? argument : argument.slice(0, separator) +} + +function optionValue(argument: string): string | undefined { + const separator = argument.indexOf('=') + return separator === -1 ? undefined : argument.slice(separator + 1) +} + +function isProjectPreload(specifier: string): boolean { + const normalized = specifier.replace(/\\/g, '/').toLowerCase() + return ( + normalized === 'tsx' || + normalized.startsWith('tsx/') || + normalized.includes('/node_modules/tsx/') || + normalized === 'node-network-devtools/register' || + normalized === 'node-network-devtools/preload' || + normalized.includes('/node-network-devtools/dist/register.mjs') || + normalized.includes('/node-network-devtools/src/preload/register.') || + normalized.includes('/node-network-devtools/src/preload/index.') || + /(?:^|\/)dist\/register\.mjs(?:[?#].*)?$/.test(normalized) || + /(?:^|\/)src\/preload\/(?:register|index)\.[cm]?[jt]s(?:[?#].*)?$/.test(normalized) + ) +} + +/** + * Remove parent-only runtime flags before forking the Legacy backend. + * + * The preload process marker remains a second line of defence, but correctness + * does not depend on an inherited environment claim: the child simply never + * receives the recursive preload, Inspector pause, or watch flags. + */ +export function sanitizeLegacyExecArgv(execArgv: readonly string[]): string[] { + const sanitized: string[] = [] + + for (let index = 0; index < execArgv.length; index += 1) { + const argument = execArgv[index] + const name = optionName(argument) + const attachedValue = optionValue(argument) + + const isEvalOrPrint = name === '-e' || name === '--eval' || name === '-p' || name === '--print' + const isAttachedShortEvalOrPrint = + !argument.startsWith('--') && + (argument.startsWith('-e') || argument.startsWith('-p')) && + argument.length > 2 + if (isEvalOrPrint || isAttachedShortEvalOrPrint) { + if (isEvalOrPrint && attachedValue === undefined && execArgv[index + 1] !== undefined) + index += 1 + continue + } + + // `--input-type` is meaningful only for string/stdin input and makes a + // forked file entry fail once its inherited eval/print option is removed. + if (name === '--input-type') { + if (attachedValue === undefined && execArgv[index + 1] !== undefined) index += 1 + continue + } + + if (name.startsWith('--inspect') || name === '--experimental-network-inspection') { + if ( + attachedValue === undefined && + ['--inspect-port', '--inspect-publish-uid'].includes(name) && + execArgv[index + 1] && + !execArgv[index + 1].startsWith('-') + ) { + index += 1 + } + continue + } + + if (name === '--watch' || name === '--watch-preserve-output') continue + if (name === '--watch-path' || name === '--watch-kill-signal') { + if (attachedValue === undefined && execArgv[index + 1]) index += 1 + continue + } + + if ( + name === '--import' || + name === '--require' || + name === '-r' || + name === '--loader' || + name === '--experimental-loader' + ) { + const separateValue = attachedValue === undefined ? execArgv[index + 1] : undefined + const preload = attachedValue ?? separateValue + if (preload !== undefined && isProjectPreload(preload)) { + if (attachedValue === undefined) index += 1 + continue + } + } + + sanitized.push(argument) + } + + return sanitized +} + +/** A small NODE_OPTIONS tokenizer supporting the quoting accepted by Node. */ +export function tokenizeNodeOptions(value: string): string[] { + const tokens: string[] = [] + let token = '' + let quote: '"' | "'" | undefined + + for (let index = 0; index < value.length; index += 1) { + const character = value[index] + if (character === '\\') { + const next = value[index + 1] + const escapesOutsideQuote = + !quote && next !== undefined && (/\s/.test(next) || /['"]/.test(next)) + const escapesActiveQuote = quote !== undefined && next === quote + const escapesBackslash = next === '\\' + if (escapesOutsideQuote || escapesActiveQuote || escapesBackslash) { + token += next + index += 1 + } else { + // Backslashes are ordinary path separators unless they escape a quote + // or unquoted whitespace. In particular, preserve `C:\path` verbatim. + token += character + } + continue + } + if (quote) { + if (character === quote) quote = undefined + else token += character + continue + } + if (character === '"' || character === "'") { + quote = character + continue + } + if (/\s/.test(character)) { + if (token) { + tokens.push(token) + token = '' + } + continue + } + token += character + } + + if (token) tokens.push(token) + return tokens +} + +function quoteNodeOption(argument: string): string { + return /^[A-Za-z0-9_./:@%+,=-]+$/.test(argument) ? argument : JSON.stringify(argument) +} + +export function sanitizeLegacyEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv { + const childEnv = { ...env } + const nodeOptions = childEnv.NODE_OPTIONS + if (nodeOptions) { + const sanitized = sanitizeLegacyExecArgv(tokenizeNodeOptions(nodeOptions)) + if (sanitized.length === 0) delete childEnv.NODE_OPTIONS + else childEnv.NODE_OPTIONS = sanitized.map(quoteNodeOption).join(' ') + } + return childEnv +} + +function snapshot(value: T): T { + // child_process IPC with `serialization: advanced` uses the same V8 value + // model. Snapshotting queued events now prevents mutable RequestDetail + // instances from collapsing init/register/end into their final state while + // preserving Buffer values as Buffers. + return deserialize(serialize(value)) as T +} + +function targetPort(target: DevtoolsTarget): number | undefined { + try { + const port = Number(new URL(target.webSocketDebuggerUrl).port) + return Number.isInteger(port) && port > 0 ? port : undefined + } catch { + return undefined + } +} + +function sameTargetEndpoint(expected: DevtoolsTarget, actual: DevtoolsTarget): boolean { + return ( + expected.webSocketDebuggerUrl === actual.webSocketDebuggerUrl && + expected.discoveryUrl === actual.discoveryUrl + ) +} + +function errorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error) +} + +/** Parent-side owner of the Legacy child and its IPC transport. */ +export class LegacyBridgeClient { + readonly ready: Promise + + private readonly options: LegacyBridgeOptions + private readonly forkProcess: ForkProcess + private readonly childEntry: string + private readonly baseExecArgv: readonly string[] + private readonly baseEnv: NodeJS.ProcessEnv + private readonly maxRestarts: number + private readonly queueLimit: number + private readonly shutdownGraceMs: number + private readonly shutdownForceMs: number + private readonly recoveryForceKillMs: number + private readonly queue: QueuedParentMessage[] = [] + private readonly diagnosticListeners = new Set() + private readonly failureListeners = new Set() + private readonly diagnosticHistory: Diagnostic[] = [] + private child?: ChildProcess + private resolveReady!: (target: DevtoolsTarget) => void + private rejectReady!: (error: Error) => void + private firstTarget?: DevtoolsTarget + private currentTargetPort: number + private currentReady = false + private restartCount = 0 + private initialReadySettled = false + private terminal = false + private disposed = false + private disposePromise?: Promise + private recoveryKillTimer?: ReturnType + private recoveryGeneration?: number + private terminalFailure?: LegacyBridgeError + private generation = 0 + private messageSequence = 0 + + constructor(options: LegacyBridgeOptions, dependencies: LegacyBridgeClientDependencies = {}) { + this.options = { + ...options, + targetId: options.targetId ?? `node-network-devtools-${randomUUID()}` + } + this.currentTargetPort = options.targetPort + this.forkProcess = dependencies.fork ?? (nodeFork as ForkProcess) + this.childEntry = dependencies.childEntry ?? resolvePath(__dirname, './fork') + this.baseExecArgv = dependencies.execArgv ?? process.execArgv + this.baseEnv = dependencies.env ?? process.env + this.maxRestarts = dependencies.maxRestarts ?? DEFAULT_MAX_RESTARTS + this.queueLimit = Math.max(1, dependencies.queueLimit ?? DEFAULT_QUEUE_LIMIT) + this.shutdownGraceMs = Math.max(0, dependencies.shutdownGraceMs ?? 1_000) + this.shutdownForceMs = Math.max(this.shutdownGraceMs, dependencies.shutdownForceMs ?? 1_500) + this.recoveryForceKillMs = Math.max(0, dependencies.recoveryForceKillMs ?? 500) + this.ready = new Promise((resolve, reject) => { + this.resolveReady = resolve + this.rejectReady = reject + }) + void this.ready.catch(() => undefined) + + // Fork synchronously so `register(); request()` cannot race process setup. + this.spawnChild() + } + + onDiagnostic(listener: DiagnosticListener): () => void { + this.diagnosticListeners.add(listener) + for (const diagnostic of this.diagnosticHistory) listener(diagnostic) + return () => this.diagnosticListeners.delete(listener) + } + + onFailure(listener: FailureListener): () => void { + this.failureListeners.add(listener) + if (this.terminalFailure) { + try { + listener(this.terminalFailure) + } catch { + // Replayed failure listeners have the same isolation as live ones. + } + } + return () => this.failureListeners.delete(listener) + } + + async send(event: LegacyCaptureEvent): Promise { + if (this.disposed || this.terminal) return + + let message: LegacyParentMessage + try { + message = snapshot({ type: 'capture', event } satisfies LegacyParentMessage) + } catch (error) { + this.emitDiagnostic({ + code: 'NND_LEGACY_CAPTURE_SERIALIZATION_FAILED', + level: 'error', + message: `A Legacy capture event could not be serialized: ${errorMessage(error)}`, + hint: 'Remove stream, socket, function, or other live transport objects from capture data.', + details: { eventType: event.type } + }) + return + } + + const queuedMessage = { sequence: ++this.messageSequence, message } + if (!this.currentReady || !this.child?.connected) { + this.enqueue(queuedMessage) + return + } + this.sendToChild(queuedMessage) + } + + async dispose(): Promise { + if (this.disposePromise) return this.disposePromise + this.disposed = true + this.currentReady = false + this.queue.length = 0 + if (this.recoveryKillTimer) { + clearTimeout(this.recoveryKillTimer) + this.recoveryKillTimer = undefined + } + this.recoveryGeneration = undefined + + if (!this.initialReadySettled) { + this.initialReadySettled = true + this.rejectReady( + new LegacyBridgeError( + 'NND_LEGACY_DISPOSED', + 'The Legacy bridge was disposed before its target became ready.' + ) + ) + } + + const child = this.child + this.child = undefined + this.disposePromise = child ? this.shutdownChild(child) : Promise.resolve() + await this.disposePromise + this.diagnosticListeners.clear() + this.failureListeners.clear() + this.diagnosticHistory.length = 0 + } + + private spawnChild(): void { + if (this.disposed || this.terminal) return + const generation = ++this.generation + this.currentReady = false + const childEnv = sanitizeLegacyEnvironment(this.baseEnv) + childEnv[LEGACY_BRIDGE_OPTIONS_ENV] = JSON.stringify({ + ...this.options, + targetPort: this.currentTargetPort + } satisfies LegacyBridgeOptions) + + let child: ChildProcess + try { + child = this.forkProcess(this.childEntry, [], { + env: childEnv, + execArgv: sanitizeLegacyExecArgv(this.baseExecArgv), + serialization: 'advanced', + stdio: ['inherit', 'inherit', 'inherit', 'ipc'] + }) + } catch (error) { + this.handleChildFailure(undefined, generation, { error: errorMessage(error) }) + return + } + + this.child = child + let failed = false + const failOnce = (details: Readonly>) => { + if (failed) return + failed = true + this.handleChildFailure(child, generation, details) + } + + child.on('message', (message: unknown) => { + if (generation !== this.generation || this.disposed || this.terminal) return + this.handleChildMessage(child, generation, message) + }) + child.once('error', (error) => { + if (failed) return + failed = true + const details = { error: errorMessage(error) } + if (child.pid === undefined) this.handleChildFailure(child, generation, details) + else this.terminateChildThenHandleFailure(child, generation, details) + }) + child.once('exit', (code, signal) => failOnce({ code, signal })) + } + + private handleChildMessage(child: ChildProcess, generation: number, message: unknown): void { + if (!message || typeof message !== 'object' || !('type' in message)) return + const childMessage = message as LegacyChildMessage + + if (childMessage.type === 'diagnostic') { + this.emitDiagnostic(childMessage.diagnostic) + return + } + if (childMessage.type === 'disposed') return + if (childMessage.type !== 'ready') return + + const target = childMessage.target + if (this.firstTarget && !sameTargetEndpoint(this.firstTarget, target)) { + this.emitDiagnostic({ + code: 'NND_LEGACY_TARGET_CHANGED', + level: 'error', + message: 'The recovered Legacy child reported a different DevTools target.', + hint: 'Keep the original target port available while the Legacy session is active.', + details: { + expected: this.firstTarget.webSocketDebuggerUrl, + actual: target.webSocketDebuggerUrl, + restartCount: this.restartCount + } + }) + this.terminateChildThenHandleFailure(child, generation, { reason: 'target-changed' }) + return + } + + const boundPort = targetPort(target) + if (!boundPort) { + this.terminateChildThenHandleFailure(child, generation, { reason: 'invalid-target-port' }) + return + } + + if (!this.firstTarget) { + this.firstTarget = target + this.currentTargetPort = boundPort + this.initialReadySettled = true + this.resolveReady(target) + } else if (this.restartCount > 0) { + this.emitDiagnostic({ + code: 'NND_LEGACY_CHILD_RECOVERED', + level: 'info', + message: 'The Legacy backend recovered on its original DevTools target.', + details: { restartCount: this.restartCount, target: target.webSocketDebuggerUrl } + }) + } + + this.currentReady = true + this.flushQueue() + // The debugger backend is auxiliary: once its target is usable, neither + // the child handle nor its IPC channel may keep an otherwise finite Node + // application alive. The child observes the eventual IPC disconnect and + // closes its target before exiting. + child.unref() + child.channel?.unref() + } + + private handleChildFailure( + child: ChildProcess | undefined, + generation: number, + details: Readonly> + ): void { + if (generation !== this.generation || this.disposed || this.terminal) return + this.currentReady = false + if (child) { + child.removeAllListeners() + if (child.connected) child.disconnect() + if (!child.killed) child.kill() + } + if (this.child === child) this.child = undefined + + if (this.restartCount < this.maxRestarts) { + this.restartCount += 1 + this.emitDiagnostic({ + code: 'NND_LEGACY_CHILD_RESTARTING', + level: 'warn', + message: 'The Legacy backend exited unexpectedly; restarting it.', + hint: this.firstTarget + ? 'The recovered child will bind the original DevTools target port.' + : 'Capture events remain queued while the initial target starts.', + details: { + restartCount: this.restartCount, + maxRestarts: this.maxRestarts, + phase: this.firstTarget ? 'runtime' : 'startup', + ...details + } + }) + this.spawnChild() + return + } + + this.terminal = true + this.queue.length = 0 + const code = this.firstTarget + ? 'NND_LEGACY_CHILD_RECOVERY_FAILED' + : 'NND_LEGACY_CHILD_START_FAILED' + const message = this.firstTarget + ? `The Legacy backend could not be recovered after ${this.maxRestarts} restart attempts.` + : `The Legacy backend could not start after ${this.maxRestarts} restart attempts.` + const error = new LegacyBridgeError(code, message, { + restartCount: this.restartCount, + maxRestarts: this.maxRestarts, + ...details + }) + this.emitDiagnostic({ + code, + level: 'error', + message, + hint: 'Inspect the child diagnostics and verify that the configured target port is available.', + details: error.details + }) + this.emitFailure(error) + if (!this.initialReadySettled) { + this.initialReadySettled = true + this.rejectReady(error) + } + } + + private enqueue(queuedMessage: QueuedParentMessage): void { + if (this.queue.some(({ sequence }) => sequence === queuedMessage.sequence)) return + this.queue.push(queuedMessage) + this.queue.sort((left, right) => left.sequence - right.sequence) + const dropped = this.queue.length > this.queueLimit ? this.queue.pop() : undefined + if (dropped) { + const { message } = dropped + this.emitDiagnostic({ + code: 'NND_LEGACY_CAPTURE_QUEUE_FULL', + level: 'warn', + message: `The Legacy startup queue reached its ${this.queueLimit}-event limit.`, + hint: 'Wait for the Legacy target to become ready before producing additional traffic.', + details: { + queueLimit: this.queueLimit, + droppedEventType: message.type === 'capture' ? message.event.type : message.type + } + }) + } + } + + private flushQueue(): void { + while (this.currentReady && this.child?.connected && this.queue.length > 0) { + const queuedMessage = this.queue.shift()! + this.sendToChild(queuedMessage) + } + } + + private sendToChild(queuedMessage: QueuedParentMessage): void { + const child = this.child + if (!child || !child.connected) { + this.enqueue(queuedMessage) + return + } + const generation = this.generation + let failed = false + const fail = (error: unknown, source: 'send-callback' | 'send-throw') => { + if (failed || this.disposed || this.terminal) return + failed = true + this.enqueue(queuedMessage) + if (generation === this.generation && child === this.child) { + this.terminateChildThenHandleFailure(child, generation, { + error: errorMessage(error), + source + }) + } else if (this.currentReady) { + this.flushQueue() + } + } + try { + child.send(queuedMessage.message, (error) => { + if (error) fail(error, 'send-callback') + }) + } catch (error) { + fail(error, 'send-throw') + } + } + + /** Wait for the old process to exit before rebinding its target port. */ + private terminateChildThenHandleFailure( + child: ChildProcess, + generation: number, + details: Readonly> + ): void { + if (generation !== this.generation || this.disposed || this.terminal) return + if (this.recoveryGeneration === generation) return + this.recoveryGeneration = generation + this.currentReady = false + child.removeAllListeners() + let completed = false + const complete = () => { + if (completed) return + completed = true + if (this.recoveryKillTimer) { + clearTimeout(this.recoveryKillTimer) + this.recoveryKillTimer = undefined + } + if (this.recoveryGeneration === generation) this.recoveryGeneration = undefined + this.handleChildFailure(child, generation, details) + } + child.once('exit', complete) + + if (child.exitCode !== null && child.exitCode !== undefined) { + complete() + return + } + if (child.connected) child.disconnect() + try { + child.kill('SIGTERM') + } catch { + // The exit listener remains authoritative if signalling races exit. + } + if (completed) return + this.recoveryKillTimer = setTimeout(() => { + if (!completed) child.kill('SIGKILL') + }, this.recoveryForceKillMs) + this.recoveryKillTimer.unref?.() + } + + private shutdownChild(child: ChildProcess): Promise { + // A caller explicitly awaiting dispose expects the acknowledgement/exit + // handshake to complete. Restore both references in case readiness + // detached them from the event loop. + child.ref() + if (child.connected) child.channel?.ref() + + if (!child.connected && (child.exitCode != null || child.signalCode != null)) { + child.removeAllListeners() + return Promise.resolve() + } + + return new Promise((resolve) => { + let settled = false + let graceTimer: ReturnType | undefined + let forceTimer: ReturnType | undefined + + const finish = () => { + if (settled) return + settled = true + if (graceTimer) clearTimeout(graceTimer) + if (forceTimer) clearTimeout(forceTimer) + child.removeAllListeners() + if (child.connected) child.disconnect() + resolve() + } + const onMessage = (message: unknown) => { + if ( + message && + typeof message === 'object' && + 'type' in message && + (message as LegacyChildMessage).type === 'disposed' + ) { + // The host acknowledges only after RequestCenter.close(), so its + // target port is already closed. Still wait for the actual exit; + // existing grace/force timers prevent an acknowledged orphan. + if (child.connected) child.disconnect() + } + } + + child.on('message', onMessage) + child.once('exit', finish) + + try { + if (child.connected) child.send({ type: 'dispose' } satisfies LegacyParentMessage) + } catch { + child.kill('SIGTERM') + } + + if (settled) return + graceTimer = setTimeout(() => { + if (!settled) child.kill('SIGTERM') + }, this.shutdownGraceMs) + forceTimer = setTimeout(() => { + if (!settled) child.kill('SIGKILL') + }, this.shutdownForceMs) + graceTimer.unref?.() + forceTimer.unref?.() + }) + } + + private emitDiagnostic(diagnostic: Diagnostic): void { + this.diagnosticHistory.push(diagnostic) + if (this.diagnosticHistory.length > DIAGNOSTIC_HISTORY_LIMIT) this.diagnosticHistory.shift() + for (const listener of this.diagnosticListeners) { + try { + listener(diagnostic) + } catch { + // A consumer diagnostic callback must never destabilize capture. + } + } + } + + private emitFailure(error: LegacyBridgeError): void { + if (this.terminalFailure) return + this.terminalFailure = error + for (const listener of this.failureListeners) { + try { + listener(error) + } catch { + // A consumer failure callback must never destabilize teardown. + } + } + } +} diff --git a/packages/network-debugger/src/legacy-bridge/contracts.ts b/packages/network-debugger/src/legacy-bridge/contracts.ts new file mode 100644 index 0000000..75d9b3c --- /dev/null +++ b/packages/network-debugger/src/legacy-bridge/contracts.ts @@ -0,0 +1,105 @@ +import type { IncomingHttpHeaders } from 'node:http' +import type { Socket } from 'node:net' +import type { RequestDetail } from '../common' +import type { DevtoolsTarget, Diagnostic } from '../adapters/types' + +export type CdpId = number | string + +export type LegacyRequestEventType = + | 'initRequest' + | 'registerRequest' + | 'updateRequest' + | 'endRequest' + +export interface LegacyResponseData { + id: string + rawData: Buffer + statusCode: number + statusMessage?: string + headers: IncomingHttpHeaders | Record + contentEncoding?: string +} + +export interface LegacyRequestFailure { + request: RequestDetail + errorText: string + canceled?: boolean + blockedReason?: string +} + +/** A deliberately small, structured copy of an HTTP upgrade response. */ +export interface LegacyWebSocketHandshake { + httpVersion: string + statusCode: number + statusMessage: string + rawHeaders: readonly string[] + headers: IncomingHttpHeaders +} + +export interface LegacyWebSocketFrame { + requestId: string + response: { + payloadData: string + opcode: number + mask: boolean + } +} + +export type LegacyCaptureEvent = + | { type: LegacyRequestEventType; data: RequestDetail } + | { type: 'responseData'; data: LegacyResponseData } + | { type: 'responseReceived'; data: RequestDetail } + | { type: 'requestFailed'; data: LegacyRequestFailure } + | { type: 'eventSourceResponseReceived'; data: RequestDetail } + | { + type: 'eventSourceMessage' + data: { requestId: string; eventName: string; eventId: string; data: string } + } + | { + type: 'Network.webSocketCreated' + data: { + requestId: string + url: string + initiator?: RequestDetail['initiator'] + response: LegacyWebSocketHandshake + } + } + | { type: 'Network.webSocketFrameSent'; data: LegacyWebSocketFrame } + | { type: 'Network.webSocketFrameReceived'; data: LegacyWebSocketFrame } + | { type: 'Network.webSocketClosed'; data: { requestId: string } } + +export interface LegacyBridgeOptions { + host: string + targetPort: number + /** Stable across child recovery so the complete WebSocket URL cannot change. */ + targetId?: string + title?: string +} + +export type LegacyParentMessage = + | { type: 'capture'; event: LegacyCaptureEvent } + | { type: 'dispose' } + +export type LegacyChildMessage = + | { type: 'ready'; target: DevtoolsTarget } + | { type: 'diagnostic'; diagnostic: Diagnostic } + | { type: 'disposed' } + +export interface LegacyCaptureSink { + send(event: LegacyCaptureEvent): Promise + sendRequest(type: LegacyRequestEventType, request: RequestDetail): LegacyCaptureSink + responseRequest( + request: string | RequestDetail, + response: NodeJS.ReadableStream & { + statusCode?: number + statusMessage?: string + headers: IncomingHttpHeaders + } + ): void +} + +/** + * `Socket` is intentionally not part of any bridge event. This alias exists to + * make accidental transport-object leakage visible in capture code reviews. + */ +export type LegacyLocalSocket = Socket diff --git a/packages/network-debugger/src/legacy-bridge/host.test.ts b/packages/network-debugger/src/legacy-bridge/host.test.ts new file mode 100644 index 0000000..fa29369 --- /dev/null +++ b/packages/network-debugger/src/legacy-bridge/host.test.ts @@ -0,0 +1,138 @@ +import { EventEmitter } from 'node:events' +import { describe, expect, test, vi } from 'vitest' +import type { RequestCenter } from '../fork/request-center' +import type { DevtoolsTarget } from '../adapters/types' +import type { LegacyBridgeHostProcess } from './host' +import { runLegacyBridgeHost } from './host' +import { LEGACY_BRIDGE_OPTIONS_ENV } from './client' + +function deferred() { + let resolve!: (value: T) => void + let reject!: (error: unknown) => void + const promise = new Promise((res, rej) => { + resolve = res + reject = rej + }) + return { promise, resolve, reject } +} + +class FakeHostProcess extends EventEmitter implements LegacyBridgeHostProcess { + connected = true + readonly sent: unknown[] = [] + readonly exit = vi.fn((_code?: number) => undefined) + readonly env = { + [LEGACY_BRIDGE_OPTIONS_ENV]: JSON.stringify({ + host: '127.0.0.1', + targetPort: 0, + targetId: 'stable-legacy-target', + title: 'Stable Legacy' + }) + } + + send(message: unknown): boolean { + this.sent.push(message) + return true + } + + disconnect(): void { + this.connected = false + } +} + +const target: DevtoolsTarget = { + id: 'legacy', + title: 'Legacy', + type: 'node', + url: '', + webSocketDebuggerUrl: 'ws://127.0.0.1:43110/devtools/page/legacy', + discoveryUrl: 'http://127.0.0.1:43110/json/list' +} + +describe('runLegacyBridgeHost', () => { + test('starts RequestCenter, routes capture in order, and closes on parent dispose', async () => { + const processLike = new FakeHostProcess() + const readiness = deferred() + const center = { + ready: readiness.promise, + handleCaptureEvent: vi.fn(), + close: vi.fn(async () => undefined) + } + const createCenter = vi.fn(() => center as unknown as RequestCenter) + const loadPlugins = vi.fn() + const running = runLegacyBridgeHost({ process: processLike, createCenter, loadPlugins }) + + processLike.emit('message', { + type: 'capture', + event: { type: 'initRequest', data: { id: 'before-ready' } } + }) + await Promise.resolve() + expect(center.handleCaptureEvent).toHaveBeenCalledWith( + expect.objectContaining({ type: 'initRequest' }) + ) + + readiness.resolve(target) + await running + expect(createCenter).toHaveBeenCalledWith({ + serverPort: 0, + targetId: 'stable-legacy-target', + title: 'Stable Legacy', + autoOpenDevtool: false + }) + expect(loadPlugins).toHaveBeenCalledWith(center) + expect(processLike.sent).toContainEqual({ type: 'ready', target }) + + processLike.emit('message', { type: 'dispose' }) + await vi.waitFor(() => expect(center.close).toHaveBeenCalledOnce()) + expect(processLike.sent).toContainEqual({ type: 'disposed' }) + expect(processLike.connected).toBe(false) + expect(processLike.listenerCount('message')).toBe(0) + expect(processLike.listenerCount('disconnect')).toBe(0) + expect(processLike.exit).toHaveBeenCalledWith(0) + }) + + test('closes and exits when the parent IPC channel disappears', async () => { + const processLike = new FakeHostProcess() + const center = { + ready: Promise.resolve(target), + handleCaptureEvent: vi.fn(), + close: vi.fn(async () => undefined) + } + + await runLegacyBridgeHost({ + process: processLike, + createCenter: () => center as unknown as RequestCenter, + loadPlugins: vi.fn() + }) + processLike.connected = false + processLike.emit('disconnect') + + await vi.waitFor(() => expect(center.close).toHaveBeenCalledOnce()) + expect(processLike.sent).not.toContainEqual({ type: 'disposed' }) + expect(processLike.exit).toHaveBeenCalledWith(0) + expect(processLike.listenerCount('message')).toBe(0) + expect(processLike.listenerCount('disconnect')).toBe(0) + }) + + test('sends a structured startup diagnostic and closes when target bind fails', async () => { + const processLike = new FakeHostProcess() + const center = { + ready: Promise.reject(new Error('address in use')), + handleCaptureEvent: vi.fn(), + close: vi.fn(async () => undefined) + } + + await expect( + runLegacyBridgeHost({ + process: processLike, + createCenter: () => center as unknown as RequestCenter, + loadPlugins: vi.fn() + }) + ).rejects.toThrow('address in use') + expect(processLike.sent).toContainEqual({ + type: 'diagnostic', + diagnostic: expect.objectContaining({ code: 'NND_LEGACY_TARGET_START_FAILED' }) + }) + expect(center.close).toHaveBeenCalledOnce() + expect(processLike.listenerCount('disconnect')).toBe(0) + }) +}) diff --git a/packages/network-debugger/src/legacy-bridge/host.ts b/packages/network-debugger/src/legacy-bridge/host.ts new file mode 100644 index 0000000..5f6c96c --- /dev/null +++ b/packages/network-debugger/src/legacy-bridge/host.ts @@ -0,0 +1,142 @@ +import type { Diagnostic } from '../adapters/types' +import { RequestCenter } from '../fork/request-center' +import { loadPlugin } from '../fork/module' +import type { LegacyBridgeOptions, LegacyChildMessage, LegacyParentMessage } from './contracts' +import { LEGACY_BRIDGE_OPTIONS_ENV } from './client' + +export interface LegacyBridgeHostProcess { + env: NodeJS.ProcessEnv + send?: (message: LegacyChildMessage, callback?: (error: Error | null) => void) => boolean + on(event: 'message', listener: (message: unknown) => void): unknown + on(event: 'disconnect', listener: () => void): unknown + off(event: 'message', listener: (message: unknown) => void): unknown + off(event: 'disconnect', listener: () => void): unknown + disconnect?: () => void + connected?: boolean + exit?: (code?: number) => never | void +} + +export interface LegacyBridgeHostDependencies { + process?: LegacyBridgeHostProcess + createCenter?: (options: { + serverPort?: number + targetId?: string + title?: string + autoOpenDevtool?: boolean + }) => RequestCenter + loadPlugins?: (center: RequestCenter) => void +} + +function parseOptions(env: NodeJS.ProcessEnv): LegacyBridgeOptions { + const serialized = env[LEGACY_BRIDGE_OPTIONS_ENV] + if (!serialized) throw new Error(`${LEGACY_BRIDGE_OPTIONS_ENV} is required.`) + const value = JSON.parse(serialized) as Partial + if (typeof value.host !== 'string' || typeof value.targetPort !== 'number') { + throw new Error(`${LEGACY_BRIDGE_OPTIONS_ENV} is invalid.`) + } + return { + host: value.host, + targetPort: value.targetPort, + ...(typeof value.targetId === 'string' ? { targetId: value.targetId } : {}), + ...(typeof value.title === 'string' ? { title: value.title } : {}) + } +} + +function send(processLike: LegacyBridgeHostProcess, message: LegacyChildMessage): void { + if (!processLike.send || processLike.connected === false) return + try { + processLike.send(message) + } catch { + // Parent teardown can race a final diagnostic/disposed acknowledgement. + } +} + +/** Start and own one RequestCenter inside the forked Legacy child. */ +export async function runLegacyBridgeHost( + dependencies: LegacyBridgeHostDependencies = {} +): Promise<() => Promise> { + const processLike = dependencies.process ?? (process as unknown as LegacyBridgeHostProcess) + const options = parseOptions(processLike.env) + const createCenter = + dependencies.createCenter ?? ((centerOptions) => new RequestCenter(centerOptions)) + const center = createCenter({ + serverPort: options.targetPort || 0, + ...(options.targetId ? { targetId: options.targetId } : {}), + ...(options.title ? { title: options.title } : {}), + autoOpenDevtool: false + }) + ;(dependencies.loadPlugins ?? loadPlugin)(center) + + let captureChain = Promise.resolve() + let closing: Promise | undefined + + const close = (notifyParent = true) => { + if (closing) return closing + closing = captureChain + .catch(() => undefined) + .then(() => center.close()) + .then(() => { + if (notifyParent && processLike.connected !== false) { + send(processLike, { type: 'disposed' }) + } + processLike.off('message', onMessage) + processLike.off('disconnect', onDisconnect) + if (processLike.connected !== false) processLike.disconnect?.() + // This module runs in a dedicated bridge process. Explicitly exiting + // after all owned resources have closed prevents an IPC-disconnected + // child from becoming an orphan if its parent is terminated mid-dispose. + processLike.exit?.(0) + }) + return closing + } + + const onDisconnect = () => { + void close(false) + } + + const onMessage = (message: unknown) => { + if (!message || typeof message !== 'object' || !('type' in message)) return + const parentMessage = message as LegacyParentMessage + if (parentMessage.type === 'dispose') { + void close(true) + return + } + if (parentMessage.type === 'capture') { + captureChain = captureChain.then(() => { + center.handleCaptureEvent(parentMessage.event) + }) + void captureChain.catch((error) => { + const diagnostic: Diagnostic = { + code: 'NND_LEGACY_CAPTURE_FAILED', + level: 'error', + message: error instanceof Error ? error.message : String(error), + details: { eventType: parentMessage.event.type } + } + send(processLike, { type: 'diagnostic', diagnostic }) + }) + } + } + + processLike.on('message', onMessage) + processLike.on('disconnect', onDisconnect) + try { + const target = await center.ready + send(processLike, { type: 'ready', target }) + } catch (error) { + send(processLike, { + type: 'diagnostic', + diagnostic: { + code: 'NND_LEGACY_TARGET_START_FAILED', + level: 'error', + message: error instanceof Error ? error.message : String(error), + hint: 'Verify that the requested Legacy target port is available.' + } + }) + processLike.off('message', onMessage) + processLike.off('disconnect', onDisconnect) + await center.close().catch(() => undefined) + throw error + } + + return () => close(true) +} diff --git a/packages/network-debugger/src/legacy-bridge/index.ts b/packages/network-debugger/src/legacy-bridge/index.ts new file mode 100644 index 0000000..df6ef7e --- /dev/null +++ b/packages/network-debugger/src/legacy-bridge/index.ts @@ -0,0 +1,3 @@ +export * from './contracts' +export * from './client' +export * from './host' diff --git a/packages/network-debugger/src/mock/index.test.ts b/packages/network-debugger/src/mock/index.test.ts new file mode 100644 index 0000000..83adb93 --- /dev/null +++ b/packages/network-debugger/src/mock/index.test.ts @@ -0,0 +1,109 @@ +import type { ClientRequest, IncomingMessage } from 'node:http' +import { describe, expect, test, vi } from 'vitest' +import type { RequestFn } from '../core/request' +import { + findFetchMock, + findLegacyMock, + mockableRequestHandler, + mockedFetchResponse, + type LegacyMockRule +} from '.' + +const rules: readonly LegacyMockRule[] = [ + { + id: 'service-success', + match: { + url: 'http://127.0.0.1:*/service?*', + method: 'POST', + headers: { 'x-mode': 'mock' } + }, + response: { + status: 201, + statusText: 'Created by mock', + headers: { 'content-type': 'application/json', 'x-mock': 'yes' }, + body: '{"mocked":true}' + } + } +] + +describe('Legacy mocks', () => { + test('matches URL globs, methods, and case-insensitive request headers', () => { + expect( + findLegacyMock(rules, { + url: 'http://127.0.0.1:43100/service?value=1', + method: 'post', + headers: { 'X-Mode': 'mock' } + })?.id + ).toBe('service-success') + expect( + findLegacyMock(rules, { + url: 'http://127.0.0.1:43100/service?value=1', + method: 'GET', + headers: { 'x-mode': 'mock' } + }) + ).toBeUndefined() + }) + + test('returns an IncomingMessage-compatible HTTP response without calling the network', async () => { + const actual = vi.fn() as unknown as RequestFn + const handler = mockableRequestHandler(actual, false, rules) + const response = new Promise<{ + status?: number + headers: IncomingMessage['headers'] + body: string + }>((resolve) => { + const request = handler( + 'http://127.0.0.1:43100/service?value=1', + { method: 'POST', headers: { 'x-mode': 'mock' } }, + (incoming) => { + const chunks: Buffer[] = [] + incoming.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + incoming.on('end', () => + resolve({ + status: incoming.statusCode, + headers: incoming.headers, + body: Buffer.concat(chunks).toString() + }) + ) + } + ) + request.write('ignored request payload') + request.end() + }) + + await expect(response).resolves.toEqual({ + status: 201, + headers: { + 'content-type': 'application/json', + 'x-mock': 'yes', + 'content-length': '15' + }, + body: '{"mocked":true}' + }) + expect(actual).not.toHaveBeenCalled() + }) + + test('delegates unmatched HTTP requests with their original overload', () => { + const expected = {} as ClientRequest + const actual = vi.fn(() => expected) as unknown as RequestFn + const handler = mockableRequestHandler(actual, false, rules) + const callback = vi.fn() + + expect(handler('http://127.0.0.1:43100/real', callback)).toBe(expected) + expect(actual).toHaveBeenCalledWith('http://127.0.0.1:43100/real', callback) + }) + + test('mocks Fetch and supports a serialized binary response body', async () => { + const binaryRule: LegacyMockRule = { + match: { url: 'https://example.test/binary' }, + response: { + status: 200, + headers: { 'content-type': 'application/octet-stream' }, + bodyBase64: Buffer.from([0, 1, 2, 255]).toString('base64') + } + } + expect(findFetchMock([binaryRule], 'https://example.test/binary')).toBe(binaryRule) + const response = await mockedFetchResponse(binaryRule) + expect(Buffer.from(await response.arrayBuffer())).toEqual(Buffer.from([0, 1, 2, 255])) + }) +}) diff --git a/packages/network-debugger/src/mock/index.ts b/packages/network-debugger/src/mock/index.ts new file mode 100644 index 0000000..9fe3a37 --- /dev/null +++ b/packages/network-debugger/src/mock/index.ts @@ -0,0 +1,329 @@ +import { Readable, Writable } from 'node:stream' +import type { ClientRequest, IncomingHttpHeaders, IncomingMessage, RequestOptions } from 'node:http' +import type { RequestFn } from '../core/request' + +export interface LegacyMockMatcher { + /** Exact URL, or a glob containing `*` wildcards. */ + url: string + method?: string + headers?: Readonly> +} + +export interface LegacyMockResponse { + status?: number + statusText?: string + headers?: Readonly> + body?: string + /** Binary response body encoded as base64. Mutually exclusive with `body`. */ + bodyBase64?: string + delayMs?: number +} + +export interface LegacyMockRule { + id?: string + match: LegacyMockMatcher + response: LegacyMockResponse +} + +export interface LegacyMockRequest { + url: string + method: string + headers: Readonly> +} + +function globExpression(pattern: string): RegExp { + const escaped = pattern.replace(/[|\\{}()[\]^$+?.]/g, '\\$&').replace(/\*/g, '.*') + return new RegExp(`^${escaped}$`) +} + +function normalizedHeaders(headers: LegacyMockRequest['headers']): Record { + return Object.fromEntries( + Object.entries(headers).flatMap(([name, value]) => { + if (value === undefined) return [] + return [[name.toLowerCase(), Array.isArray(value) ? value.join(', ') : String(value)]] + }) + ) +} + +export function findLegacyMock( + rules: readonly LegacyMockRule[], + request: LegacyMockRequest +): LegacyMockRule | undefined { + const requestHeaders = normalizedHeaders(request.headers) + return rules.find((rule) => { + if (!rule.match.url || !globExpression(rule.match.url).test(request.url)) return false + if (rule.match.method && rule.match.method.toUpperCase() !== request.method.toUpperCase()) { + return false + } + return Object.entries(rule.match.headers ?? {}).every( + ([name, value]) => requestHeaders[name.toLowerCase()] === value + ) + }) +} + +function responseHeaders(values: LegacyMockResponse['headers']): IncomingHttpHeaders { + const headers: IncomingHttpHeaders = {} + for (const [name, value] of Object.entries(values ?? {})) { + headers[name.toLowerCase()] = typeof value === 'string' ? value : [...value] + } + return headers +} + +function rawHeaders(values: IncomingHttpHeaders): string[] { + return Object.entries(values).flatMap(([name, value]) => { + if (value === undefined) return [] + return Array.isArray(value) ? value.flatMap((nested) => [name, nested]) : [name, String(value)] + }) +} + +class MockIncomingMessage extends Readable { + readonly statusCode: number + readonly statusMessage: string + readonly headers: IncomingHttpHeaders + readonly rawHeaders: string[] + readonly httpVersion = '1.1' + complete = false + private sent = false + + constructor(response: LegacyMockResponse) { + super() + this.statusCode = response.status ?? 200 + this.statusMessage = response.statusText ?? 'Mocked' + this.headers = responseHeaders(response.headers) + const body = response.bodyBase64 + ? Buffer.from(response.bodyBase64, 'base64') + : Buffer.from(response.body ?? '') + if (this.headers['content-length'] === undefined) { + this.headers['content-length'] = String(body.byteLength) + } + this.rawHeaders = rawHeaders(this.headers) + this.once('end', () => { + this.complete = true + }) + this.body = body + } + + private readonly body: Buffer + + override _read(): void { + if (this.sent) return + this.sent = true + if (this.body.length > 0) this.push(this.body) + this.push(null) + } +} + +class MockClientRequest extends Writable { + readonly method: string + readonly path: string + readonly protocol: string + readonly host: string + aborted = false + private readonly headers = new Map() + private responseTimer?: ReturnType + + constructor( + url: URL, + method: string, + headers: RequestOptions['headers'], + private readonly mockedResponse: LegacyMockResponse + ) { + super() + this.method = method + this.path = `${url.pathname}${url.search}` + this.protocol = url.protocol + this.host = url.host + for (const [name, value] of Object.entries(headers ?? {})) { + if (value !== undefined) this.setHeader(name, value) + } + if (!this.hasHeader('host')) this.setHeader('host', url.host) + } + + override _write( + _chunk: Buffer, + _encoding: BufferEncoding, + callback: (error?: Error | null) => void + ): void { + callback() + } + + override _final(callback: (error?: Error | null) => void): void { + const respond = () => { + if (!this.destroyed && !this.aborted) { + this.emit( + 'response', + new MockIncomingMessage(this.mockedResponse) as unknown as IncomingMessage + ) + } + callback() + } + const delay = Math.max(0, this.mockedResponse.delayMs ?? 0) + if (delay === 0) queueMicrotask(respond) + else this.responseTimer = setTimeout(respond, delay) + } + + setHeader(name: string, value: string | string[] | number): this { + this.headers.set(name.toLowerCase(), { name, value }) + return this + } + + getHeader(name: string): string | string[] | number | undefined { + return this.headers.get(name.toLowerCase())?.value + } + + getHeaders(): Record { + return Object.fromEntries( + [...this.headers.entries()].map(([normalized, entry]) => [normalized, entry.value]) + ) + } + + hasHeader(name: string): boolean { + return this.headers.has(name.toLowerCase()) + } + + removeHeader(name: string): void { + this.headers.delete(name.toLowerCase()) + } + + flushHeaders(): void {} + + abort(): void { + if (this.aborted) return + this.aborted = true + if (this.responseTimer) clearTimeout(this.responseTimer) + this.emit('abort') + this.destroy() + } + + setTimeout(_timeout: number, callback?: () => void): this { + if (callback) this.once('timeout', callback) + return this + } + + override _destroy(error: Error | null, callback: (error?: Error | null) => void): void { + if (this.responseTimer) clearTimeout(this.responseTimer) + callback(error) + } +} + +function requestUrl( + arg1: RequestOptions | string | URL, + options: RequestOptions | undefined, + isHttps: boolean +): URL { + const base = + typeof arg1 === 'string' || arg1 instanceof URL + ? new URL(arg1) + : new URL( + `${arg1.protocol ?? (isHttps ? 'https:' : 'http:')}//${arg1.hostname ?? arg1.host ?? 'localhost'}${arg1.port === undefined ? '' : `:${arg1.port}`}${arg1.path ?? '/'}` + ) + if (options?.protocol) base.protocol = options.protocol + if (options?.hostname || options?.host) base.hostname = String(options.hostname ?? options.host) + if (options?.port !== undefined) base.port = String(options.port) + if (options?.path) { + const separator = options.path.indexOf('?') + base.pathname = separator === -1 ? options.path : options.path.slice(0, separator) + base.search = separator === -1 ? '' : options.path.slice(separator) + } + return base +} + +/** Route matching `http.request`/`https.request` calls to an in-process response. */ +export function mockableRequestHandler( + actualRequest: RequestFn, + isHttps: boolean, + rules: readonly LegacyMockRule[] +): RequestFn { + return function mockableRequest( + this: unknown, + arg1: RequestOptions | string | URL, + arg2?: RequestOptions | ((response: IncomingMessage) => void), + arg3?: (response: IncomingMessage) => void + ): ClientRequest { + const options = + typeof arg1 === 'string' || arg1 instanceof URL + ? typeof arg2 === 'object' + ? arg2 + : undefined + : arg1 + const callback = typeof arg2 === 'function' ? arg2 : arg3 + const url = requestUrl(arg1, options, isHttps) + const method = String(options?.method ?? 'GET').toUpperCase() + const rule = findLegacyMock(rules, { + url: url.toString(), + method, + headers: (options?.headers ?? {}) as LegacyMockRequest['headers'] + }) + if (!rule) { + const args = + typeof arg1 === 'string' || arg1 instanceof URL + ? typeof arg2 === 'object' + ? [arg1, arg2, arg3] + : [arg1, arg2] + : [arg1, arg2] + return Reflect.apply(actualRequest, this, args) + } + + const request = new MockClientRequest(url, method, options?.headers, rule.response) + if (callback) request.once('response', callback) + return request as unknown as ClientRequest + } as RequestFn +} + +function fetchHeaders( + request: string | URL | Request, + options?: RequestInit +): Record { + const headers = new Headers(request instanceof Request ? request.headers : undefined) + if (options?.headers) { + new Headers(options.headers).forEach((value, name) => headers.set(name, value)) + } + const result: Record = {} + headers.forEach((value, name) => (result[name] = value)) + return result +} + +export function findFetchMock( + rules: readonly LegacyMockRule[], + request: string | URL | Request, + options?: RequestInit +): LegacyMockRule | undefined { + return findLegacyMock(rules, { + url: + typeof request === 'string' + ? request + : request instanceof URL + ? request.toString() + : request.url, + method: String(options?.method ?? (request instanceof Request ? request.method : 'GET')), + headers: fetchHeaders(request, options) + }) +} + +export async function mockedFetchResponse( + rule: LegacyMockRule, + signal?: AbortSignal | null +): Promise { + const delay = Math.max(0, rule.response.delayMs ?? 0) + if (delay > 0) { + await new Promise((resolve, reject) => { + const timer = setTimeout(resolve, delay) + const abort = () => { + clearTimeout(timer) + reject(signal?.reason ?? new DOMException('The operation was aborted.', 'AbortError')) + } + if (signal?.aborted) abort() + else signal?.addEventListener('abort', abort, { once: true }) + }) + } + const status = rule.response.status ?? 200 + const configuredBody = rule.response.bodyBase64 + ? Buffer.from(rule.response.bodyBase64, 'base64') + : (rule.response.body ?? null) + const body = [101, 103, 204, 205, 304].includes(status) ? null : configuredBody + return new Response(body, { + status, + statusText: rule.response.statusText ?? 'Mocked', + headers: rule.response.headers as HeadersInit | undefined + }) +} diff --git a/packages/network-debugger/src/preload/index.test.ts b/packages/network-debugger/src/preload/index.test.ts new file mode 100644 index 0000000..78ed531 --- /dev/null +++ b/packages/network-debugger/src/preload/index.test.ts @@ -0,0 +1,123 @@ +import { describe, expect, it, vi } from 'vitest' +import type { ReadyInfo, RegistrationHandle } from '../runtime/registration' +import { NND_PRELOAD_CONFIG_ENV, serializePreloadConfig, type ResolvedNndConfig } from '../config' +import { NND_PRELOAD_PROCESS_ENV, claimPreloadProcess, getPreloadHandle, preload } from './index' + +const resolved: ResolvedNndConfig = { + mode: 'auto', + open: false, + wait: true, + watch: false, + runner: 'node', + inspector: { host: '127.0.0.1', port: 0 }, + requiredCapabilities: [], + legacy: {} +} + +const readyInfo: ReadyInfo = { + mode: 'native', + target: { + id: 'target', + title: 'target', + type: 'node', + url: '', + webSocketDebuggerUrl: 'ws://127.0.0.1:1234/id', + discoveryUrl: 'http://127.0.0.1:1234/json/list' + }, + capabilities: { + http: true, + https: true, + fetch: true, + http2: true, + responseBody: true, + requestBody: false, + websocketLifecycle: false, + websocketFrames: false, + sseMessages: false, + initiator: true + }, + diagnostics: [] +} + +function fakeHandle(ready: Promise = Promise.resolve(readyInfo)): RegistrationHandle { + const handle = (() => undefined) as RegistrationHandle + Object.defineProperties(handle, { + ready: { value: ready }, + status: { value: () => ({ state: 'ready' }) }, + openDevtools: { value: vi.fn() }, + dispose: { value: vi.fn() }, + on: { value: vi.fn() } + }) + return handle +} + +describe('preload', () => { + it('claims only the root process so inherited --import does not register in forks', () => { + const env: NodeJS.ProcessEnv = {} + expect(claimPreloadProcess(env)).toBe(true) + expect(env[NND_PRELOAD_PROCESS_ENV]).toBe('claimed') + expect(claimPreloadProcess(env)).toBe(false) + }) + + it('registers synchronously from serialized CLI config and only once', async () => { + const realm = Object.create(null) as typeof globalThis + const register = vi.fn(() => fakeHandle()) + const env = { [NND_PRELOAD_CONFIG_ENV]: serializePreloadConfig(resolved) } + + const first = preload({ globalObject: realm, env, register }) + const second = preload({ globalObject: realm, env, register }) + + expect(register).toHaveBeenCalledTimes(1) + expect(register).toHaveBeenCalledWith( + expect.objectContaining({ mode: 'auto', devtools: { open: false } }) + ) + expect(second).toBe(first) + const handle = await first + expect(getPreloadHandle(realm)).toBe(handle) + }) + + it('waits for config discovery, registration, and handle readiness', async () => { + const realm = Object.create(null) as typeof globalThis + let releaseConfig!: (value: { + config: ResolvedNndConfig + sources: { env: []; cli: [] } + }) => void + const configPromise = new Promise<{ config: ResolvedNndConfig; sources: { env: []; cli: [] } }>( + (resolvePromise) => (releaseConfig = resolvePromise) + ) + let releaseReady!: (value: ReadyInfo) => void + const ready = new Promise((resolvePromise) => (releaseReady = resolvePromise)) + const register = vi.fn(() => fakeHandle(ready)) + const resolution = preload({ + globalObject: realm, + env: {}, + register, + resolve: vi.fn(() => configPromise) + }) + let completed = false + void resolution.then(() => (completed = true)) + + await Promise.resolve() + expect(register).not.toHaveBeenCalled() + releaseConfig({ config: resolved, sources: { env: [], cli: [] } }) + await Promise.resolve() + expect(register).toHaveBeenCalledTimes(1) + expect(completed).toBe(false) + releaseReady(readyInfo) + await expect(resolution).resolves.toBe(getPreloadHandle(realm)) + expect(completed).toBe(true) + }) + + it('clears failed state so a corrected import can retry', async () => { + const realm = Object.create(null) as typeof globalThis + const register = vi + .fn<() => RegistrationHandle>() + .mockReturnValueOnce(fakeHandle(Promise.reject(new Error('not ready')))) + .mockReturnValueOnce(fakeHandle()) + const env = { [NND_PRELOAD_CONFIG_ENV]: serializePreloadConfig(resolved) } + + await expect(preload({ globalObject: realm, env, register })).rejects.toThrow('not ready') + await expect(preload({ globalObject: realm, env, register })).resolves.toBeDefined() + expect(register).toHaveBeenCalledTimes(2) + }) +}) diff --git a/packages/network-debugger/src/preload/index.ts b/packages/network-debugger/src/preload/index.ts new file mode 100644 index 0000000..971dfb6 --- /dev/null +++ b/packages/network-debugger/src/preload/index.ts @@ -0,0 +1,119 @@ +import type { RegisterOptions } from '../common' +import { register as runtimeRegister } from '../runtime/controller' +import type { RegistrationHandle } from '../runtime/registration' +import { + NND_PRELOAD_CONFIG_ENV, + parsePreloadConfig, + resolveConfig, + toRegisterOptions, + type ConfigResolution, + type ResolveConfigOptions +} from '../config' + +const PRELOAD_STATE = Symbol.for('node-network-devtools.preload.state') + +interface PreloadState { + promise: Promise + handle?: RegistrationHandle +} + +export interface PreloadDependencies { + env?: NodeJS.ProcessEnv + cwd?: string + globalObject?: typeof globalThis + register?: (options?: RegisterOptions) => RegistrationHandle + resolve?: (options?: ResolveConfigOptions) => Promise +} + +export const NND_PRELOAD_REPORT_ENV = 'NND_PRELOAD_REPORT' +export const NND_READY_PREFIX = '[nnd:ready] ' +export const NND_PRELOAD_PROCESS_ENV = 'NND_PRELOAD_PROCESS' + +/** + * Claim the current OS process as the preload root. Descendants inherit the + * marker and skip the side effect even though Node also inherits `execArgv`. + */ +export function claimPreloadProcess(env: NodeJS.ProcessEnv = process.env): boolean { + if (env[NND_PRELOAD_PROCESS_ENV] === 'claimed') return false + env[NND_PRELOAD_PROCESS_ENV] = 'claimed' + return true +} + +function stateOn(globalObject: typeof globalThis): PreloadState | undefined { + return (globalObject as unknown as Record)[PRELOAD_STATE] as + | PreloadState + | undefined +} + +function setState(globalObject: typeof globalThis, state: PreloadState): void { + Object.defineProperty(globalObject, PRELOAD_STATE, { + value: state, + configurable: true, + enumerable: false, + writable: true + }) +} + +/** + * Register network inspection exactly once for this JavaScript realm. + * + * The CLI serializes its already-resolved configuration into the environment, + * allowing `register()` to run synchronously during module evaluation. Direct + * `--import node-network-devtools/register` usage falls back to config discovery. + */ +export function preload(dependencies: PreloadDependencies = {}): Promise { + const globalObject = dependencies.globalObject ?? globalThis + const existing = stateOn(globalObject) + if (existing) return existing.promise + + const env = dependencies.env ?? process.env + const register = dependencies.register ?? runtimeRegister + const resolve = dependencies.resolve ?? resolveConfig + const state = {} as PreloadState + + const serialized = env[NND_PRELOAD_CONFIG_ENV] + if (serialized) { + try { + const handle = register(toRegisterOptions(parsePreloadConfig(serialized))) + state.handle = handle + state.promise = handle.ready.then(() => handle) + } catch (error) { + state.promise = Promise.reject(error) + } + } else { + state.promise = resolve({ cwd: dependencies.cwd, env }).then(({ config }) => { + const handle = register(toRegisterOptions(config)) + state.handle = handle + return handle.ready.then(() => handle) + }) + } + + // A failed import may be retried after configuration is corrected. + void state.promise.catch(() => { + if (stateOn(globalObject) === state) { + delete (globalObject as unknown as Record)[PRELOAD_STATE] + } + }) + setState(globalObject, state) + return state.promise +} + +export function getPreloadHandle( + globalObject: typeof globalThis = globalThis +): RegistrationHandle | undefined { + return stateOn(globalObject)?.handle +} + +/** Test and embedding hook; normal consumers should dispose the handle instead. */ +export function resetPreloadState(globalObject: typeof globalThis = globalThis): void { + delete (globalObject as unknown as Record)[PRELOAD_STATE] +} + +export function formatPreloadError(error: unknown): string { + const code = + typeof error === 'object' && error !== null && 'code' in error + ? String((error as { code: unknown }).code) + : 'NND_PRELOAD_FAILED' + const message = error instanceof Error ? error.message : String(error) + return `[nnd:${code}] ${message}` +} diff --git a/packages/network-debugger/src/preload/register.test.ts b/packages/network-debugger/src/preload/register.test.ts new file mode 100644 index 0000000..dcc848b --- /dev/null +++ b/packages/network-debugger/src/preload/register.test.ts @@ -0,0 +1,39 @@ +import { expect, it, vi } from 'vitest' +import type { RegistrationHandle } from '../runtime/registration' + +const deferred = vi.hoisted(() => { + let release!: (value: RegistrationHandle) => void + return { + promise: new Promise((resolvePromise) => (release = resolvePromise)), + release + } +}) + +vi.mock('./index', () => ({ + NND_PRELOAD_REPORT_ENV: 'NND_PRELOAD_REPORT', + NND_READY_PREFIX: '[nnd:ready] ', + claimPreloadProcess: () => true, + formatPreloadError: (error: unknown) => String(error), + preload: () => deferred.promise +})) + +it('keeps the side-effect module evaluation pending until preload completes', async () => { + const original = process.env.NND_PRELOAD_REPORT + delete process.env.NND_PRELOAD_REPORT + let imported = false + const importing = import('./register').then(() => { + imported = true + }) + + await Promise.resolve() + await Promise.resolve() + expect(imported).toBe(false) + + const handle = (() => undefined) as RegistrationHandle + deferred.release(handle) + await importing + expect(imported).toBe(true) + + if (original === undefined) delete process.env.NND_PRELOAD_REPORT + else process.env.NND_PRELOAD_REPORT = original +}) diff --git a/packages/network-debugger/src/preload/register.ts b/packages/network-debugger/src/preload/register.ts new file mode 100644 index 0000000..03b1b00 --- /dev/null +++ b/packages/network-debugger/src/preload/register.ts @@ -0,0 +1,29 @@ +import { + NND_PRELOAD_REPORT_ENV, + NND_READY_PREFIX, + claimPreloadProcess, + formatPreloadError, + preload +} from './index' + +// Side-effect entry for `node --import node-network-devtools/register`. +if (claimPreloadProcess()) { + try { + const registration = await preload() + if (process.env[NND_PRELOAD_REPORT_ENV] === '1') { + const ready = await registration.ready + process.stderr.write( + `${NND_READY_PREFIX}${JSON.stringify({ + mode: ready.mode, + target: ready.target, + capabilities: ready.capabilities, + ...(ready.fallbackReason ? { fallbackReason: ready.fallbackReason } : {}) + })}\n` + ) + } + } catch (error) { + process.stderr.write(`${formatPreloadError(error)}\n`) + process.exitCode = 1 + throw error + } +} diff --git a/packages/network-debugger/src/replay/index.test.ts b/packages/network-debugger/src/replay/index.test.ts new file mode 100644 index 0000000..51d38e0 --- /dev/null +++ b/packages/network-debugger/src/replay/index.test.ts @@ -0,0 +1,175 @@ +import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { afterEach, describe, expect, test, vi } from 'vitest' +import type { HarDocument, SessionManifest } from '../session/types' +import { replay, sanitizeReplayHeaders } from '.' + +const temporaryDirectories: string[] = [] + +afterEach(async () => { + await Promise.all(temporaryDirectories.splice(0).map((path) => rm(path, { recursive: true }))) +}) + +function har(entries: HarDocument['log']['entries']): HarDocument { + return { + log: { + version: '1.2', + creator: { name: 'node-network-devtools', version: '2.0.0' }, + pages: [], + entries + } + } +} + +function entry(url: string, method = 'POST'): HarDocument['log']['entries'][number] { + return { + startedDateTime: new Date(0).toISOString(), + time: 1, + request: { + method, + url, + httpVersion: 'HTTP/1.1', + cookies: [], + headers: [ + { name: 'Connection', value: 'keep-alive, x-private-hop' }, + { name: 'X-Private-Hop', value: 'remove-me' }, + { name: 'Content-Length', value: '999' }, + { name: 'X-End-To-End', value: 'preserve-me' } + ], + queryString: [], + postData: { mimeType: 'text/plain', text: 'payload' }, + headersSize: -1, + bodySize: 7 + }, + response: { + status: 200, + statusText: 'OK', + httpVersion: 'HTTP/1.1', + cookies: [], + headers: [], + content: { size: 0, mimeType: 'text/plain' }, + redirectURL: '', + headersSize: -1, + bodySize: 0 + }, + cache: {}, + timings: { blocked: -1, dns: -1, connect: -1, send: 0, wait: 1, receive: 0, ssl: -1 }, + _requestId: 'request-1' + } +} + +describe('replay', () => { + test('sanitizes hop-by-hop, Connection-nominated, and runtime-owned headers', () => { + expect( + sanitizeReplayHeaders([ + ['Connection', 'X-Temporary'], + ['X-Temporary', 'no'], + ['Transfer-Encoding', 'chunked'], + ['Host', 'old.example'], + ['Content-Length', '10'], + ['Traceparent', '00-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bbbbbbbbbbbbbbbb-01'] + ]) + ).toEqual({ + Traceparent: '00-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bbbbbbbbbbbbbbbb-01' + }) + }) + + test('builds a deterministic HAR dry-run without opening the network', async () => { + const fetch = vi.fn() + const report = await replay(har([entry('http://127.0.0.1:43101/replay')]), { + dryRun: true, + fetch: fetch as unknown as typeof globalThis.fetch + }) + + expect(fetch).not.toHaveBeenCalled() + expect(report).toMatchObject({ dryRun: true, succeeded: 1, failed: 0 }) + expect(report.requests).toEqual([ + { + index: 0, + requestId: 'request-1', + method: 'POST', + url: 'http://127.0.0.1:43101/replay', + headers: { 'X-End-To-End': 'preserve-me' }, + body: 'payload' + } + ]) + }) + + test('loads a Session directory in event sequence order', async () => { + const directory = await mkdtemp(join(tmpdir(), 'nnd-replay-session-')) + temporaryDirectories.push(directory) + const manifest: SessionManifest = { + schemaVersion: 1, + sessionId: 'session-1', + state: 'completed', + createdAt: new Date(0).toISOString(), + completedAt: new Date(1).toISOString(), + target: { + id: 'target', + title: 'target', + type: 'node', + url: '', + webSocketDebuggerUrl: 'ws://127.0.0.1/devtools/page/target', + discoveryUrl: 'http://127.0.0.1/json/list' + }, + files: { events: 'events.ndjson', bodies: 'bodies' }, + stats: { + eventCount: 2, + requestCount: 2, + bodyCount: 0, + bodyErrorCount: 0, + failedRequestCount: 0 + }, + requestIndex: { + second: { + requestId: 'second', + firstSequence: 2, + request: { url: 'http://127.0.0.1/second', method: 'GET', headers: {} } + }, + first: { + requestId: 'first', + firstSequence: 1, + request: { + url: 'http://127.0.0.1/first', + method: 'POST', + headers: { 'content-type': 'text/plain' }, + postData: 'first-body' + } + } + }, + bodyIndex: {}, + traceIndex: {}, + issues: [] + } + await writeFile(join(directory, 'manifest.json'), JSON.stringify(manifest)) + + const report = await replay(directory, { dryRun: true }) + expect(report.requests.map((request) => request.requestId)).toEqual(['first', 'second']) + expect(report.requests[0].body).toBe('first-body') + expect(JSON.parse(await readFile(join(directory, 'manifest.json'), 'utf8'))).toEqual(manifest) + }) + + test('performs real fetch calls, drains bodies, and reports HTTP failures', async () => { + const responseBody = vi.fn(async () => new ArrayBuffer(0)) + const fetch = vi.fn(async () => ({ + ok: false, + status: 503, + statusText: 'Unavailable', + headers: new Headers({ 'x-result': 'captured' }), + arrayBuffer: responseBody + })) + + const report = await replay(har([entry('http://127.0.0.1/service')]), { + fetch: fetch as unknown as typeof globalThis.fetch + }) + + expect(fetch).toHaveBeenCalledWith( + 'http://127.0.0.1/service', + expect.objectContaining({ method: 'POST', body: 'payload', redirect: 'manual' }) + ) + expect(responseBody).toHaveBeenCalledOnce() + expect(report).toMatchObject({ succeeded: 0, failed: 1 }) + expect(report.results[0]).toMatchObject({ ok: false, status: 503 }) + }) +}) diff --git a/packages/network-debugger/src/replay/index.ts b/packages/network-debugger/src/replay/index.ts new file mode 100644 index 0000000..7a60c0d --- /dev/null +++ b/packages/network-debugger/src/replay/index.ts @@ -0,0 +1,260 @@ +import { readFile, stat } from 'node:fs/promises' +import { resolve } from 'node:path' +import { readSessionManifest } from '../session/files' +import type { + HarDocument, + HarEntry, + HarHeader, + SessionManifest, + SessionRequestIndexEntry +} from '../session/types' +import type { + ReplayOptions, + ReplayReport, + ReplayRequest, + ReplayResult, + ReplaySource +} from './types' + +export type { + ReplayOptions, + ReplayReport, + ReplayRequest, + ReplayResult, + ReplaySource +} from './types' + +const DEFAULT_TIMEOUT_MS = 30_000 +const HOP_BY_HOP_HEADERS = new Set([ + 'connection', + 'keep-alive', + 'proxy-authenticate', + 'proxy-authorization', + 'te', + 'trailer', + 'transfer-encoding', + 'upgrade' +]) +const RUNTIME_MANAGED_HEADERS = new Set(['content-length', 'host']) + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + +function stringValue(value: unknown): string | undefined { + if (typeof value === 'string') return value + if (typeof value === 'number' || typeof value === 'boolean') return String(value) + if (Array.isArray(value)) return value.map(String).join(', ') + return undefined +} + +/** Remove RFC hop-by-hop fields, fields named by Connection, and Fetch-owned fields. */ +export function sanitizeReplayHeaders( + headers: Iterable +): Record { + const values = [...headers] + const connectionTokens = new Set() + for (const [name, value] of values) { + if (name.toLowerCase() !== 'connection') continue + for (const token of value.split(',')) { + const normalized = token.trim().toLowerCase() + if (normalized) connectionTokens.add(normalized) + } + } + + const sanitized: Record = {} + for (const [name, value] of values) { + const normalized = name.trim().toLowerCase() + if ( + !normalized || + HOP_BY_HOP_HEADERS.has(normalized) || + RUNTIME_MANAGED_HEADERS.has(normalized) || + connectionTokens.has(normalized) + ) { + continue + } + sanitized[name] = value + } + return sanitized +} + +function headerPairs(value: unknown): Array<[string, string]> { + if (Array.isArray(value)) { + return value.flatMap((header): Array<[string, string]> => { + if (!isRecord(header) || typeof header.name !== 'string') return [] + const stringified = stringValue(header.value) + return stringified === undefined ? [] : [[header.name, stringified]] + }) + } + if (!isRecord(value)) return [] + return Object.entries(value).flatMap(([name, nested]): Array<[string, string]> => { + const stringified = stringValue(nested) + return stringified === undefined ? [] : [[name, stringified]] + }) +} + +function assertReplayUrl(url: string, index: number): void { + let parsed: URL + try { + parsed = new URL(url) + } catch { + throw new Error(`Replay request ${index} has an invalid URL: ${url}`) + } + if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { + throw new Error( + `Replay request ${index} uses unsupported protocol ${parsed.protocol}; only HTTP(S) can be replayed.` + ) + } +} + +function requestFromHar(entry: HarEntry, index: number): ReplayRequest { + const method = entry.request.method.toUpperCase() + const url = entry.request.url + assertReplayUrl(url, index) + const body = method === 'GET' || method === 'HEAD' ? undefined : entry.request.postData?.text + return { + index, + requestId: entry._requestId, + method, + url, + headers: sanitizeReplayHeaders( + entry.request.headers.map((header: HarHeader) => [header.name, header.value] as const) + ), + ...(body !== undefined ? { body } : {}) + } +} + +function requestFromSession( + entry: SessionRequestIndexEntry, + requestId: string, + index: number +): ReplayRequest | undefined { + const request = entry.request + if (!request || typeof request.url !== 'string') return undefined + const method = + typeof request.method === 'string' && request.method ? request.method.toUpperCase() : 'GET' + assertReplayUrl(request.url, index) + const bodyValue = stringValue(request.postData) + return { + index, + requestId, + method, + url: request.url, + headers: sanitizeReplayHeaders(headerPairs(request.headers)), + ...(method !== 'GET' && method !== 'HEAD' && bodyValue !== undefined ? { body: bodyValue } : {}) + } +} + +function requestsFromManifest(manifest: SessionManifest): ReplayRequest[] { + return Object.entries(manifest.requestIndex) + .sort(([, left], [, right]) => left.firstSequence - right.firstSequence) + .flatMap(([requestId, entry], index) => { + const request = requestFromSession(entry, requestId, index) + return request ? [request] : [] + }) + .map((request, index) => ({ ...request, index })) +} + +function assertHar(value: unknown, source: string): HarDocument { + if (!isRecord(value) || !isRecord(value.log) || !Array.isArray(value.log.entries)) { + throw new Error(`Replay source is not a HAR 1.2 document: ${source}`) + } + return value as unknown as HarDocument +} + +/** Load a deterministic replay plan from a Session directory or HAR document/file. */ +export async function loadReplayRequests(source: ReplaySource): Promise { + if (typeof source !== 'string') { + return source.log.entries.map(requestFromHar) + } + + const absolute = resolve(source) + const details = await stat(absolute) + if (details.isDirectory()) { + return requestsFromManifest(await readSessionManifest(absolute)) + } + if (!details.isFile()) throw new Error(`Replay source is not a file or directory: ${absolute}`) + const har = assertHar(JSON.parse(await readFile(absolute, 'utf8')), absolute) + return har.log.entries.map(requestFromHar) +} + +function timeoutValue(value: number | undefined): number { + return Number.isFinite(value) && Number(value) > 0 ? Number(value) : DEFAULT_TIMEOUT_MS +} + +function headersToRecord(headers: Headers): Record { + const values: Record = {} + headers.forEach((value, name) => { + values[name] = value + }) + return values +} + +/** Replay HTTP(S) requests, or return the exact request plan in dry-run mode. */ +export async function replay( + source: ReplaySource, + options: ReplayOptions = {} +): Promise { + const startedAt = new Date().toISOString() + const requests = await loadReplayRequests(source) + const results: ReplayResult[] = [] + const dryRun = options.dryRun === true + const fetchImplementation = options.fetch ?? globalThis.fetch + if (!dryRun && typeof fetchImplementation !== 'function') { + throw new Error('Replay requires a Fetch implementation on this Node.js runtime.') + } + + for (const request of requests) { + const started = performance.now() + if (dryRun) { + results.push({ request, dryRun: true, ok: true, durationMs: 0 }) + continue + } + + const abortController = new AbortController() + const timer = setTimeout(() => abortController.abort(), timeoutValue(options.timeoutMs)) + timer.unref?.() + try { + const response = await fetchImplementation(request.url, { + method: request.method, + headers: request.headers, + ...(request.body !== undefined ? { body: request.body } : {}), + redirect: 'manual', + signal: abortController.signal + }) + await response.arrayBuffer() + results.push({ + request, + dryRun: false, + ok: response.ok, + status: response.status, + statusText: response.statusText, + responseHeaders: headersToRecord(response.headers), + durationMs: performance.now() - started + }) + if (!response.ok && options.stopOnError) break + } catch (error) { + results.push({ + request, + dryRun: false, + ok: false, + error: error instanceof Error ? error.message : String(error), + durationMs: performance.now() - started + }) + if (options.stopOnError) break + } finally { + clearTimeout(timer) + } + } + + const succeeded = results.filter((result) => result.ok).length + return { + dryRun, + startedAt, + completedAt: new Date().toISOString(), + requests, + results, + succeeded, + failed: results.length - succeeded + } +} diff --git a/packages/network-debugger/src/replay/types.ts b/packages/network-debugger/src/replay/types.ts new file mode 100644 index 0000000..9a6a3a0 --- /dev/null +++ b/packages/network-debugger/src/replay/types.ts @@ -0,0 +1,44 @@ +import type { HarDocument } from '../session/types' + +export type ReplaySource = string | HarDocument + +export interface ReplayRequest { + index: number + requestId?: string + method: string + url: string + headers: Record + body?: string +} + +export interface ReplayOptions { + /** Resolve and validate requests without opening a network connection. */ + dryRun?: boolean + /** Stop after the first failed request. Defaults to false. */ + stopOnError?: boolean + /** Per-request timeout. Defaults to 30 seconds. */ + timeoutMs?: number + /** Test/embedding hook. The global Fetch implementation is used by default. */ + fetch?: typeof fetch +} + +export interface ReplayResult { + request: ReplayRequest + dryRun: boolean + ok: boolean + status?: number + statusText?: string + responseHeaders?: Record + error?: string + durationMs: number +} + +export interface ReplayReport { + dryRun: boolean + startedAt: string + completedAt: string + requests: ReplayRequest[] + results: ReplayResult[] + succeeded: number + failed: number +} diff --git a/packages/network-debugger/src/runtime/controller.ts b/packages/network-debugger/src/runtime/controller.ts new file mode 100644 index 0000000..55a4e66 --- /dev/null +++ b/packages/network-debugger/src/runtime/controller.ts @@ -0,0 +1,376 @@ +import type { RegisterOptions } from '../common' +import { LegacyAdapter } from '../adapters/legacy' +import { NodeNativeAdapter, NodeNativeAdapterError } from '../adapters/node-native' +import { AdapterSelectionError, AdapterSelector } from '../adapters/selector' +import type { AdapterMode, Diagnostic, NetworkCapability } from '../adapters/types' +import { openDevtoolsTarget } from '../target/frontend-launcher' +import { exportHar, SessionRecorder } from '../session' +import { + createRegistrationHandle, + type RegistrationHandle, + type RuntimeAdapterSession +} from './registration' + +export class RuntimeRegistrationError extends Error { + constructor( + readonly code: + | 'NND_ALREADY_REGISTERED' + | 'NND_INVALID_MODE' + | 'NND_INVALID_SESSION_OPTIONS' + | 'NND_NATIVE_MOCK_CONFLICT', + message: string, + readonly details: Readonly> = {} + ) { + super(message) + this.name = 'RuntimeRegistrationError' + } +} + +interface NormalizedOptions { + mode: AdapterMode + requiredCapabilities: readonly NetworkCapability[] + inspector: { + host: string + port: number + } + devtools: { + open: boolean + } + session?: NonNullable + legacy: { + port?: number + serverPort?: number + intercept?: RegisterOptions['intercept'] + mock: NonNullable['mock']> + } + diagnostics: readonly Diagnostic[] +} + +interface ActiveRegistration { + key: string + handle: RegistrationHandle +} + +let activeRegistration: ActiveRegistration | undefined + +function normalizeOptions(options: RegisterOptions = {}): NormalizedOptions { + const diagnostics: Diagnostic[] = [] + const mode = options.mode ?? options.adapter ?? 'auto' + if (!['auto', 'native', 'legacy'].includes(mode)) { + throw new RuntimeRegistrationError('NND_INVALID_MODE', `Unknown adapter mode: ${mode}.`, { + mode + }) + } + + const mock = options.legacy?.mock ?? [] + if (mode === 'native' && mock.length > 0) { + throw new RuntimeRegistrationError( + 'NND_NATIVE_MOCK_CONFLICT', + 'Request/response mocking is available only with the Legacy backend.', + { + mode, + mockRuleCount: mock.length, + hint: 'Use mode: "legacy" or mode: "auto" when legacy.mock rules are configured.' + } + ) + } + + if (options.session) { + if (typeof options.session.directory !== 'string' || !options.session.directory.trim()) { + throw new RuntimeRegistrationError( + 'NND_INVALID_SESSION_OPTIONS', + 'Session recording requires a non-empty directory.' + ) + } + if ( + options.session.bodyCommandTimeoutMs !== undefined && + (!Number.isSafeInteger(options.session.bodyCommandTimeoutMs) || + options.session.bodyCommandTimeoutMs <= 0) + ) { + throw new RuntimeRegistrationError( + 'NND_INVALID_SESSION_OPTIONS', + 'session.bodyCommandTimeoutMs must be a positive integer.' + ) + } + if (typeof options.session.har === 'string' && !options.session.har.trim()) { + throw new RuntimeRegistrationError( + 'NND_INVALID_SESSION_OPTIONS', + 'session.har must be true, false, or a non-empty output path.' + ) + } + } + + if (options.adapter !== undefined) { + diagnostics.push({ + code: 'NND_OPTION_ADAPTER_DEPRECATED', + level: 'warn', + message: 'The "adapter" option is deprecated; use "mode".', + hint: `Replace adapter: "${options.adapter}" with mode: "${options.adapter}".` + }) + } + + const usesLegacyTopLevelOptions = + options.port !== undefined || + options.serverPort !== undefined || + options.intercept !== undefined || + options.autoOpenDevtool !== undefined + if (usesLegacyTopLevelOptions) { + diagnostics.push({ + code: 'NND_LEGACY_OPTIONS_DEPRECATED', + level: 'warn', + message: 'Top-level Legacy options are deprecated.', + hint: 'Move capture and port settings under "legacy", and browser behavior under "devtools".' + }) + } + + return { + mode, + requiredCapabilities: options.requiredCapabilities ?? options.requiredFeatures ?? [], + inspector: { + host: options.inspector?.host ?? '127.0.0.1', + port: options.inspector?.port ?? 0 + }, + devtools: { + open: options.devtools?.open ?? options.autoOpenDevtool ?? false + }, + ...(options.session ? { session: { ...options.session } } : {}), + legacy: { + port: options.legacy?.port ?? options.port, + serverPort: options.legacy?.serverPort ?? options.serverPort, + intercept: options.legacy?.intercept ?? options.intercept, + mock + }, + diagnostics + } +} + +function configurationKey(options: NormalizedOptions): string { + return JSON.stringify({ + mode: options.mode, + requiredCapabilities: [...options.requiredCapabilities].sort(), + inspector: options.inspector, + devtools: options.devtools, + session: options.session, + legacy: options.legacy + }) +} + +function uniqueDiagnostics(diagnostics: readonly Diagnostic[]): readonly Diagnostic[] { + const seen = new Set() + return diagnostics.filter((diagnostic) => { + const key = `${diagnostic.code}:${diagnostic.message}` + if (seen.has(key)) return false + seen.add(key) + return true + }) +} + +function promoteForcedNativeError(error: unknown): unknown { + if (!(error instanceof AdapterSelectionError)) return error + const diagnostics = error.details.diagnostics + if (!Array.isArray(diagnostics)) return error + const nativeDiagnostics = diagnostics.filter( + (diagnostic): diagnostic is Diagnostic => + typeof diagnostic === 'object' && + diagnostic !== null && + typeof (diagnostic as Diagnostic).code === 'string' && + typeof (diagnostic as Diagnostic).message === 'string' + ) + const actionable = nativeDiagnostics.find((diagnostic) => diagnostic.level === 'error') + return actionable ? new NodeNativeAdapterError(actionable, nativeDiagnostics) : error +} + +async function attachSessionRecorder( + session: RuntimeAdapterSession, + options: NormalizedOptions['session'] +): Promise { + if (!options) return session + + let recorder: SessionRecorder + try { + recorder = await SessionRecorder.start({ + directory: options.directory, + target: session.target, + bodyCommandTimeoutMs: options.bodyCommandTimeoutMs + }) + } catch (error) { + await session.dispose().catch(() => undefined) + throw error + } + + const manifest = recorder.getManifest() + let disposePromise: Promise | undefined + return { + ...session, + diagnostics: uniqueDiagnostics([ + ...session.diagnostics, + { + code: 'NND_SESSION_RECORDING_STARTED', + level: 'info', + message: `Recording Network events to ${recorder.directory}.`, + details: { directory: recorder.directory, sessionId: manifest.sessionId } + } + ]), + recording: { directory: recorder.directory, sessionId: manifest.sessionId }, + dispose() { + if (disposePromise) return disposePromise + disposePromise = (async () => { + let recordingError: unknown + try { + await recorder.close() + if (options.har) { + await exportHar( + recorder.directory, + typeof options.har === 'string' ? options.har : undefined + ) + } + } catch (error) { + recordingError = error + } + + let backendError: unknown + try { + await session.dispose() + } catch (error) { + backendError = error + } + if (recordingError) throw recordingError + if (backendError) throw backendError + })() + return disposePromise + } + } +} + +function startRuntime(options: NormalizedOptions): Promise { + const native = new NodeNativeAdapter() + const legacy = new LegacyAdapter({ + port: options.legacy.port, + serverPort: options.legacy.serverPort, + // Browser launching is owned by the registration handle, never Legacy. + autoOpenDevtool: false, + intercept: options.legacy.intercept, + mock: options.legacy.mock + }) + const mockFallbackReason: Diagnostic | undefined = + options.mode === 'auto' && options.legacy.mock.length > 0 + ? { + code: 'NND_AUTO_LEGACY_MOCK_REQUIRED', + level: 'info', + message: 'Auto selected Legacy because request/response mocking was configured.', + hint: 'Remove legacy.mock to allow Auto to select the Native backend.' + } + : undefined + const selectionMode = mockFallbackReason ? 'legacy' : options.mode + const selectionOptions = { + mode: selectionMode, + requiredCapabilities: options.requiredCapabilities, + inspector: options.inspector + } as const + const startOptions = { + requiredCapabilities: options.requiredCapabilities, + inspector: options.inspector + } + const selector = new AdapterSelector([native, legacy]) + + // Actual adapter probes are deliberately synchronous and side-effect-free. + // Start the predicted adapter before the first Promise turn so the historical + // `register(); request()` form cannot miss its first Legacy request. The + // selector remains authoritative and verifies the prediction asynchronously. + const nativeProbe = native.probe(startOptions) + const legacyProbe = legacy.probe(startOptions) + const hasRequirements = (capabilities: typeof nativeProbe.capabilities) => + options.requiredCapabilities.every((capability) => capabilities[capability]) + const predicted = + selectionMode === 'native' + ? nativeProbe.available && hasRequirements(nativeProbe.capabilities) + ? native + : undefined + : selectionMode === 'legacy' + ? legacyProbe.available && hasRequirements(legacyProbe.capabilities) + ? legacy + : undefined + : nativeProbe.available && + nativeProbe.autoSelectable !== false && + hasRequirements(nativeProbe.capabilities) + ? native + : legacyProbe.available && + legacyProbe.autoSelectable !== false && + hasRequirements(legacyProbe.capabilities) + ? legacy + : undefined + const startedSession = predicted?.start(startOptions) + + return selector + .select(selectionOptions) + .then(async (selection) => { + let session + if (predicted === selection.adapter && startedSession) { + session = await startedSession + } else { + if (startedSession) await (await startedSession).dispose() + session = await selection.adapter.start(startOptions) + } + const diagnostics = uniqueDiagnostics([ + ...options.diagnostics, + ...session.diagnostics, + ...(selection.fallbackReason ? [selection.fallbackReason] : []), + ...(mockFallbackReason ? [mockFallbackReason] : []) + ]) + + return attachSessionRecorder( + { + ...session, + diagnostics, + fallbackReason: mockFallbackReason ?? selection.fallbackReason + }, + options.session + ) + }) + .catch(async (error) => { + if (startedSession) await (await startedSession).dispose() + throw options.mode === 'native' ? promoteForcedNativeError(error) : error + }) +} + +/** + * Register network inspection for this process. + * + * The return value is intentionally callable for v1 compatibility while also + * exposing an observable asynchronous lifecycle for v2 consumers. + */ +export function register(options: RegisterOptions = {}): RegistrationHandle { + const normalized = normalizeOptions(options) + const key = configurationKey(normalized) + + if (activeRegistration) { + if (activeRegistration.key === key) return activeRegistration.handle + throw new RuntimeRegistrationError( + 'NND_ALREADY_REGISTERED', + 'Node Network Devtools is already registered with a different configuration.', + { activeConfiguration: activeRegistration.key, requestedConfiguration: key } + ) + } + + const session = startRuntime(normalized) + let handle!: RegistrationHandle + handle = createRegistrationHandle({ + session, + openTarget: openDevtoolsTarget, + openOnReady: normalized.devtools.open, + onDisposed: () => { + if (activeRegistration?.handle === handle) activeRegistration = undefined + } + }) + activeRegistration = { key, handle } + + void handle.ready.catch(() => { + if (activeRegistration?.handle === handle) activeRegistration = undefined + }) + return handle +} + +/** Test-only reset for isolated module suites. */ +export async function disposeActiveRegistration(): Promise { + await activeRegistration?.handle.dispose() +} diff --git a/packages/network-debugger/src/runtime/registration.test.ts b/packages/network-debugger/src/runtime/registration.test.ts new file mode 100644 index 0000000..a983775 --- /dev/null +++ b/packages/network-debugger/src/runtime/registration.test.ts @@ -0,0 +1,127 @@ +import { describe, expect, test, vi } from 'vitest' +import type { RuntimeAdapterSession } from './registration' +import { createRegistrationHandle } from './registration' + +function session(overrides: Partial = {}): RuntimeAdapterSession { + return { + kind: 'native', + capabilities: { + http: true, + https: true, + fetch: true, + http2: true, + responseBody: true, + requestBody: false, + websocketLifecycle: true, + websocketFrames: false, + sseMessages: false, + initiator: true + }, + target: { + id: 'target', + title: 'Node.js', + type: 'node', + url: 'file:///app.mjs', + webSocketDebuggerUrl: 'ws://127.0.0.1:9229/target', + devtoolsFrontendUrl: 'devtools://target', + discoveryUrl: 'http://127.0.0.1:9229/json/list' + }, + diagnostics: [], + dispose: vi.fn().mockResolvedValue(undefined), + ...overrides + } +} + +describe('RegistrationHandle', () => { + test('emits typed readiness and diagnostics, then disposes once', async () => { + const diagnostic = { + code: 'NND_AUTO_FALLBACK', + level: 'warn' as const, + message: 'Using Legacy.' + } + const adapterSession = session({ kind: 'legacy', diagnostics: [diagnostic] }) + const stateListener = vi.fn() + const diagnosticListener = vi.fn() + const onDisposed = vi.fn() + const handle = createRegistrationHandle({ + session: Promise.resolve(adapterSession), + openTarget: vi.fn(), + onDisposed + }) + + handle.on('state', stateListener) + handle.on('diagnostic', diagnosticListener) + const ready = await handle.ready + + expect(ready.mode).toBe('legacy') + expect(stateListener).toHaveBeenCalledWith({ state: 'ready', mode: 'legacy' }) + expect(diagnosticListener).toHaveBeenCalledWith(diagnostic) + + await Promise.all([handle.dispose(), handle.dispose()]) + expect(adapterSession.dispose).toHaveBeenCalledOnce() + expect(onDisposed).toHaveBeenCalledOnce() + }) + + test('does not launch a frontend until explicitly requested', async () => { + const openTarget = vi.fn().mockResolvedValue(undefined) + const adapterSession = session() + const handle = createRegistrationHandle({ + session: Promise.resolve(adapterSession), + openTarget + }) + + await handle.ready + expect(openTarget).not.toHaveBeenCalled() + + await handle.openDevtools() + expect(openTarget).toHaveBeenCalledWith(adapterSession.target) + }) + + test('supports opt-in opening without coupling disposal to the frontend', async () => { + const openTarget = vi.fn().mockResolvedValue(undefined) + const adapterSession = session() + const handle = createRegistrationHandle({ + session: Promise.resolve(adapterSession), + openTarget, + openOnReady: true + }) + + await handle.ready + expect(openTarget).toHaveBeenCalledOnce() + await handle.dispose() + expect(openTarget).toHaveBeenCalledOnce() + expect(adapterSession.dispose).toHaveBeenCalledOnce() + }) + + test('surfaces a terminal backend failure after initial readiness', async () => { + let fail!: (error: Error) => void + const unsubscribe = vi.fn() + const adapterSession = session({ + kind: 'legacy', + onFailure(listener) { + fail = listener + return unsubscribe + } + }) + const stateListener = vi.fn() + const handle = createRegistrationHandle({ + session: Promise.resolve(adapterSession), + openTarget: vi.fn() + }) + handle.on('state', stateListener) + + await handle.ready + const error = new Error('Legacy recovery exhausted') + fail(error) + + expect(handle.status()).toEqual({ state: 'failed', mode: 'legacy', error }) + expect(stateListener).toHaveBeenLastCalledWith({ + state: 'failed', + mode: 'legacy', + error + }) + await handle.dispose() + expect(adapterSession.dispose).toHaveBeenCalledOnce() + expect(unsubscribe).toHaveBeenCalledOnce() + }) +}) diff --git a/packages/network-debugger/src/runtime/registration.ts b/packages/network-debugger/src/runtime/registration.ts new file mode 100644 index 0000000..6de2bf1 --- /dev/null +++ b/packages/network-debugger/src/runtime/registration.ts @@ -0,0 +1,166 @@ +import type { + AdapterKind, + AdapterSession, + CapabilityMap, + DevtoolsTarget, + Diagnostic +} from '../adapters/types' + +export type RegistrationState = 'starting' | 'ready' | 'disposing' | 'disposed' | 'failed' + +export interface ReadyInfo { + mode: AdapterKind + target: DevtoolsTarget + capabilities: CapabilityMap + diagnostics: readonly Diagnostic[] + fallbackReason?: Diagnostic + session?: { + directory: string + sessionId: string + } +} + +export interface RegistrationStatus { + state: RegistrationState + mode?: AdapterKind + error?: unknown +} + +export type RegistrationEvent = + | { type: 'state'; status: RegistrationStatus } + | { type: 'diagnostic'; diagnostic: Diagnostic } + +export interface RuntimeAdapterSession extends AdapterSession { + fallbackReason?: Diagnostic + recording?: ReadyInfo['session'] +} + +export type RegistrationHandle = (() => void) & { + readonly ready: Promise + status(): RegistrationStatus + openDevtools(): Promise + dispose(): Promise + on(listener: (event: RegistrationEvent) => void): () => void + on(type: 'state', listener: (status: RegistrationStatus) => void): () => void + on(type: 'diagnostic', listener: (diagnostic: Diagnostic) => void): () => void +} + +interface RegistrationHandleOptions { + session: Promise + openTarget(target: DevtoolsTarget): Promise + openOnReady?: boolean + onDisposed?(): void +} + +export function createRegistrationHandle(options: RegistrationHandleOptions): RegistrationHandle { + let status: RegistrationStatus = { state: 'starting' } + let adapterSession: RuntimeAdapterSession | undefined + let unsubscribeSessionDiagnostics: (() => void) | undefined + let unsubscribeSessionFailure: (() => void) | undefined + let disposePromise: Promise | undefined + const listeners = new Set<(event: RegistrationEvent) => void>() + + const emit = (event: RegistrationEvent) => { + for (const listener of listeners) listener(event) + } + const updateStatus = (next: RegistrationStatus) => { + status = next + emit({ type: 'state', status: { ...next } }) + } + + const ready = options.session.then( + async (session) => { + adapterSession = session + const info: ReadyInfo = { + mode: session.kind, + target: session.target, + capabilities: session.capabilities, + diagnostics: session.diagnostics, + fallbackReason: session.fallbackReason, + ...(session.recording ? { session: { ...session.recording } } : {}) + } + updateStatus({ state: 'ready', mode: session.kind }) + for (const diagnostic of session.diagnostics) { + emit({ type: 'diagnostic', diagnostic }) + } + unsubscribeSessionDiagnostics = session.onDiagnostic?.((diagnostic) => { + emit({ type: 'diagnostic', diagnostic }) + }) + unsubscribeSessionFailure = session.onFailure?.((error) => { + if (status.state === 'ready') { + updateStatus({ state: 'failed', mode: session.kind, error }) + } + }) + if (options.openOnReady) await options.openTarget(session.target) + return info + }, + (error) => { + updateStatus({ state: 'failed', error }) + throw error + } + ) + + const dispose = () => { + if (disposePromise) return disposePromise + disposePromise = (async () => { + if (status.state !== 'failed') { + updateStatus({ state: 'disposing', mode: adapterSession?.kind }) + } + try { + const session = adapterSession ?? (await options.session) + await session.dispose() + } catch (error) { + if (status.state !== 'failed') throw error + } finally { + unsubscribeSessionDiagnostics?.() + unsubscribeSessionDiagnostics = undefined + unsubscribeSessionFailure?.() + unsubscribeSessionFailure = undefined + updateStatus({ state: 'disposed', mode: adapterSession?.kind }) + listeners.clear() + options.onDisposed?.() + } + })() + return disposePromise + } + + const callable = (() => { + void dispose() + }) as RegistrationHandle + + Object.defineProperties(callable, { + ready: { value: ready, enumerable: true }, + status: { value: () => ({ ...status }), enumerable: true }, + openDevtools: { + value: async () => { + const info = await ready + await options.openTarget(info.target) + }, + enumerable: true + }, + dispose: { value: dispose, enumerable: true }, + on: { + value: ( + typeOrListener: RegistrationEvent['type'] | ((event: RegistrationEvent) => void), + typedListener?: ((value: RegistrationStatus) => void) | ((value: Diagnostic) => void) + ) => { + const listener = + typeof typeOrListener === 'function' + ? typeOrListener + : (event: RegistrationEvent) => { + if (event.type !== typeOrListener) return + if (event.type === 'state') { + ;(typedListener as (status: RegistrationStatus) => void)?.(event.status) + } else { + ;(typedListener as (diagnostic: Diagnostic) => void)?.(event.diagnostic) + } + } + listeners.add(listener) + return () => listeners.delete(listener) + }, + enumerable: true + } + }) + + return callable +} diff --git a/packages/network-debugger/src/session/files.ts b/packages/network-debugger/src/session/files.ts new file mode 100644 index 0000000..165c8f9 --- /dev/null +++ b/packages/network-debugger/src/session/files.ts @@ -0,0 +1,60 @@ +import { createHash, randomUUID } from 'node:crypto' +import { promises as fs } from 'node:fs' +import { dirname, isAbsolute, relative, resolve, sep } from 'node:path' +import { SESSION_SCHEMA_VERSION, type SessionManifest } from './types' + +export function sha256(value: string | Buffer): string { + return createHash('sha256').update(value).digest('hex') +} + +export function bodyFileName(requestId: string, body: Buffer): string { + return `${sha256(requestId).slice(0, 16)}-${sha256(body)}.body` +} + +export function jsonStringify(value: unknown, spacing?: number): string { + return JSON.stringify( + value, + (_key, nested) => (typeof nested === 'bigint' ? nested.toString() : nested), + spacing + ) +} + +export async function atomicWriteJson(path: string, value: unknown): Promise { + await fs.mkdir(dirname(path), { recursive: true }) + const temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp` + try { + await fs.writeFile(temporaryPath, `${jsonStringify(value, 2)}\n`, { + encoding: 'utf8', + flag: 'wx' + }) + await fs.rename(temporaryPath, path) + } catch (error) { + await fs.unlink(temporaryPath).catch(() => undefined) + throw error + } +} + +export function resolveInside(rootDirectory: string, relativePath: string): string { + if (isAbsolute(relativePath)) throw new Error(`Session path must be relative: ${relativePath}`) + const root = resolve(rootDirectory) + const absolute = resolve(root, relativePath) + const pathFromRoot = relative(root, absolute) + if (pathFromRoot === '' || pathFromRoot === '..' || pathFromRoot.startsWith(`..${sep}`)) { + throw new Error(`Session path escapes its root: ${relativePath}`) + } + return absolute +} + +export async function readSessionManifest(directory: string): Promise { + const manifestPath = resolve(directory, 'manifest.json') + const parsed = JSON.parse(await fs.readFile(manifestPath, 'utf8')) as Partial + if (parsed.schemaVersion !== SESSION_SCHEMA_VERSION) { + throw new Error( + `Unsupported session schema version ${String(parsed.schemaVersion)} in ${manifestPath}.` + ) + } + if (!parsed.target || !parsed.requestIndex || !parsed.bodyIndex || !parsed.traceIndex) { + throw new Error(`Invalid session manifest: ${manifestPath}.`) + } + return parsed as SessionManifest +} diff --git a/packages/network-debugger/src/session/har.test.ts b/packages/network-debugger/src/session/har.test.ts new file mode 100644 index 0000000..0d5bfaf --- /dev/null +++ b/packages/network-debugger/src/session/har.test.ts @@ -0,0 +1,245 @@ +import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' +import { join } from 'node:path' +import { tmpdir } from 'node:os' +import { afterEach, describe, expect, test } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' +import { buildHar, exportHar } from './har' +import { readSessionManifest } from './files' +import { SessionRecorder } from './recorder' +import type { CdpProtocolEvent, ResponseBodyResult, SessionProtocolConnection } from './types' + +const TARGET: DevtoolsTarget = { + id: 'har-test', + title: 'HAR test', + type: 'node', + url: '', + webSocketDebuggerUrl: 'ws://127.0.0.1:43124/devtools/page/har-test', + discoveryUrl: 'http://127.0.0.1:43124/json/list' +} + +class HarTap implements SessionProtocolConnection { + readonly target = TARGET + state: SessionProtocolConnection['state'] = 'idle' + readonly bodies = new Map() + private readonly listeners = new Set<(event: CdpProtocolEvent) => void | Promise>() + + async connect() { + this.state = 'open' + } + + async command(_method: string, params: Record = {}) { + const result = this.bodies.get(String(params.requestId)) + if (!result) throw new Error('missing body') + return result as T + } + + onEvent(listener: (event: CdpProtocolEvent) => void | Promise) { + this.listeners.add(listener) + return () => this.listeners.delete(listener) + } + + onDisconnect() { + return () => undefined + } + + async close() { + this.state = 'closed' + } + + async emit(method: string, params: Record) { + await Promise.all([...this.listeners].map((listener) => listener({ method, params }))) + } +} + +const directories: string[] = [] + +async function makeDirectory() { + const directory = await mkdtemp(join(tmpdir(), 'nnd-har-')) + directories.push(directory) + return directory +} + +afterEach(async () => { + await Promise.all(directories.splice(0).map((directory) => rm(directory, { recursive: true }))) +}) + +describe('HAR 1.2 export', () => { + test('matches text, binary, failed, and traced requests from one session', async () => { + const directory = await makeDirectory() + const tap = new HarTap() + const binary = Buffer.from([0, 1, 254, 255]) + tap.bodies.set('text', { body: 'hello', base64Encoded: false }) + tap.bodies.set('binary', { body: binary.toString('base64'), base64Encoded: true }) + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + + await tap.emit('Network.requestWillBeSent', { + requestId: 'text', + timestamp: 1, + wallTime: 1_800_000_000, + type: 'Fetch', + request: { + url: 'https://example.test/text?tag=one&tag=two', + method: 'POST', + headers: { + 'content-type': 'text/plain', + 'x-request': 'captured', + traceparent: '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' + }, + postData: 'posted' + } + }) + await tap.emit('Network.responseReceived', { + requestId: 'text', + timestamp: 1.2, + type: 'Fetch', + response: { + url: 'https://example.test/text?tag=one&tag=two', + status: 201, + statusText: 'Created', + protocol: 'h2', + headers: { 'content-type': 'text/plain', 'x-response': 'captured' }, + mimeType: 'text/plain', + timing: { + dnsStart: 0, + dnsEnd: 2, + connectStart: 2, + connectEnd: 5, + sslStart: 3, + sslEnd: 5, + sendStart: 5, + sendEnd: 6 + } + } + }) + await tap.emit('Network.loadingFinished', { + requestId: 'text', + timestamp: 1.5, + encodedDataLength: 5 + }) + + await tap.emit('Network.requestWillBeSent', { + requestId: 'binary', + timestamp: 2, + wallTime: 1_800_000_001, + request: { + url: 'https://example.test/file.bin', + method: 'GET', + headers: {} + } + }) + await tap.emit('Network.responseReceived', { + requestId: 'binary', + timestamp: 2.1, + response: { + url: 'https://example.test/file.bin', + status: 206, + statusText: 'Partial Content', + protocol: 'http/1.1', + headers: { 'content-type': 'application/octet-stream' }, + mimeType: 'application/octet-stream' + } + }) + await tap.emit('Network.loadingFinished', { + requestId: 'binary', + timestamp: 2.2, + encodedDataLength: binary.length + }) + + await tap.emit('Network.requestWillBeSent', { + requestId: 'failed', + timestamp: 3, + wallTime: 1_800_000_002_000, + request: { + url: 'https://example.test/unavailable', + method: 'GET', + headers: { accept: '*/*' } + } + }) + await tap.emit('Network.loadingFailed', { + requestId: 'failed', + timestamp: 3.05, + errorText: 'net::ERR_CONNECTION_REFUSED', + canceled: false + }) + await recorder.close() + + const outputPath = join(directory, 'export.har') + const result = await exportHar(directory, outputPath) + expect(result.outputPath).toBe(outputPath) + expect(JSON.parse(await readFile(outputPath, 'utf8'))).toEqual(result.har) + expect(result.har.log).toMatchObject({ + version: '1.2', + creator: { name: 'node-network-devtools' } + }) + expect(result.har.log.entries).toHaveLength(3) + + const text = result.har.log.entries[0] + expect(text.request).toMatchObject({ + method: 'POST', + url: 'https://example.test/text?tag=one&tag=two', + httpVersion: 'HTTP/2', + queryString: [ + { name: 'tag', value: 'one' }, + { name: 'tag', value: 'two' } + ], + postData: { mimeType: 'text/plain', text: 'posted' } + }) + expect(text.request.headers).toContainEqual({ name: 'x-request', value: 'captured' }) + expect(text.response).toMatchObject({ + status: 201, + statusText: 'Created', + content: { size: 5, mimeType: 'text/plain', text: 'hello' } + }) + expect(text.response.content.encoding).toBeUndefined() + expect(text.time).toBeCloseTo(500) + expect(text.timings).toMatchObject({ dns: 2, connect: 3, send: 1, ssl: 2 }) + expect(text.timings.wait).toBeCloseTo(200) + expect(text.timings.receive).toBeCloseTo(300) + expect(text._trace).toMatchObject({ + traceId: '4bf92f3577b34da6a3ce929d0e0e4736', + parentId: '00f067aa0ba902b7' + }) + + const binaryEntry = result.har.log.entries[1] + expect(binaryEntry.response.content).toEqual({ + size: binary.length, + mimeType: 'application/octet-stream', + text: binary.toString('base64'), + encoding: 'base64' + }) + + const failure = result.har.log.entries[2] + expect(failure.response.status).toBe(0) + expect(failure.response.statusText).toBe('net::ERR_CONNECTION_REFUSED') + expect(failure._failure).toEqual({ + errorText: 'net::ERR_CONNECTION_REFUSED', + canceled: false + }) + expect(failure.startedDateTime).toBe(new Date(1_800_000_002_000).toISOString()) + }) + + test('rejects a body whose external bytes no longer match the manifest index', async () => { + const directory = await makeDirectory() + const tap = new HarTap() + tap.bodies.set('body', { body: 'original', base64Encoded: false }) + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + await tap.emit('Network.requestWillBeSent', { + requestId: 'body', + timestamp: 1, + request: { url: 'https://example.test', method: 'GET', headers: {} } + }) + await tap.emit('Network.responseReceived', { + requestId: 'body', + timestamp: 2, + response: { status: 200, headers: {}, mimeType: 'text/plain' } + }) + await tap.emit('Network.loadingFinished', { requestId: 'body', timestamp: 3 }) + await recorder.close() + const manifest = await readSessionManifest(directory) + await writeFile(join(directory, manifest.bodyIndex.body.path), 'tampered') + + await expect(buildHar(directory)).rejects.toThrow( + 'Session body integrity check failed for request body.' + ) + }) +}) diff --git a/packages/network-debugger/src/session/har.ts b/packages/network-debugger/src/session/har.ts new file mode 100644 index 0000000..94d59f5 --- /dev/null +++ b/packages/network-debugger/src/session/har.ts @@ -0,0 +1,207 @@ +import { promises as fs } from 'node:fs' +import { resolve } from 'node:path' +import { atomicWriteJson, readSessionManifest, resolveInside, sha256 } from './files' +import { sessionHeaderValue } from './trace' +import type { + HarDocument, + HarEntry, + HarExportResult, + HarHeader, + HarQueryParameter, + SessionBodyIndexEntry, + SessionManifest, + SessionRequestIndexEntry +} from './types' + +function asRecord(value: unknown): Record { + return value && typeof value === 'object' && !Array.isArray(value) + ? (value as Record) + : {} +} + +function stringValue(value: unknown, fallback = ''): string { + return typeof value === 'string' ? value : value === undefined ? fallback : String(value) +} + +function finiteNumber(value: unknown): number | undefined { + return typeof value === 'number' && Number.isFinite(value) ? value : undefined +} + +function headersToHar(headers: unknown): HarHeader[] { + const record = asRecord(headers) + const output: HarHeader[] = [] + for (const [name, value] of Object.entries(record)) { + if (Array.isArray(value)) { + for (const nested of value) output.push({ name, value: String(nested) }) + } else if (value !== undefined && value !== null) { + output.push({ name, value: String(value) }) + } + } + return output +} + +function queryString(url: string): HarQueryParameter[] { + try { + return [...new URL(url).searchParams].map(([name, value]) => ({ name, value })) + } catch { + return [] + } +} + +function millisecondsBetween(end: number | undefined, start: number | undefined): number { + if (end === undefined || start === undefined) return 0 + return Math.max(0, (end - start) * 1000) +} + +function timingDuration(timing: Record, start: string, end: string): number { + const startValue = finiteNumber(timing[start]) + const endValue = finiteNumber(timing[end]) + if (startValue === undefined || endValue === undefined || startValue < 0 || endValue < 0) { + return -1 + } + return Math.max(0, endValue - startValue) +} + +function startedDateTime(request: SessionRequestIndexEntry, fallback: string): string { + if (request.wallTime === undefined) return fallback + const milliseconds = + request.wallTime > 100_000_000_000 ? request.wallTime : request.wallTime * 1000 + const date = new Date(milliseconds) + return Number.isNaN(date.getTime()) ? fallback : date.toISOString() +} + +async function readIndexedBody( + sessionDirectory: string, + body: SessionBodyIndexEntry | undefined +): Promise { + if (!body) return undefined + const bytes = await fs.readFile(resolveInside(sessionDirectory, body.path)) + if (bytes.length !== body.byteLength || sha256(bytes) !== body.sha256) { + throw new Error(`Session body integrity check failed for request ${body.requestId}.`) + } + return bytes +} + +function responseProtocol(response: Record): string { + const protocol = stringValue(response.protocol) + if (!protocol) return 'HTTP/1.1' + if (protocol === 'h2') return 'HTTP/2' + if (/^http\//i.test(protocol)) return protocol.toUpperCase() + return protocol +} + +async function toHarEntry( + sessionDirectory: string, + manifest: SessionManifest, + indexed: SessionRequestIndexEntry +): Promise { + const request = asRecord(indexed.request) + const response = asRecord(indexed.response) + const requestHeaders = request.headers + const responseHeaders = response.headers + const url = stringValue(request.url, stringValue(response.url)) + const method = stringValue(request.method, 'GET') + const postData = typeof request.postData === 'string' ? request.postData : undefined + const bodyIndex = manifest.bodyIndex[indexed.requestId] + const body = await readIndexedBody(sessionDirectory, bodyIndex) + const responseMimeType = stringValue( + response.mimeType, + sessionHeaderValue(responseHeaders, 'content-type') ?? + bodyIndex?.mimeType ?? + 'application/octet-stream' + ) + const responseTimestamp = indexed.responseTimestamp + const terminalTimestamp = indexed.finishedTimestamp ?? responseTimestamp + const totalTime = millisecondsBetween(terminalTimestamp, indexed.requestTimestamp) + const responseTiming = asRecord(response.timing) + const wait = millisecondsBetween(responseTimestamp, indexed.requestTimestamp) + const receive = millisecondsBetween(terminalTimestamp, responseTimestamp) + const status = finiteNumber(response.status) ?? 0 + const requestBodySize = postData === undefined ? 0 : Buffer.byteLength(postData) + const responseBodySize = body?.length ?? indexed.encodedDataLength ?? 0 + + const entry: HarEntry = { + startedDateTime: startedDateTime(indexed, manifest.createdAt), + time: totalTime, + request: { + method, + url, + httpVersion: responseProtocol(response), + cookies: [], + headers: headersToHar(requestHeaders), + queryString: queryString(url), + ...(postData !== undefined + ? { + postData: { + mimeType: + sessionHeaderValue(requestHeaders, 'content-type') ?? 'application/octet-stream', + text: postData + } + } + : {}), + headersSize: -1, + bodySize: requestBodySize + }, + response: { + status, + statusText: stringValue(response.statusText, indexed.failure?.errorText ?? ''), + httpVersion: responseProtocol(response), + cookies: [], + headers: headersToHar(responseHeaders), + content: { + size: body?.length ?? indexed.encodedDataLength ?? 0, + mimeType: responseMimeType, + ...(body + ? bodyIndex?.base64Encoded + ? { text: body.toString('base64'), encoding: 'base64' as const } + : { text: body.toString('utf8') } + : {}) + }, + redirectURL: sessionHeaderValue(responseHeaders, 'location') ?? '', + headersSize: -1, + bodySize: responseBodySize + }, + cache: {}, + timings: { + blocked: timingDuration(responseTiming, 'proxyStart', 'proxyEnd'), + dns: timingDuration(responseTiming, 'dnsStart', 'dnsEnd'), + connect: timingDuration(responseTiming, 'connectStart', 'connectEnd'), + send: timingDuration(responseTiming, 'sendStart', 'sendEnd'), + wait, + receive, + ssl: timingDuration(responseTiming, 'sslStart', 'sslEnd') + }, + _requestId: indexed.requestId, + ...(indexed.failure ? { _failure: { ...indexed.failure } } : {}), + ...(indexed.trace ? { _trace: { ...indexed.trace } } : {}) + } + return entry +} + +export async function buildHar(sessionDirectory: string): Promise { + const directory = resolve(sessionDirectory) + const manifest = await readSessionManifest(directory) + const requests = Object.values(manifest.requestIndex).sort( + (left, right) => left.firstSequence - right.firstSequence + ) + const entries: HarEntry[] = [] + for (const request of requests) entries.push(await toHarEntry(directory, manifest, request)) + return { + log: { + version: '1.2', + creator: { name: 'node-network-devtools', version: '2' }, + pages: [], + entries + } + } +} + +export async function exportHar( + sessionDirectory: string, + outputPath = resolve(sessionDirectory, 'session.har') +): Promise { + const absoluteOutputPath = resolve(outputPath) + const har = await buildHar(sessionDirectory) + await atomicWriteJson(absoluteOutputPath, har) + return { outputPath: absoluteOutputPath, har } +} diff --git a/packages/network-debugger/src/session/index.ts b/packages/network-debugger/src/session/index.ts new file mode 100644 index 0000000..94eb334 --- /dev/null +++ b/packages/network-debugger/src/session/index.ts @@ -0,0 +1,37 @@ +export { + CdpCommandError, + ProtocolTap, + ProtocolTapError, + type ProtocolTapErrorCode +} from './protocol-tap' +export { SessionRecorder } from './recorder' +export { buildHar, exportHar } from './har' +export { readSessionManifest } from './files' +export { parseTraceparent, traceContextFromHeaders } from './trace' +export { + SESSION_SCHEMA_VERSION, + type CdpCommandId, + type CdpErrorObject, + type CdpProtocolEvent, + type HarContent, + type HarDocument, + type HarEntry, + type HarExportResult, + type HarHeader, + type HarPostData, + type HarQueryParameter, + type ProtocolTapCommandOptions, + type ProtocolTapOptions, + type ResponseBodyResult, + type SessionBodyIndexEntry, + type SessionEventRecord, + type SessionFailure, + type SessionManifest, + type SessionProtocolConnection, + type SessionRecorderIssue, + type SessionRecorderOptions, + type SessionRequestIndexEntry, + type SessionTraceIndexEntry, + type SessionTraceSpan, + type TraceContext +} from './types' diff --git a/packages/network-debugger/src/session/protocol-tap.test.ts b/packages/network-debugger/src/session/protocol-tap.test.ts new file mode 100644 index 0000000..5a1236e --- /dev/null +++ b/packages/network-debugger/src/session/protocol-tap.test.ts @@ -0,0 +1,217 @@ +import { createServer, get, type Server } from 'node:http' +import type { AddressInfo } from 'node:net' +import { WebSocketServer, type WebSocket } from 'ws' +import { afterEach, beforeEach, describe, expect, test } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' +import { ProtocolTap } from './protocol-tap' + +interface Harness { + server: Server + webSocketServer: WebSocketServer + target: DevtoolsTarget + commands: Array<{ id: number | string; method: string; params: Record }> + clients: Set +} + +async function listen(server: Server): Promise { + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) + return (server.address() as AddressInfo).port +} + +async function createHarness(): Promise { + let target!: DevtoolsTarget + const commands: Harness['commands'] = [] + const clients = new Set() + const webSocketServer = new WebSocketServer({ noServer: true }) + const server = createServer((request, response) => { + if (request.url !== '/json/list') { + response.writeHead(404).end() + return + } + response.writeHead(200, { 'content-type': 'application/json' }) + response.end(JSON.stringify([target])) + }) + server.on('upgrade', (request, socket, head) => { + if (request.url !== '/devtools/page/session-integration') { + socket.destroy() + return + } + webSocketServer.handleUpgrade(request, socket, head, (client) => { + webSocketServer.emit('connection', client, request) + }) + }) + webSocketServer.on('connection', (client) => { + clients.add(client) + client.once('close', () => clients.delete(client)) + client.on('message', (raw) => { + const message = JSON.parse(raw.toString()) as { + id: number | string + method: string + params?: Record + } + commands.push({ id: message.id, method: message.method, params: message.params ?? {} }) + if (message.method === 'Network.enable') { + client.send(JSON.stringify({ id: message.id, result: {} })) + client.send( + JSON.stringify({ + method: 'Network.requestWillBeSent', + params: { requestId: 'from-real-websocket' } + }) + ) + } else if (message.method === 'Echo') { + const delay = Number(message.params?.delay ?? 0) + setTimeout(() => { + client.send(JSON.stringify({ id: message.id, result: { value: message.params?.value } })) + }, delay) + } else if (message.method === 'Fail') { + client.send( + JSON.stringify({ + id: message.id, + error: { code: -32000, message: 'intentional failure' } + }) + ) + } else if (message.method === 'Drop') { + client.close(1011, 'backend exited') + } else if (message.method === 'Malformed') { + client.send('{') + } + }) + }) + const port = await listen(server) + target = { + id: 'session-integration', + title: 'Session integration', + type: 'node', + url: '', + webSocketDebuggerUrl: `ws://127.0.0.1:${port}/devtools/page/session-integration`, + discoveryUrl: `http://127.0.0.1:${port}/json/list` + } + return { server, webSocketServer, target, commands, clients } +} + +async function discover(url: string): Promise { + return new Promise((resolve, reject) => { + get(url, (response) => { + const chunks: Buffer[] = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.on('end', () => { + try { + resolve((JSON.parse(Buffer.concat(chunks).toString()) as DevtoolsTarget[])[0]) + } catch (error) { + reject(error) + } + }) + }).on('error', reject) + }) +} + +async function closeHarness(harness: Harness): Promise { + for (const client of harness.clients) client.terminate() + await new Promise((resolve) => harness.webSocketServer.close(() => resolve())) + await new Promise((resolve) => harness.server.close(() => resolve())) +} + +describe('ProtocolTap real WebSocket transport', () => { + let harness: Harness + + beforeEach(async () => { + harness = await createHarness() + }) + + afterEach(async () => { + await closeHarness(harness) + }) + + test('connects through discovery, enables Network, dispatches events, and correlates commands', async () => { + const discovered = await discover(harness.target.discoveryUrl) + expect(discovered.webSocketDebuggerUrl).toBe(harness.target.webSocketDebuggerUrl) + const tap = new ProtocolTap(discovered) + const events: string[] = [] + tap.onEvent((event) => { + events.push(event.method) + }) + + await tap.connect() + const slow = tap.command<{ value: string }>('Echo', { value: 'slow', delay: 25 }) + const fast = tap.command<{ value: string }>('Echo', { value: 'fast', delay: 0 }) + + await expect(fast).resolves.toEqual({ value: 'fast' }) + await expect(slow).resolves.toEqual({ value: 'slow' }) + await expect(tap.command('Fail')).rejects.toMatchObject({ + name: 'CdpCommandError', + method: 'Fail', + cdpError: { code: -32000, message: 'intentional failure' } + }) + expect(events).toContain('Network.requestWillBeSent') + expect(harness.commands.filter(({ method }) => method === 'Network.enable')).toHaveLength(1) + + const firstClose = tap.close() + expect(tap.close()).toBe(firstClose) + await firstClose + expect(tap.state).toBe('closed') + }) + + test('bounds pending commands and rejects the waiter when closed', async () => { + const tap = new ProtocolTap(harness.target, { + maxPendingCommands: 1, + commandTimeoutMs: 30_000 + }) + await tap.connect() + const held = tap.command('Hold') + const heldRejection = expect(held).rejects.toMatchObject({ + code: 'SESSION_TAP_CLOSED' + }) + + await expect(tap.command('Second')).rejects.toMatchObject({ + code: 'SESSION_TAP_PENDING_LIMIT' + }) + expect(tap.pendingCommandCount).toBe(1) + await tap.close() + await heldRejection + expect(tap.pendingCommandCount).toBe(0) + }) + + test('expires unanswered commands without retaining pending state', async () => { + const tap = new ProtocolTap(harness.target, { commandTimeoutMs: 20 }) + await tap.connect() + + await expect(tap.command('Hold')).rejects.toMatchObject({ + code: 'SESSION_TAP_COMMAND_TIMEOUT' + }) + expect(tap.pendingCommandCount).toBe(0) + await tap.close() + }) + + test('surfaces abnormal disconnects to commands and observers', async () => { + const tap = new ProtocolTap(harness.target) + const disconnects: Error[] = [] + tap.onDisconnect((error) => disconnects.push(error)) + await tap.connect() + + await expect(tap.command('Drop')).rejects.toMatchObject({ + code: 'SESSION_TAP_DISCONNECTED' + }) + expect(disconnects).toHaveLength(1) + await expect(tap.command('AfterDrop')).rejects.toMatchObject({ + code: 'SESSION_TAP_DISCONNECTED' + }) + await tap.close() + }) + + test('treats malformed protocol JSON as a terminal protocol error', async () => { + const tap = new ProtocolTap(harness.target) + await tap.connect() + + await expect(tap.command('Malformed')).rejects.toMatchObject({ + code: 'SESSION_TAP_PROTOCOL_ERROR' + }) + expect(tap.pendingCommandCount).toBe(0) + await tap.close() + }) +}) diff --git a/packages/network-debugger/src/session/protocol-tap.ts b/packages/network-debugger/src/session/protocol-tap.ts new file mode 100644 index 0000000..3591744 --- /dev/null +++ b/packages/network-debugger/src/session/protocol-tap.ts @@ -0,0 +1,479 @@ +import WebSocket, { type RawData } from 'ws' +import type { DevtoolsTarget } from '../adapters/types' +import { withoutLegacyCapture } from '../core/capture-scope' +import type { + CdpCommandId, + CdpErrorObject, + CdpProtocolEvent, + ProtocolTapCommandOptions, + ProtocolTapOptions, + SessionProtocolConnection +} from './types' + +const DEFAULT_CONNECT_TIMEOUT_MS = 10_000 +const DEFAULT_COMMAND_TIMEOUT_MS = 10_000 +const DEFAULT_CLOSE_TIMEOUT_MS = 2_000 +const DEFAULT_MAX_PENDING_COMMANDS = 256 + +export type ProtocolTapErrorCode = + | 'SESSION_TAP_CLOSED' + | 'SESSION_TAP_DISCONNECTED' + | 'SESSION_TAP_CONNECT_TIMEOUT' + | 'SESSION_TAP_COMMAND_TIMEOUT' + | 'SESSION_TAP_PENDING_LIMIT' + | 'SESSION_TAP_PROTOCOL_ERROR' + +export class ProtocolTapError extends Error { + readonly cause?: unknown + + constructor( + readonly code: ProtocolTapErrorCode, + message: string, + cause?: unknown + ) { + super(message) + this.name = 'ProtocolTapError' + this.cause = cause + } +} + +export class CdpCommandError extends Error { + constructor( + readonly method: string, + readonly commandId: CdpCommandId, + readonly cdpError: CdpErrorObject + ) { + super(`CDP command ${method} failed (${cdpError.code}): ${cdpError.message}`) + this.name = 'CdpCommandError' + } +} + +interface PendingCommand { + method: string + timer: ReturnType + resolve(value: unknown): void + reject(error: Error): void +} + +interface CdpResponse { + id: CdpCommandId + result?: unknown + error?: CdpErrorObject +} + +function positiveInteger(value: number | undefined, fallback: number): number { + return Number.isSafeInteger(value) && Number(value) > 0 ? Number(value) : fallback +} + +function errorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error) +} + +/** A small, backend-neutral CDP client used by recording and export features. */ +export class ProtocolTap implements SessionProtocolConnection { + readonly target: DevtoolsTarget + + private readonly connectTimeoutMs: number + private readonly commandTimeoutMs: number + private readonly closeTimeoutMs: number + private readonly maxPendingCommands: number + private readonly eventListeners = new Set<(event: CdpProtocolEvent) => void | Promise>() + private readonly methodListeners = new Map< + string, + Set<(params: Record, event: CdpProtocolEvent) => void | Promise> + >() + private readonly disconnectListeners = new Set<(error: Error) => void>() + private readonly errorListeners = new Set<(error: Error) => void>() + private readonly pending = new Map() + + private socket?: WebSocket + private connectPromise?: Promise + private closePromise?: Promise + private nextCommandId = 0 + private _state: SessionProtocolConnection['state'] = 'idle' + private terminalError?: Error + + constructor(target: DevtoolsTarget, options: ProtocolTapOptions = {}) { + this.target = { ...target } + this.connectTimeoutMs = positiveInteger(options.connectTimeoutMs, DEFAULT_CONNECT_TIMEOUT_MS) + this.commandTimeoutMs = positiveInteger(options.commandTimeoutMs, DEFAULT_COMMAND_TIMEOUT_MS) + this.closeTimeoutMs = positiveInteger(options.closeTimeoutMs, DEFAULT_CLOSE_TIMEOUT_MS) + this.maxPendingCommands = positiveInteger( + options.maxPendingCommands, + DEFAULT_MAX_PENDING_COMMANDS + ) + } + + get state(): SessionProtocolConnection['state'] { + return this._state + } + + get pendingCommandCount(): number { + return this.pending.size + } + + connect(): Promise { + if (this._state === 'open') return Promise.resolve(this) + if (this._state === 'connecting' && this.connectPromise) return this.connectPromise + if (this._state === 'closing' || this._state === 'closed') { + return Promise.reject( + new ProtocolTapError('SESSION_TAP_CLOSED', 'Cannot connect a closed ProtocolTap.') + ) + } + + this._state = 'connecting' + this.connectPromise = this.open() + return this.connectPromise + } + + private async open(): Promise { + let socket: WebSocket + try { + // In Legacy mode the application HTTP APIs are patched. The recorder's + // own CDP transport must not appear as business traffic or recursively + // observe the events it causes itself. + socket = withoutLegacyCapture(() => new WebSocket(this.target.webSocketDebuggerUrl)) + } catch (error) { + const wrapped = new ProtocolTapError( + 'SESSION_TAP_DISCONNECTED', + `Could not create CDP WebSocket ${this.target.webSocketDebuggerUrl}: ${errorMessage(error)}`, + error + ) + this.handleDisconnect(wrapped) + throw wrapped + } + this.socket = socket + socket.on('message', (data) => this.handleMessage(data)) + socket.on('error', (error) => { + this.handleDisconnect( + new ProtocolTapError( + 'SESSION_TAP_DISCONNECTED', + `CDP WebSocket error: ${error.message}`, + error + ) + ) + }) + socket.on('close', (code, reason) => { + this.handleDisconnect( + new ProtocolTapError( + 'SESSION_TAP_DISCONNECTED', + `CDP WebSocket closed (${code}): ${reason.toString() || 'no reason'}` + ) + ) + }) + + try { + await new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + reject( + new ProtocolTapError( + 'SESSION_TAP_CONNECT_TIMEOUT', + `Timed out after ${this.connectTimeoutMs}ms connecting to ${this.target.webSocketDebuggerUrl}.` + ) + ) + }, this.connectTimeoutMs) + const cleanup = () => { + clearTimeout(timer) + socket.off('open', onOpen) + socket.off('close', onClose) + socket.off('error', onError) + socket.off('unexpected-response', onUnexpectedResponse) + } + const onOpen = () => { + cleanup() + resolve() + } + const onClose = () => { + cleanup() + reject( + this.terminalError ?? + new ProtocolTapError( + 'SESSION_TAP_DISCONNECTED', + 'CDP WebSocket closed before opening.' + ) + ) + } + const onError = (error: Error) => { + cleanup() + reject(this.terminalError ?? error) + } + const onUnexpectedResponse = ( + _request: import('node:http').ClientRequest, + response: import('node:http').IncomingMessage + ) => { + cleanup() + reject( + new ProtocolTapError( + 'SESSION_TAP_DISCONNECTED', + `Unexpected HTTP ${response.statusCode ?? 0} while connecting to ${this.target.webSocketDebuggerUrl}.` + ) + ) + } + socket.once('open', onOpen) + socket.once('close', onClose) + socket.once('error', onError) + socket.once('unexpected-response', onUnexpectedResponse) + }) + + if (this._state === 'closed' || socket.readyState !== WebSocket.OPEN) { + throw ( + this.terminalError ?? + new ProtocolTapError('SESSION_TAP_DISCONNECTED', 'CDP WebSocket did not remain open.') + ) + } + this._state = 'open' + await this.command('Network.enable') + return this + } catch (error) { + if (this._state !== 'closed') { + const wrapped = + error instanceof Error + ? error + : new ProtocolTapError('SESSION_TAP_DISCONNECTED', errorMessage(error), error) + this.handleDisconnect(wrapped) + } + if (socket.readyState !== WebSocket.CLOSED) socket.terminate() + throw this.terminalError ?? error + } + } + + command>( + method: string, + params: Record = {}, + options: ProtocolTapCommandOptions = {} + ): Promise { + const socket = this.socket + if (this._state !== 'open' || !socket || socket.readyState !== WebSocket.OPEN) { + return Promise.reject( + this.terminalError ?? + new ProtocolTapError( + 'SESSION_TAP_CLOSED', + `Cannot send ${method}: CDP WebSocket is not open.` + ) + ) + } + if (this.pending.size >= this.maxPendingCommands) { + return Promise.reject( + new ProtocolTapError( + 'SESSION_TAP_PENDING_LIMIT', + `Cannot send ${method}: pending command limit ${this.maxPendingCommands} reached.` + ) + ) + } + + const id = this.allocateCommandId() + const timeoutMs = positiveInteger(options.timeoutMs, this.commandTimeoutMs) + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + this.pending.delete(id) + reject( + new ProtocolTapError( + 'SESSION_TAP_COMMAND_TIMEOUT', + `Timed out after ${timeoutMs}ms waiting for ${method} (${id}).` + ) + ) + }, timeoutMs) + this.pending.set(id, { + method, + timer, + resolve: (value) => resolve(value as T), + reject + }) + + socket.send(JSON.stringify({ id, method, params }), (error) => { + if (!error) return + const pending = this.pending.get(id) + if (!pending) return + this.pending.delete(id) + clearTimeout(pending.timer) + pending.reject(error) + }) + }) + } + + onEvent(listener: (event: CdpProtocolEvent) => void | Promise): () => void { + this.eventListeners.add(listener) + return () => this.eventListeners.delete(listener) + } + + on( + method: string, + listener: (params: Record, event: CdpProtocolEvent) => void | Promise + ): () => void { + const listeners = this.methodListeners.get(method) ?? new Set() + listeners.add(listener) + this.methodListeners.set(method, listeners) + return () => { + listeners.delete(listener) + if (listeners.size === 0) this.methodListeners.delete(method) + } + } + + onDisconnect(listener: (error: Error) => void): () => void { + this.disconnectListeners.add(listener) + return () => this.disconnectListeners.delete(listener) + } + + onError(listener: (error: Error) => void): () => void { + this.errorListeners.add(listener) + return () => this.errorListeners.delete(listener) + } + + close(): Promise { + if (this.closePromise) return this.closePromise + this.closePromise = this.closeSocket() + return this.closePromise + } + + private async closeSocket(): Promise { + if (this._state === 'closed') return + if (this._state === 'idle') { + this._state = 'closed' + return + } + + this._state = 'closing' + this.rejectPending( + new ProtocolTapError('SESSION_TAP_CLOSED', 'ProtocolTap closed before command completion.') + ) + const socket = this.socket + if (!socket || socket.readyState === WebSocket.CLOSED) { + this._state = 'closed' + return + } + + await new Promise((resolve) => { + let finished = false + const finish = () => { + if (finished) return + finished = true + clearTimeout(timer) + socket.off('close', finish) + resolve() + } + const timer = setTimeout(() => { + socket.terminate() + finish() + }, this.closeTimeoutMs) + socket.once('close', finish) + if (socket.readyState === WebSocket.CONNECTING) socket.terminate() + else socket.close() + }) + this._state = 'closed' + } + + private allocateCommandId(): number { + do { + this.nextCommandId += 1 + if (!Number.isSafeInteger(this.nextCommandId)) this.nextCommandId = 1 + } while (this.pending.has(this.nextCommandId)) + return this.nextCommandId + } + + private handleMessage(data: RawData): void { + let message: unknown + try { + message = JSON.parse(data.toString()) + } catch (error) { + const wrapped = new ProtocolTapError( + 'SESSION_TAP_PROTOCOL_ERROR', + `Received malformed CDP JSON: ${errorMessage(error)}`, + error + ) + this.emitError(wrapped) + this.handleDisconnect(wrapped) + return + } + if (!message || typeof message !== 'object' || Array.isArray(message)) return + const value = message as Record + + if (typeof value.id === 'number' || typeof value.id === 'string') { + this.handleResponse(value as unknown as CdpResponse) + return + } + if (typeof value.method !== 'string') return + const event: CdpProtocolEvent = { + method: value.method, + params: + value.params && typeof value.params === 'object' && !Array.isArray(value.params) + ? (value.params as Record) + : {} + } + this.emitEvent(event) + } + + private handleResponse(response: CdpResponse): void { + const pending = this.pending.get(response.id) + if (!pending) return + this.pending.delete(response.id) + clearTimeout(pending.timer) + if (response.error) { + pending.reject(new CdpCommandError(pending.method, response.id, response.error)) + } else { + pending.resolve(response.result) + } + } + + private emitEvent(event: CdpProtocolEvent): void { + for (const listener of [...this.eventListeners]) this.invokeListener(listener, event) + for (const listener of [...(this.methodListeners.get(event.method) ?? [])]) { + this.invokeListener(listener, event.params, event) + } + } + + private invokeListener(listener: (...args: any[]) => unknown, ...args: unknown[]): void { + try { + const result = listener(...args) + if (result && typeof (result as PromiseLike).then === 'function') { + void Promise.resolve(result).catch((error) => this.emitError(asError(error))) + } + } catch (error) { + this.emitError(asError(error)) + } + } + + private emitError(error: Error): void { + for (const listener of [...this.errorListeners]) { + try { + listener(error) + } catch { + // Error observers must not destabilize the protocol transport. + } + } + } + + private handleDisconnect(error: Error): void { + if (this._state === 'closed') return + const intentional = this._state === 'closing' + this.terminalError = intentional + ? new ProtocolTapError('SESSION_TAP_CLOSED', 'ProtocolTap closed.') + : error + this._state = 'closed' + this.rejectPending(this.terminalError) + if (!intentional && this.socket && this.socket.readyState !== WebSocket.CLOSED) { + this.socket.terminate() + } + if (!intentional) { + for (const listener of [...this.disconnectListeners]) { + try { + listener(error) + } catch (listenerError) { + this.emitError(asError(listenerError)) + } + } + } + } + + private rejectPending(error: Error): void { + for (const pending of this.pending.values()) { + clearTimeout(pending.timer) + pending.reject(error) + } + this.pending.clear() + } +} + +function asError(error: unknown): Error { + return error instanceof Error ? error : new Error(String(error)) +} diff --git a/packages/network-debugger/src/session/recorder.integration.test.ts b/packages/network-debugger/src/session/recorder.integration.test.ts new file mode 100644 index 0000000..46872fc --- /dev/null +++ b/packages/network-debugger/src/session/recorder.integration.test.ts @@ -0,0 +1,137 @@ +import { createServer } from 'node:http' +import type { AddressInfo } from 'node:net' +import { mkdtemp, readFile, rm } from 'node:fs/promises' +import { join } from 'node:path' +import { tmpdir } from 'node:os' +import { WebSocketServer, type WebSocket } from 'ws' +import { afterEach, describe, expect, test } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' +import { readSessionManifest } from './files' +import { SessionRecorder } from './recorder' + +const cleanups: Array<() => Promise> = [] + +afterEach(async () => { + for (const cleanup of cleanups.splice(0).reverse()) await cleanup() +}) + +describe('SessionRecorder loopback integration', () => { + test('records events and retrieves a body over a real standard target WebSocket', async () => { + const clients = new Set() + let target!: DevtoolsTarget + let resolveBodyRequested!: () => void + const bodyRequested = new Promise((resolve) => (resolveBodyRequested = resolve)) + const webSocketServer = new WebSocketServer({ noServer: true }) + const server = createServer((request, response) => { + if (request.url !== '/json/list') { + response.writeHead(404).end() + return + } + response.writeHead(200, { 'content-type': 'application/json' }) + response.end(JSON.stringify([target])) + }) + server.on('upgrade', (request, socket, head) => { + if (request.url !== '/devtools/page/session-recorder') { + socket.destroy() + return + } + webSocketServer.handleUpgrade(request, socket, head, (client) => { + webSocketServer.emit('connection', client, request) + }) + }) + webSocketServer.on('connection', (client) => { + clients.add(client) + client.once('close', () => clients.delete(client)) + client.on('message', (raw) => { + const command = JSON.parse(raw.toString()) as { + id: number + method: string + params: Record + } + if (command.method === 'Network.enable') { + client.send(JSON.stringify({ id: command.id, result: {} })) + } else if (command.method === 'Network.getResponseBody') { + expect(command.params).toEqual({ requestId: 'integration' }) + resolveBodyRequested() + client.send( + JSON.stringify({ + id: command.id, + result: { body: 'loopback body', base64Encoded: false } + }) + ) + } + }) + }) + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => resolve()) + }) + const port = (server.address() as AddressInfo).port + target = { + id: 'session-recorder', + title: 'Session recorder', + type: 'node', + url: '', + webSocketDebuggerUrl: `ws://127.0.0.1:${port}/devtools/page/session-recorder`, + discoveryUrl: `http://127.0.0.1:${port}/json/list` + } + const directory = await mkdtemp(join(tmpdir(), 'nnd-session-integration-')) + cleanups.push(async () => rm(directory, { recursive: true })) + cleanups.push(async () => { + for (const client of clients) client.terminate() + await new Promise((resolve) => webSocketServer.close(() => resolve())) + await new Promise((resolve) => server.close(() => resolve())) + }) + + const recorder = await SessionRecorder.start({ directory, target }) + const client = [...clients][0] + client.send( + JSON.stringify({ + method: 'Network.requestWillBeSent', + params: { + requestId: 'integration', + timestamp: 1, + wallTime: 1_800_000_000, + request: { + url: `http://127.0.0.1:${port}/resource`, + method: 'GET', + headers: {} + } + } + }) + ) + client.send( + JSON.stringify({ + method: 'Network.responseReceived', + params: { + requestId: 'integration', + timestamp: 1.1, + response: { + url: `http://127.0.0.1:${port}/resource`, + status: 200, + statusText: 'OK', + headers: { 'content-type': 'text/plain' }, + mimeType: 'text/plain' + } + } + }) + ) + client.send( + JSON.stringify({ + method: 'Network.loadingFinished', + params: { requestId: 'integration', timestamp: 1.2, encodedDataLength: 13 } + }) + ) + + await bodyRequested + await recorder.close() + + const manifest = await readSessionManifest(directory) + expect(manifest.state).toBe('completed') + expect(manifest.stats).toMatchObject({ eventCount: 3, requestCount: 1, bodyCount: 1 }) + expect(await readFile(join(directory, manifest.bodyIndex.integration.path), 'utf8')).toBe( + 'loopback body' + ) + expect(clients.size).toBe(0) + }) +}) diff --git a/packages/network-debugger/src/session/recorder.test.ts b/packages/network-debugger/src/session/recorder.test.ts new file mode 100644 index 0000000..f5b4ff5 --- /dev/null +++ b/packages/network-debugger/src/session/recorder.test.ts @@ -0,0 +1,281 @@ +import { mkdtemp, readFile, readdir, rm } from 'node:fs/promises' +import { basename, join } from 'node:path' +import { tmpdir } from 'node:os' +import { afterEach, describe, expect, test, vi } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' +import { readSessionManifest } from './files' +import { SessionRecorder } from './recorder' +import type { CdpProtocolEvent, ResponseBodyResult, SessionProtocolConnection } from './types' + +const TARGET: DevtoolsTarget = { + id: 'session-test', + title: 'Session test', + type: 'node', + url: 'file:///fixture.js', + webSocketDebuggerUrl: 'ws://127.0.0.1:43123/devtools/page/session-test', + discoveryUrl: 'http://127.0.0.1:43123/json/list' +} + +class FakeTap implements SessionProtocolConnection { + readonly target = TARGET + state: SessionProtocolConnection['state'] = 'idle' + readonly commands: Array<{ method: string; params: Record }> = [] + readonly bodies = new Map() + readonly closeMock = vi.fn(async () => { + this.state = 'closed' + }) + private readonly eventListeners = new Set<(event: CdpProtocolEvent) => void | Promise>() + private readonly disconnectListeners = new Set<(error: Error) => void>() + + async connect() { + this.state = 'open' + } + + async command(method: string, params: Record = {}): Promise { + this.commands.push({ method, params: { ...params } }) + const requestId = String(params.requestId ?? '') + const value = this.bodies.get(requestId) + if (value instanceof Error) throw value + if (!value) throw new Error(`No body for ${requestId}`) + return value as T + } + + onEvent(listener: (event: CdpProtocolEvent) => void | Promise) { + this.eventListeners.add(listener) + return () => this.eventListeners.delete(listener) + } + + onDisconnect(listener: (error: Error) => void) { + this.disconnectListeners.add(listener) + return () => this.disconnectListeners.delete(listener) + } + + close() { + return this.closeMock() + } + + async emit(method: string, params: Record) { + const event = { method, params } + await Promise.all([...this.eventListeners].map((listener) => listener(event))) + } + + disconnect(error: Error) { + this.state = 'closed' + for (const listener of this.disconnectListeners) listener(error) + } +} + +const directories: string[] = [] + +async function sessionDirectory(): Promise { + const directory = await mkdtemp(join(tmpdir(), 'nnd-session-')) + directories.push(directory) + return directory +} + +afterEach(async () => { + await Promise.all(directories.splice(0).map((directory) => rm(directory, { recursive: true }))) +}) + +async function requestStarted( + tap: FakeTap, + requestId: string, + overrides: Record = {} +) { + await tap.emit('Network.requestWillBeSent', { + requestId, + timestamp: 10, + wallTime: 1_800_000_000, + type: 'Fetch', + request: { + url: `https://example.test/resource?id=${requestId}`, + method: 'POST', + headers: { 'content-type': 'text/plain' }, + postData: 'request body' + }, + ...overrides + }) +} + +async function responseReceived(tap: FakeTap, requestId: string, mimeType: string) { + await tap.emit('Network.responseReceived', { + requestId, + timestamp: 10.25, + type: 'Fetch', + response: { + url: `https://example.test/resource?id=${requestId}`, + status: 200, + statusText: 'OK', + protocol: 'h2', + headers: { 'content-type': mimeType }, + mimeType, + encodedDataLength: 3 + } + }) +} + +describe('SessionRecorder', () => { + test('writes text bodies, an append-only journal, and trace indexes', async () => { + const directory = await sessionDirectory() + const tap = new FakeTap() + tap.bodies.set('../unsafe/request', { body: 'hello session', base64Encoded: false }) + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + const headers = { + 'content-type': 'text/plain', + traceparent: '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01', + tracestate: 'vendor=value' + } + const before = JSON.stringify(headers) + + await requestStarted(tap, '../unsafe/request', { + request: { + url: 'https://example.test/text?one=1&one=2', + method: 'POST', + headers, + postData: 'request body' + } + }) + await responseReceived(tap, '../unsafe/request', 'text/plain') + await tap.emit('Network.loadingFinished', { + requestId: '../unsafe/request', + timestamp: 10.5, + encodedDataLength: 13 + }) + await recorder.close() + + expect(JSON.stringify(headers)).toBe(before) + const manifest = await readSessionManifest(directory) + expect(manifest).toMatchObject({ + schemaVersion: 1, + state: 'completed', + stats: { + eventCount: 3, + requestCount: 1, + bodyCount: 1, + bodyErrorCount: 0, + failedRequestCount: 0 + } + }) + expect(manifest.traceIndex['4bf92f3577b34da6a3ce929d0e0e4736']).toMatchObject({ + requestIds: ['../unsafe/request'], + spans: [{ requestId: '../unsafe/request', sampled: true }] + }) + const indexedBody = manifest.bodyIndex['../unsafe/request'] + expect(basename(indexedBody.path)).toMatch(/^[a-f0-9]{16}-[a-f0-9]{64}\.body$/) + expect(indexedBody.path).not.toContain('unsafe') + expect(await readFile(join(directory, indexedBody.path), 'utf8')).toBe('hello session') + expect( + (await readFile(join(directory, 'events.ndjson'), 'utf8')).trim().split('\n') + ).toHaveLength(3) + expect(tap.commands).toEqual([ + { method: 'Network.getResponseBody', params: { requestId: '../unsafe/request' } } + ]) + expect(tap.commands.some(({ method }) => method === 'Network.setExtraHTTPHeaders')).toBe(false) + }) + + test('decodes base64 response bodies to original binary files', async () => { + const directory = await sessionDirectory() + const tap = new FakeTap() + const binary = Buffer.from([0, 255, 16, 128]) + tap.bodies.set('binary', { body: binary.toString('base64'), base64Encoded: true }) + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + + await requestStarted(tap, 'binary') + await responseReceived(tap, 'binary', 'application/octet-stream') + await tap.emit('Network.loadingFinished', { + requestId: 'binary', + timestamp: 11, + encodedDataLength: binary.length + }) + await recorder.close() + + const manifest = await readSessionManifest(directory) + const indexed = manifest.bodyIndex.binary + expect(indexed).toMatchObject({ base64Encoded: true, byteLength: 4 }) + expect(await readFile(join(directory, indexed.path))).toEqual(binary) + }) + + test('records failures without requesting or inventing a response body', async () => { + const directory = await sessionDirectory() + const tap = new FakeTap() + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + + await requestStarted(tap, 'failed') + await tap.emit('Network.loadingFailed', { + requestId: 'failed', + timestamp: 10.1, + errorText: 'net::ERR_CONNECTION_REFUSED', + canceled: false + }) + await recorder.close() + + const manifest = await readSessionManifest(directory) + expect(manifest.stats).toMatchObject({ failedRequestCount: 1, bodyCount: 0 }) + expect(manifest.requestIndex.failed.failure).toEqual({ + errorText: 'net::ERR_CONNECTION_REFUSED', + canceled: false + }) + expect(tap.commands).toEqual([]) + }) + + test('keeps recording when getResponseBody is unavailable and indexes the issue', async () => { + const directory = await sessionDirectory() + const tap = new FakeTap() + tap.bodies.set('missing', new Error('No resource with given identifier found')) + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + + await requestStarted(tap, 'missing') + await responseReceived(tap, 'missing', 'text/plain') + await tap.emit('Network.loadingFinished', { + requestId: 'missing', + timestamp: 10.5, + encodedDataLength: 0 + }) + await recorder.close() + + const manifest = await readSessionManifest(directory) + expect(manifest.state).toBe('completed') + expect(manifest.stats).toMatchObject({ bodyCount: 0, bodyErrorCount: 1 }) + expect(manifest.issues).toContainEqual( + expect.objectContaining({ + operation: 'Network.getResponseBody', + requestId: 'missing', + message: 'No resource with given identifier found' + }) + ) + }) + + test('marks unexpected disconnects failed and closes idempotently without owning the tap', async () => { + const directory = await sessionDirectory() + const tap = new FakeTap() + const recorder = await SessionRecorder.start({ directory, target: TARGET, tap }) + tap.disconnect(new Error('backend exited')) + + const firstClose = recorder.close() + expect(recorder.close()).toBe(firstClose) + await firstClose + await tap.emit('Network.requestWillBeSent', { requestId: 'too-late' }) + + const manifest = await readSessionManifest(directory) + expect(manifest.state).toBe('failed') + expect(manifest.stats.eventCount).toBe(0) + expect(manifest.issues).toContainEqual( + expect.objectContaining({ operation: 'protocol-disconnect', message: 'backend exited' }) + ) + expect(tap.closeMock).not.toHaveBeenCalled() + expect((await readdir(directory)).some((name) => name.endsWith('.tmp'))).toBe(false) + }) + + test('refuses to overwrite an existing session directory', async () => { + const directory = await sessionDirectory() + const first = await SessionRecorder.start({ directory, target: TARGET, tap: new FakeTap() }) + await first.close() + const before = await readSessionManifest(directory) + + await expect( + SessionRecorder.start({ directory, target: TARGET, tap: new FakeTap() }) + ).rejects.toThrow(`Session artifacts already exist in: ${directory}`) + + expect((await readSessionManifest(directory)).sessionId).toBe(before.sessionId) + }) +}) diff --git a/packages/network-debugger/src/session/recorder.ts b/packages/network-debugger/src/session/recorder.ts new file mode 100644 index 0000000..fa5db03 --- /dev/null +++ b/packages/network-debugger/src/session/recorder.ts @@ -0,0 +1,379 @@ +import { randomUUID } from 'node:crypto' +import { promises as fs } from 'node:fs' +import type { FileHandle } from 'node:fs/promises' +import { resolve } from 'node:path' +import { ProtocolTap } from './protocol-tap' +import { atomicWriteJson, bodyFileName, jsonStringify, resolveInside, sha256 } from './files' +import { traceContextFromHeaders } from './trace' +import { + SESSION_SCHEMA_VERSION, + type CdpProtocolEvent, + type ResponseBodyResult, + type SessionBodyIndexEntry, + type SessionManifest, + type SessionProtocolConnection, + type SessionRecorderIssue, + type SessionRecorderOptions, + type SessionRequestIndexEntry, + type SessionTraceIndexEntry +} from './types' + +const DEFAULT_BODY_COMMAND_TIMEOUT_MS = 10_000 + +function asRecord(value: unknown): Record | undefined { + return value && typeof value === 'object' && !Array.isArray(value) + ? (value as Record) + : undefined +} + +function cloneRecord(value: unknown): Record | undefined { + const record = asRecord(value) + return record ? (JSON.parse(jsonStringify(record)) as Record) : undefined +} + +function requestIdFrom(params: Record): string | undefined { + const requestId = params.requestId + if (typeof requestId === 'string') return requestId + if (typeof requestId === 'number' && Number.isFinite(requestId)) return String(requestId) + return undefined +} + +function finiteNumber(value: unknown): number | undefined { + return typeof value === 'number' && Number.isFinite(value) ? value : undefined +} + +function messageFor(error: unknown): string { + return error instanceof Error ? error.message : String(error) +} + +async function pathExists(path: string): Promise { + try { + await fs.access(path) + return true + } catch { + return false + } +} + +/** Records standard CDP Network events into a portable, append-only session. */ +export class SessionRecorder { + readonly directory: string + readonly target: SessionManifest['target'] + readonly tap: SessionProtocolConnection + + private readonly ownsTap: boolean + private readonly bodyCommandTimeoutMs: number + private readonly manifestPath: string + private readonly eventsPath: string + private readonly bodiesPath: string + private readonly requestIndex = new Map() + private readonly bodyIndex = new Map() + private readonly traceIndex = new Map() + private readonly issues: SessionRecorderIssue[] = [] + private readonly bodyErrors = new Set() + private readonly terminalRequests = new Set() + private readonly baseManifest: Omit< + SessionManifest, + 'stats' | 'requestIndex' | 'bodyIndex' | 'traceIndex' | 'issues' + > + + private eventFile?: FileHandle + private unsubscribeEvent?: () => void + private unsubscribeDisconnect?: () => void + private operationQueue: Promise = Promise.resolve() + private closePromise?: Promise + private fatalError?: Error + private acceptingEvents = true + private sequence = 0 + + private constructor(options: SessionRecorderOptions) { + this.directory = resolve(options.directory) + this.target = { ...options.target } + this.tap = options.tap ?? new ProtocolTap(this.target) + this.ownsTap = options.tap === undefined + this.bodyCommandTimeoutMs = + Number.isSafeInteger(options.bodyCommandTimeoutMs) && Number(options.bodyCommandTimeoutMs) > 0 + ? Number(options.bodyCommandTimeoutMs) + : DEFAULT_BODY_COMMAND_TIMEOUT_MS + this.manifestPath = resolve(this.directory, 'manifest.json') + this.eventsPath = resolve(this.directory, 'events.ndjson') + this.bodiesPath = resolve(this.directory, 'bodies') + this.baseManifest = { + schemaVersion: SESSION_SCHEMA_VERSION, + sessionId: randomUUID(), + state: 'recording', + createdAt: new Date().toISOString(), + target: this.target, + files: { events: 'events.ndjson', bodies: 'bodies' } + } + } + + static async start(options: SessionRecorderOptions): Promise { + if ( + options.tap && + options.tap.target.webSocketDebuggerUrl !== options.target.webSocketDebuggerUrl + ) { + throw new Error('Session recorder target does not match the supplied ProtocolTap target.') + } + const recorder = new SessionRecorder(options) + await recorder.initialize() + return recorder + } + + getManifest(): SessionManifest { + return JSON.parse(jsonStringify(this.buildManifest())) as SessionManifest + } + + close(): Promise { + if (!this.closePromise) this.closePromise = this.finish() + return this.closePromise + } + + private async initialize(): Promise { + let artifactsStarted = false + try { + await fs.mkdir(this.directory, { recursive: true }) + if ((await pathExists(this.manifestPath)) || (await pathExists(this.eventsPath))) { + throw new Error(`Session artifacts already exist in: ${this.directory}`) + } + await fs.mkdir(this.bodiesPath, { recursive: true }) + this.eventFile = await fs.open(this.eventsPath, 'wx') + artifactsStarted = true + await this.persistManifest() + + this.unsubscribeEvent = this.tap.onEvent((event) => { + if (!this.acceptingEvents) return + return this.enqueue(() => this.recordEvent(event)) + }) + this.unsubscribeDisconnect = this.tap.onDisconnect((error) => { + if (!this.acceptingEvents) return + void this.enqueue(async () => { + this.baseManifest.state = 'failed' + this.addIssue('protocol-disconnect', error) + await this.persistManifest() + }) + }) + await this.tap.connect() + } catch (error) { + this.acceptingEvents = false + this.unsubscribeEvent?.() + this.unsubscribeDisconnect?.() + await this.operationQueue + if (artifactsStarted) { + this.baseManifest.state = 'failed' + this.baseManifest.completedAt = new Date().toISOString() + this.addIssue('session-start', error) + await this.eventFile?.close().catch(() => undefined) + this.eventFile = undefined + await this.persistManifest().catch(() => undefined) + } + if (this.ownsTap) await this.tap.close().catch(() => undefined) + throw error + } + } + + private enqueue(operation: () => Promise): Promise { + const scheduled = this.operationQueue.then(operation) + this.operationQueue = scheduled.catch((error) => { + const normalized = error instanceof Error ? error : new Error(String(error)) + if (!this.fatalError) { + this.fatalError = normalized + this.baseManifest.state = 'failed' + this.addIssue('session-write', normalized) + } + }) + return scheduled + } + + private async recordEvent(event: CdpProtocolEvent): Promise { + const params = cloneRecord(event.params) ?? {} + const sequence = ++this.sequence + const record = { + schemaVersion: SESSION_SCHEMA_VERSION, + sequence, + recordedAt: new Date().toISOString(), + method: event.method, + params + } + if (!this.eventFile) throw new Error('Session event journal is not open.') + await this.eventFile.appendFile(`${jsonStringify(record)}\n`, 'utf8') + await this.applyNetworkEvent(event.method, params, sequence) + await this.persistManifest() + } + + private async applyNetworkEvent( + method: string, + params: Record, + sequence: number + ): Promise { + if (!method.startsWith('Network.')) return + const requestId = requestIdFrom(params) + if (!requestId) return + const request = this.ensureRequest(requestId, sequence) + + if (method === 'Network.requestWillBeSent') { + request.requestTimestamp = finiteNumber(params.timestamp) + request.wallTime = finiteNumber(params.wallTime) + request.resourceType = typeof params.type === 'string' ? params.type : request.resourceType + request.request = cloneRecord(params.request) + const trace = traceContextFromHeaders(asRecord(params.request)?.headers) + if (trace) { + request.trace = trace + this.indexTrace(requestId, trace) + } + return + } + + if (method === 'Network.responseReceived') { + request.responseTimestamp = finiteNumber(params.timestamp) + request.resourceType = typeof params.type === 'string' ? params.type : request.resourceType + request.response = cloneRecord(params.response) + return + } + + if (method === 'Network.loadingFailed') { + if (this.terminalRequests.has(requestId)) return + this.terminalRequests.add(requestId) + request.finishedTimestamp = finiteNumber(params.timestamp) + request.failure = { + errorText: + typeof params.errorText === 'string' ? params.errorText : 'Network request failed', + ...(typeof params.canceled === 'boolean' ? { canceled: params.canceled } : {}), + ...(typeof params.blockedReason === 'string' ? { blockedReason: params.blockedReason } : {}) + } + return + } + + if (method !== 'Network.loadingFinished' || this.terminalRequests.has(requestId)) return + this.terminalRequests.add(requestId) + request.finishedTimestamp = finiteNumber(params.timestamp) + request.encodedDataLength = finiteNumber(params.encodedDataLength) + await this.captureBody(requestId, request) + } + + private ensureRequest(requestId: string, sequence: number): SessionRequestIndexEntry { + const existing = this.requestIndex.get(requestId) + if (existing) return existing + const created: SessionRequestIndexEntry = { requestId, firstSequence: sequence } + this.requestIndex.set(requestId, created) + return created + } + + private indexTrace(requestId: string, trace: NonNullable) { + const existing = this.traceIndex.get(trace.traceId) ?? { + traceId: trace.traceId, + requestIds: [], + spans: [] + } + if (!existing.requestIds.includes(requestId)) existing.requestIds.push(requestId) + if (!existing.spans.some((span) => span.requestId === requestId)) { + existing.spans.push({ + requestId, + parentId: trace.parentId, + traceFlags: trace.traceFlags, + sampled: trace.sampled, + traceparent: trace.traceparent, + ...(trace.tracestate ? { tracestate: trace.tracestate } : {}) + }) + } + this.traceIndex.set(trace.traceId, existing) + } + + private async captureBody(requestId: string, request: SessionRequestIndexEntry): Promise { + try { + const result = await this.tap.command( + 'Network.getResponseBody', + { requestId }, + { timeoutMs: this.bodyCommandTimeoutMs } + ) + if (!result || typeof result.body !== 'string' || typeof result.base64Encoded !== 'boolean') { + throw new Error('Network.getResponseBody returned an invalid result.') + } + const body = result.base64Encoded + ? Buffer.from(result.body, 'base64') + : Buffer.from(result.body, 'utf8') + const fileName = bodyFileName(requestId, body) + const relativePath = `bodies/${fileName}` + const absolutePath = resolveInside(this.directory, relativePath) + try { + await fs.writeFile(absolutePath, body, { flag: 'wx' }) + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error + const existing = await fs.readFile(absolutePath) + if (sha256(existing) !== sha256(body)) { + throw new Error(`Existing session body does not match its content hash: ${relativePath}`) + } + } + const response = request.response + this.bodyIndex.set(requestId, { + requestId, + path: relativePath, + sha256: sha256(body), + byteLength: body.length, + base64Encoded: result.base64Encoded, + ...(typeof response?.mimeType === 'string' ? { mimeType: response.mimeType } : {}) + }) + } catch (error) { + this.bodyErrors.add(requestId) + this.addIssue('Network.getResponseBody', error, requestId) + } + } + + private addIssue(operation: string, error: unknown, requestId?: string): void { + this.issues.push({ + timestamp: new Date().toISOString(), + operation, + message: messageFor(error), + ...(requestId ? { requestId } : {}) + }) + } + + private buildManifest(): SessionManifest { + return { + ...this.baseManifest, + stats: { + eventCount: this.sequence, + requestCount: this.requestIndex.size, + bodyCount: this.bodyIndex.size, + bodyErrorCount: this.bodyErrors.size, + failedRequestCount: [...this.requestIndex.values()].filter((request) => request.failure) + .length + }, + requestIndex: Object.fromEntries(this.requestIndex), + bodyIndex: Object.fromEntries(this.bodyIndex), + traceIndex: Object.fromEntries(this.traceIndex), + issues: [...this.issues] + } + } + + private persistManifest(): Promise { + return atomicWriteJson(this.manifestPath, this.buildManifest()) + } + + private async finish(): Promise { + this.acceptingEvents = false + this.unsubscribeEvent?.() + this.unsubscribeDisconnect?.() + await this.operationQueue + + if (this.baseManifest.state === 'recording') this.baseManifest.state = 'completed' + this.baseManifest.completedAt = new Date().toISOString() + await this.eventFile?.close() + this.eventFile = undefined + + let finishError = this.fatalError + try { + await this.persistManifest() + } catch (error) { + finishError = finishError ?? (error instanceof Error ? error : new Error(String(error))) + } + if (this.ownsTap) { + try { + await this.tap.close() + } catch (error) { + finishError = finishError ?? (error instanceof Error ? error : new Error(String(error))) + } + } + if (finishError) throw finishError + } +} diff --git a/packages/network-debugger/src/session/trace.test.ts b/packages/network-debugger/src/session/trace.test.ts new file mode 100644 index 0000000..5f5d88f --- /dev/null +++ b/packages/network-debugger/src/session/trace.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, test } from 'vitest' +import { parseTraceparent, traceContextFromHeaders } from './trace' + +describe('traceparent correlation', () => { + test('parses an existing sampled trace context without changing its source headers', () => { + const headers = { + TraceParent: '00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01', + TraceState: 'vendor=value' + } + const before = JSON.stringify(headers) + + expect(traceContextFromHeaders(headers)).toEqual({ + traceparent: '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01', + version: '00', + traceId: '4bf92f3577b34da6a3ce929d0e0e4736', + parentId: '00f067aa0ba902b7', + traceFlags: '01', + sampled: true, + tracestate: 'vendor=value' + }) + expect(JSON.stringify(headers)).toBe(before) + }) + + test.each([ + '', + 'ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01', + '00-00000000000000000000000000000000-00f067aa0ba902b7-01', + '00-4bf92f3577b34da6a3ce929d0e0e4736-0000000000000000-01', + '00-short-00f067aa0ba902b7-01', + '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-extra' + ])('rejects invalid traceparent %j', (value) => { + expect(parseTraceparent(value)).toBeUndefined() + }) + + test('reads array header values and reports unsampled flags', () => { + expect( + traceContextFromHeaders({ + traceparent: ['00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00'] + }) + ).toMatchObject({ traceFlags: '00', sampled: false }) + }) +}) diff --git a/packages/network-debugger/src/session/trace.ts b/packages/network-debugger/src/session/trace.ts new file mode 100644 index 0000000..a013288 --- /dev/null +++ b/packages/network-debugger/src/session/trace.ts @@ -0,0 +1,41 @@ +import type { TraceContext } from './types' + +function headerValue(headers: unknown, wantedName: string): string | undefined { + if (!headers || typeof headers !== 'object' || Array.isArray(headers)) return undefined + const wanted = wantedName.toLowerCase() + for (const [name, value] of Object.entries(headers as Record)) { + if (name.toLowerCase() !== wanted) continue + if (Array.isArray(value)) return value.map(String).join(', ') + if (value === undefined || value === null) return undefined + return String(value) + } + return undefined +} + +/** Parse an existing W3C traceparent without modifying request headers. */ +export function parseTraceparent(value: string, tracestate?: string): TraceContext | undefined { + const normalized = value.trim().toLowerCase() + const match = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/.exec(normalized) + if (!match) return undefined + + const [, version, traceId, parentId, traceFlags] = match + if (version === 'ff' || /^0+$/.test(traceId) || /^0+$/.test(parentId)) return undefined + + return { + traceparent: normalized, + version, + traceId, + parentId, + traceFlags, + sampled: (Number.parseInt(traceFlags, 16) & 1) === 1, + ...(tracestate?.trim() ? { tracestate: tracestate.trim() } : {}) + } +} + +export function traceContextFromHeaders(headers: unknown): TraceContext | undefined { + const traceparent = headerValue(headers, 'traceparent') + if (!traceparent) return undefined + return parseTraceparent(traceparent, headerValue(headers, 'tracestate')) +} + +export { headerValue as sessionHeaderValue } diff --git a/packages/network-debugger/src/session/types.ts b/packages/network-debugger/src/session/types.ts new file mode 100644 index 0000000..b27eb56 --- /dev/null +++ b/packages/network-debugger/src/session/types.ts @@ -0,0 +1,226 @@ +import type { DevtoolsTarget } from '../adapters/types' + +export const SESSION_SCHEMA_VERSION = 1 as const + +export type CdpCommandId = number | string + +export interface CdpProtocolEvent> { + method: string + params: T +} + +export interface CdpErrorObject { + code: number + message: string + data?: unknown +} + +export interface ProtocolTapCommandOptions { + timeoutMs?: number +} + +export interface ProtocolTapOptions { + connectTimeoutMs?: number + commandTimeoutMs?: number + closeTimeoutMs?: number + maxPendingCommands?: number +} + +export interface TraceContext { + traceparent: string + version: string + traceId: string + parentId: string + traceFlags: string + sampled: boolean + tracestate?: string +} + +export interface SessionFailure { + errorText: string + canceled?: boolean + blockedReason?: string +} + +export interface SessionRequestIndexEntry { + requestId: string + firstSequence: number + requestTimestamp?: number + wallTime?: number + responseTimestamp?: number + finishedTimestamp?: number + encodedDataLength?: number + resourceType?: string + request?: Record + response?: Record + failure?: SessionFailure + trace?: TraceContext +} + +export interface SessionBodyIndexEntry { + requestId: string + path: string + sha256: string + byteLength: number + base64Encoded: boolean + mimeType?: string +} + +export interface SessionTraceSpan { + requestId: string + parentId: string + traceFlags: string + sampled: boolean + traceparent: string + tracestate?: string +} + +export interface SessionTraceIndexEntry { + traceId: string + requestIds: string[] + spans: SessionTraceSpan[] +} + +export interface SessionRecorderIssue { + timestamp: string + operation: string + message: string + requestId?: string +} + +export interface SessionManifest { + schemaVersion: typeof SESSION_SCHEMA_VERSION + sessionId: string + state: 'recording' | 'completed' | 'failed' + createdAt: string + completedAt?: string + target: DevtoolsTarget + files: { + events: 'events.ndjson' + bodies: 'bodies' + } + stats: { + eventCount: number + requestCount: number + bodyCount: number + bodyErrorCount: number + failedRequestCount: number + } + requestIndex: Record + bodyIndex: Record + traceIndex: Record + issues: SessionRecorderIssue[] +} + +export interface SessionEventRecord> { + schemaVersion: typeof SESSION_SCHEMA_VERSION + sequence: number + recordedAt: string + method: string + params: T +} + +export interface ResponseBodyResult { + body: string + base64Encoded: boolean +} + +export interface SessionProtocolConnection { + readonly target: DevtoolsTarget + readonly state: 'idle' | 'connecting' | 'open' | 'closing' | 'closed' + connect(): Promise + command>( + method: string, + params?: Record, + options?: ProtocolTapCommandOptions + ): Promise + onEvent(listener: (event: CdpProtocolEvent) => void | Promise): () => void + onDisconnect(listener: (error: Error) => void): () => void + close(): Promise +} + +export interface SessionRecorderOptions { + directory: string + target: DevtoolsTarget + tap?: SessionProtocolConnection + bodyCommandTimeoutMs?: number +} + +export interface HarHeader { + name: string + value: string +} + +export interface HarQueryParameter { + name: string + value: string +} + +export interface HarPostData { + mimeType: string + text: string +} + +export interface HarContent { + size: number + mimeType: string + text?: string + encoding?: 'base64' +} + +export interface HarEntry { + startedDateTime: string + time: number + request: { + method: string + url: string + httpVersion: string + cookies: unknown[] + headers: HarHeader[] + queryString: HarQueryParameter[] + postData?: HarPostData + headersSize: number + bodySize: number + } + response: { + status: number + statusText: string + httpVersion: string + cookies: unknown[] + headers: HarHeader[] + content: HarContent + redirectURL: string + headersSize: number + bodySize: number + } + cache: Record + timings: { + blocked: number + dns: number + connect: number + send: number + wait: number + receive: number + ssl: number + } + _requestId: string + _failure?: SessionFailure + _trace?: TraceContext +} + +export interface HarDocument { + log: { + version: '1.2' + creator: { + name: 'node-network-devtools' + version: string + } + pages: unknown[] + entries: HarEntry[] + } +} + +export interface HarExportResult { + outputPath: string + har: HarDocument +} diff --git a/packages/network-debugger/src/target/frontend-launcher.test.ts b/packages/network-debugger/src/target/frontend-launcher.test.ts new file mode 100644 index 0000000..4bf8efb --- /dev/null +++ b/packages/network-debugger/src/target/frontend-launcher.test.ts @@ -0,0 +1,56 @@ +import { beforeEach, describe, expect, test, vi } from 'vitest' +import type { DevtoolsTarget } from '../adapters/types' + +const open = vi.hoisted(() => vi.fn()) +vi.mock('open', () => ({ default: open })) + +import { openDevtoolsTarget } from './frontend-launcher' + +const target = (overrides: Partial = {}): DevtoolsTarget => ({ + id: 'target', + title: 'Node.js', + type: 'node', + url: 'file:///app.mjs', + webSocketDebuggerUrl: 'ws://127.0.0.1:9229/target', + discoveryUrl: 'http://127.0.0.1:9229/json/list', + devtoolsFrontendUrl: 'devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/target', + ...overrides +}) + +describe('openDevtoolsTarget', () => { + beforeEach(() => { + vi.clearAllMocks() + open.mockResolvedValue({}) + }) + + test('opens the canonical target URL without retaining or waiting for a browser', async () => { + await openDevtoolsTarget(target()) + + expect(open).toHaveBeenCalledWith( + 'devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/target', + { wait: false } + ) + }) + + test('uses the compatibility URL when it is the only frontend descriptor', async () => { + const descriptor = target({ + devtoolsFrontendUrl: undefined, + devtoolsFrontendUrlCompat: 'devtools://compat' + }) + + await openDevtoolsTarget(descriptor) + expect(open).toHaveBeenCalledWith('devtools://compat', { wait: false }) + }) + + test('fails with a stable code when discovery exposes no frontend URL', async () => { + await expect( + openDevtoolsTarget( + target({ + devtoolsFrontendUrl: undefined, + devtoolsFrontendUrlCompat: undefined + }) + ) + ).rejects.toMatchObject({ code: 'NND_FRONTEND_URL_UNAVAILABLE' }) + expect(open).not.toHaveBeenCalled() + }) +}) diff --git a/packages/network-debugger/src/target/frontend-launcher.ts b/packages/network-debugger/src/target/frontend-launcher.ts new file mode 100644 index 0000000..746b965 --- /dev/null +++ b/packages/network-debugger/src/target/frontend-launcher.ts @@ -0,0 +1,16 @@ +import open from 'open' +import type { DevtoolsTarget } from '../adapters/types' + +export async function openDevtoolsTarget(target: DevtoolsTarget): Promise { + const frontendUrl = target.devtoolsFrontendUrl ?? target.devtoolsFrontendUrlCompat + if (!frontendUrl) { + throw Object.assign(new Error('The selected target does not expose a DevTools frontend URL.'), { + code: 'NND_FRONTEND_URL_UNAVAILABLE' + }) + } + + // The browser is deliberately not retained: the target and frontend have + // independent lifecycles, and disposing a registration must never kill a + // user browser process. + await open(frontendUrl, { wait: false }) +} diff --git a/packages/network-debugger/src/utils/file.test.ts b/packages/network-debugger/src/utils/file.test.ts deleted file mode 100644 index 630607a..0000000 --- a/packages/network-debugger/src/utils/file.test.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' -import fs from 'fs' -import { unlinkSafe } from './file' - -// Mock fs 模块 -vi.mock('fs') - -describe('file.ts', () => { - beforeEach(() => { - vi.clearAllMocks() - }) - - afterEach(() => { - vi.restoreAllMocks() - }) - - describe('unlinkSafe', () => { - describe('文件存在时的删除操作', () => { - test('成功删除存在的文件', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - const filePath = '/path/to/existing/file.txt' - unlinkSafe(filePath) - - expect(mockUnlinkSync).toHaveBeenCalledTimes(1) - expect(mockUnlinkSync).toHaveBeenCalledWith(filePath) - }) - - test('删除不同路径的文件', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - const paths = [ - '/tmp/test.txt', - './relative/path/file.log', - 'simple.json', - '/home/user/documents/data.csv' - ] - - paths.forEach((path) => { - unlinkSafe(path) - }) - - expect(mockUnlinkSync).toHaveBeenCalledTimes(4) - paths.forEach((path, index) => { - expect(mockUnlinkSync).toHaveBeenNthCalledWith(index + 1, path) - }) - }) - - test('删除包含特殊字符路径的文件', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - const specialPaths = [ - '/path/with spaces/file.txt', - '/path/with-dashes/file.txt', - '/path/with_underscores/file.txt', - '/path/中文路径/文件.txt' - ] - - specialPaths.forEach((path) => { - unlinkSafe(path) - }) - - expect(mockUnlinkSync).toHaveBeenCalledTimes(4) - }) - }) - - describe('文件不存在时的静默处理', () => { - test('文件不存在时不抛出错误(ENOENT)', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - const enoentError = new Error('ENOENT: no such file or directory') - ;(enoentError as NodeJS.ErrnoException).code = 'ENOENT' - mockUnlinkSync.mockImplementation(() => { - throw enoentError - }) - - const filePath = '/path/to/nonexistent/file.txt' - - // 不应该抛出错误 - expect(() => unlinkSafe(filePath)).not.toThrow() - expect(mockUnlinkSync).toHaveBeenCalledWith(filePath) - }) - - test('多次尝试删除不存在的文件都不抛出错误', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - const enoentError = new Error('ENOENT: no such file or directory') - ;(enoentError as NodeJS.ErrnoException).code = 'ENOENT' - mockUnlinkSync.mockImplementation(() => { - throw enoentError - }) - - const filePath = '/nonexistent/file.txt' - - // 多次调用都不应该抛出错误 - for (let i = 0; i < 5; i++) { - expect(() => unlinkSafe(filePath)).not.toThrow() - } - - expect(mockUnlinkSync).toHaveBeenCalledTimes(5) - }) - }) - - describe('其他错误的静默处理', () => { - test('权限不足错误时不抛出异常(EACCES)', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - const eaccesError = new Error('EACCES: permission denied') - ;(eaccesError as NodeJS.ErrnoException).code = 'EACCES' - mockUnlinkSync.mockImplementation(() => { - throw eaccesError - }) - - const filePath = '/protected/file.txt' - - expect(() => unlinkSafe(filePath)).not.toThrow() - expect(mockUnlinkSync).toHaveBeenCalledWith(filePath) - }) - - test('路径是目录时不抛出异常(EISDIR)', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - const eisdirError = new Error('EISDIR: illegal operation on a directory') - ;(eisdirError as NodeJS.ErrnoException).code = 'EISDIR' - mockUnlinkSync.mockImplementation(() => { - throw eisdirError - }) - - const dirPath = '/path/to/directory' - - expect(() => unlinkSafe(dirPath)).not.toThrow() - expect(mockUnlinkSync).toHaveBeenCalledWith(dirPath) - }) - - test('文件正在使用时不抛出异常(EBUSY)', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - const ebusyError = new Error('EBUSY: resource busy or locked') - ;(ebusyError as NodeJS.ErrnoException).code = 'EBUSY' - mockUnlinkSync.mockImplementation(() => { - throw ebusyError - }) - - const filePath = '/busy/file.txt' - - expect(() => unlinkSafe(filePath)).not.toThrow() - expect(mockUnlinkSync).toHaveBeenCalledWith(filePath) - }) - - test('只读文件系统错误时不抛出异常(EROFS)', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - const erofsError = new Error('EROFS: read-only file system') - ;(erofsError as NodeJS.ErrnoException).code = 'EROFS' - mockUnlinkSync.mockImplementation(() => { - throw erofsError - }) - - const filePath = '/readonly/file.txt' - - expect(() => unlinkSafe(filePath)).not.toThrow() - expect(mockUnlinkSync).toHaveBeenCalledWith(filePath) - }) - - test('通用错误时不抛出异常', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => { - throw new Error('Unknown error') - }) - - const filePath = '/some/file.txt' - - expect(() => unlinkSafe(filePath)).not.toThrow() - expect(mockUnlinkSync).toHaveBeenCalledWith(filePath) - }) - }) - - describe('边界情况', () => { - test('空字符串路径', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - unlinkSafe('') - - expect(mockUnlinkSync).toHaveBeenCalledWith('') - }) - - test('根路径', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - unlinkSafe('/') - - expect(mockUnlinkSync).toHaveBeenCalledWith('/') - }) - - test('相对路径', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - unlinkSafe('./test.txt') - - expect(mockUnlinkSync).toHaveBeenCalledWith('./test.txt') - }) - - test('带有 .. 的路径', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - unlinkSafe('../parent/file.txt') - - expect(mockUnlinkSync).toHaveBeenCalledWith('../parent/file.txt') - }) - - test('Windows 风格路径', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - unlinkSafe('C:\\Users\\test\\file.txt') - - expect(mockUnlinkSync).toHaveBeenCalledWith('C:\\Users\\test\\file.txt') - }) - }) - - describe('返回值', () => { - test('函数返回 undefined', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => undefined) - - const result = unlinkSafe('/path/to/file.txt') - - expect(result).toBeUndefined() - }) - - test('发生错误时也返回 undefined', () => { - const mockUnlinkSync = vi.mocked(fs.unlinkSync) - mockUnlinkSync.mockImplementation(() => { - throw new Error('Some error') - }) - - const result = unlinkSafe('/path/to/file.txt') - - expect(result).toBeUndefined() - }) - }) - }) -}) diff --git a/packages/network-debugger/src/utils/file.ts b/packages/network-debugger/src/utils/file.ts deleted file mode 100644 index f4bb51f..0000000 --- a/packages/network-debugger/src/utils/file.ts +++ /dev/null @@ -1,7 +0,0 @@ -import fs from 'fs' - -export const unlinkSafe = (path: string) => { - try { - fs.unlinkSync(path) - } catch {} -} diff --git a/packages/network-debugger/src/utils/map.ts b/packages/network-debugger/src/utils/map.ts index 192d72e..4f77895 100644 --- a/packages/network-debugger/src/utils/map.ts +++ b/packages/network-debugger/src/utils/map.ts @@ -1,8 +1,15 @@ export function headersToObject(map: T) { - const obj: Record = {}; + const obj: Record = {} map.forEach((value, key) => { - obj[key] = value; - }); + // Header names are user-controlled; define the property directly so the + // legacy `__proto__` setter cannot swallow an otherwise valid entry. + Object.defineProperty(obj, key, { + value, + enumerable: true, + configurable: true, + writable: true + }) + }) - return obj; + return obj } diff --git a/packages/network-debugger/test/e2e/cli/cli.test.mjs b/packages/network-debugger/test/e2e/cli/cli.test.mjs new file mode 100644 index 0000000..62d99a5 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/cli.test.mjs @@ -0,0 +1,540 @@ +import assert from 'node:assert/strict' +import { spawn } from 'node:child_process' +import { mkdtemp, readFile, rm } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import test from 'node:test' +import { resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { + FIXTURES_DIR, + PACKAGE_DIR, + REGISTER_PATH, + assertCliBuildExists, + atomicReplace, + cleanCliEnvironment, + runCli, + startCli, + temporaryFixtureCopy, + waitForProcessGone +} from './harness.mjs' + +const TEST_TIMEOUT_MS = 30_000 +const CJS_FIXTURE = resolve(FIXTURES_DIR, 'probe.cjs') +const ESM_FIXTURE = resolve(FIXTURES_DIR, 'probe.mjs') +const TS_FIXTURE = resolve(FIXTURES_DIR, 'probe.ts') +const WATCH_FIXTURE = resolve(FIXTURES_DIR, 'watch-entry.mjs') +const NEST_FIXTURE = resolve(FIXTURES_DIR, 'nest-app/dist/main.cjs') +const FRONTEND_OPEN_HOOK = resolve(FIXTURES_DIR, 'frontend-open-hook.cjs') +const FRONTEND_CDP_RUNNER = resolve(FIXTURES_DIR, 'frontend-cdp-runner.mjs') +const FINITE_LEGACY_FIXTURE = resolve(FIXTURES_DIR, 'finite-legacy.cjs') +const WATCH_SUPERVISOR_SETTLE_MS = 500 + +function importedModules(execArgv) { + const modules = [] + for (let index = 0; index < execArgv.length; index += 1) { + const argument = execArgv[index] + if (argument === '--import' && execArgv[index + 1]) { + modules.push(execArgv[index + 1]) + index += 1 + } else if (argument.startsWith('--import=')) { + modules.push(argument.slice('--import='.length)) + } + } + return modules +} + +function importMatchesPath(specifier, expectedPath) { + if (specifier.startsWith('file:')) return fileURLToPath(specifier) === expectedPath + return resolve(specifier) === expectedPath +} + +function assertNativeFixture(record, { label, argv = [] } = {}) { + assert.equal(record.type, 'fixture-ready') + assert.equal(record.label, label) + assert.equal(record.preloadInjected, true) + assert.equal(record.mode, 'native') + assert.deepEqual(record.argv, argv) + assert.ok(Number.isInteger(record.pid) && record.pid > 0) + assert.ok(Number.isInteger(record.ppid) && record.ppid > 0) + + assert.ok( + record.execArgv.includes('--experimental-network-inspection'), + `missing experimental network flag in ${JSON.stringify(record.execArgv)}` + ) + assert.ok( + record.execArgv.some((argument) => argument === '--inspect=127.0.0.1:0'), + `missing ephemeral Inspector flag in ${JSON.stringify(record.execArgv)}` + ) + assert.equal( + record.execArgv.some((argument) => argument.startsWith('--inspect-wait')), + false, + '--no-wait must not inject --inspect-wait' + ) + + const imports = importedModules(record.execArgv) + assert.ok( + imports.some((specifier) => importMatchesPath(specifier, REGISTER_PATH)), + `missing dist/register.mjs preload in ${JSON.stringify(imports)}` + ) + assert.equal(record.capabilities.http, true) + assert.equal(record.capabilities.https, true) + assert.equal(record.capabilities.fetch, true) + assert.equal(record.fallbackReason, null) + assert.match(record.target.webSocketDebuggerUrl, /^ws:\/\/127\.0\.0\.1:\d+\//) + assert.match(record.target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) +} + +function assertNormalExit(result, code = 0) { + assert.equal(result.code, code, `unexpected stderr:\n${result.stderr}`) + assert.equal(result.signal, null) +} + +function parseReadyReport(stderr) { + const prefix = '[nnd:ready] ' + const line = stderr.split(/\r?\n/).find((candidate) => candidate.includes(prefix)) + assert.ok(line, `missing preload readiness report:\n${stderr}`) + return JSON.parse(line.slice(line.indexOf(prefix) + prefix.length)) +} + +async function waitForEndpointClosed(url, { timeoutMs = 5_000 } = {}) { + const deadline = Date.now() + timeoutMs + while (Date.now() < deadline) { + try { + const response = await fetch(url, { signal: AbortSignal.timeout(500) }) + await response.arrayBuffer() + } catch { + return + } + await new Promise((resolvePromise) => setTimeout(resolvePromise, 25)) + } + throw new Error(`Legacy target remained reachable after its application exited: ${url}`) +} + +function runPreloadedNode(execArgv, { timeoutMs = 15_000 } = {}) { + return new Promise((resolvePromise, rejectPromise) => { + const child = spawn(process.execPath, execArgv, { + cwd: PACKAGE_DIR, + env: cleanCliEnvironment({ + NND_MODE: 'legacy', + NND_LEGACY_SERVER_PORT: '0', + NND_PRELOAD_REPORT: '1' + }), + stdio: ['ignore', 'pipe', 'pipe'] + }) + let stdout = '' + let stderr = '' + let timedOut = false + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => { + stdout += chunk + }) + child.stderr.on('data', (chunk) => { + stderr += chunk + }) + const timer = setTimeout(() => { + timedOut = true + child.kill('SIGKILL') + }, timeoutMs) + child.once('error', (error) => { + clearTimeout(timer) + rejectPromise(error) + }) + child.once('close', (code, signal) => { + clearTimeout(timer) + if (timedOut) { + rejectPromise( + new Error( + `Preloaded Node process did not exit naturally within ${timeoutMs}ms.\nstdout:\n${stdout}\nstderr:\n${stderr}` + ) + ) + return + } + resolvePromise({ code, signal, stdout, stderr }) + }) + }) +} + +async function assertCliReportedNative(cli, fixtureRecord) { + const { line } = await cli.waitForLine((candidate) => candidate.includes('[nnd:ready] '), { + source: 'stderr', + label: 'CLI Native readiness report' + }) + const ready = JSON.parse(line.slice(line.indexOf('[nnd:ready] ') + '[nnd:ready] '.length)) + assert.equal(ready.mode, 'native') + assert.equal(ready.target.webSocketDebuggerUrl, fixtureRecord.target.webSocketDebuggerUrl) + assert.equal(ready.capabilities.http, true) +} + +function protectCli(t, cli) { + const applicationPids = new Set() + t.after(async () => { + if (cli.running) await cli.terminate().catch(() => {}) + for (const pid of applicationPids) { + try { + process.kill(pid, 'SIGKILL') + } catch (error) { + if (error?.code !== 'ESRCH') throw error + } + } + }) + return applicationPids +} + +test.before(async () => { + await assertCliBuildExists() +}) + +test( + 'doctor --json emits a parseable, versioned and internally consistent report', + { timeout: TEST_TIMEOUT_MS }, + async () => { + const result = await runCli(['doctor', '--json']) + assertNormalExit(result) + assert.equal(result.stderr, '') + + const report = JSON.parse(result.stdout) + assert.equal(report.schemaVersion, 1) + assert.equal(report.ok, true) + assert.equal(report.nodeVersion, process.versions.node) + assert.match(report.packageVersion, /^\d+\.\d+\.\d+/) + assert.equal(report.inspectorAvailable, true) + assert.equal(typeof report.experimentalFlag, 'boolean') + assert.equal(report.native.kind, 'native') + assert.equal(typeof report.native.available, 'boolean') + assert.equal(report.selection.requested, 'auto') + assert.ok(['native', 'legacy'].includes(report.selection.selected)) + assert.equal(report.config.config.inspector.port, 0) + assert.equal(report.config.config.open, false) + assert.ok(Array.isArray(report.diagnostics)) + assert.ok(report.diagnostics.some((item) => item.code === 'NND_DOCTOR_NODE_VERSION')) + assert.ok(report.diagnostics.some((item) => item.code.startsWith('NND_DOCTOR_SELECTED_'))) + } +) + +test( + 'dev --open resumes the real inspect-wait target and opens its authoritative target once', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const directory = await mkdtemp(resolve(tmpdir(), 'node-network-devtools-open-e2e-')) + const frontendRecord = resolve(directory, 'frontend.ndjson') + const cli = startCli(['dev', '--open', ESM_FIXTURE], { + nodeArgs: ['--require', FRONTEND_OPEN_HOOK], + env: cleanCliEnvironment({ + NND_E2E_FRONTEND_RUNNER: FRONTEND_CDP_RUNNER, + NND_E2E_FRONTEND_RECORD: frontendRecord + }) + }) + const applicationPids = protectCli(t, cli) + t.after(() => rm(directory, { recursive: true, force: true })) + + const ready = await cli.waitForRecord((record) => record.label === 'esm') + applicationPids.add(ready.pid) + assert.equal(ready.preloadInjected, true) + assert.equal(ready.mode, 'native') + assert.ok( + ready.execArgv.includes('--inspect-wait=127.0.0.1:0'), + `missing inspect-wait in ${JSON.stringify(ready.execArgv)}` + ) + assert.equal( + ready.execArgv.some((argument) => argument === '--inspect=127.0.0.1:0'), + false + ) + await assertCliReportedNative(cli, ready) + + const result = await cli.waitForExit() + assertNormalExit(result) + await waitForProcessGone(ready.pid) + applicationPids.clear() + + let recordText + const deadline = Date.now() + 5_000 + while (recordText === undefined && Date.now() < deadline) { + try { + recordText = await readFile(frontendRecord, 'utf8') + } catch (error) { + if (error?.code !== 'ENOENT') throw error + await new Promise((resolvePromise) => setTimeout(resolvePromise, 25)) + } + } + assert.ok(recordText, 'frontend CDP runner did not record an opened target') + const opened = recordText + .trim() + .split(/\r?\n/) + .filter(Boolean) + .map((line) => JSON.parse(line)) + assert.equal(opened.length, 1, `authoritative target opened ${opened.length} times`) + assert.equal(opened[0].webSocketDebuggerUrl, ready.target.webSocketDebuggerUrl) + assert.match(opened[0].frontendUrl, /^devtools:\/\//) + } +) + +test( + 'Auto starts Legacy without Native flags when required capabilities cannot be met', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const cli = startCli(['dev', '--no-wait', '--require', 'requestBody', ESM_FIXTURE]) + const applicationPids = protectCli(t, cli) + const ready = await cli.waitForRecord((record) => record.label === 'esm') + applicationPids.add(ready.pid) + + assert.equal(ready.mode, 'legacy') + assert.equal(ready.capabilities.requestBody, true) + assert.equal(ready.fallbackReason?.code, 'NND_AUTO_FALLBACK') + assert.equal(ready.execArgv.includes('--experimental-network-inspection'), false) + assert.equal( + ready.execArgv.some((argument) => argument.startsWith('--inspect')), + false, + `Auto fallback must not create a waiting Native target: ${JSON.stringify(ready.execArgv)}` + ) + + const { line } = await cli.waitForLine((candidate) => candidate.includes('[nnd:ready] '), { + source: 'stderr', + label: 'CLI Legacy fallback readiness report' + }) + const reported = JSON.parse(line.slice(line.indexOf('[nnd:ready] ') + '[nnd:ready] '.length)) + assert.equal(reported.mode, 'legacy') + assert.equal(reported.fallbackReason.code, 'NND_AUTO_FALLBACK') + + const result = await cli.terminate('SIGTERM') + assert.deepEqual(result, { code: 143, signal: null }) + await waitForProcessGone(ready.pid) + applicationPids.clear() + assert.equal( + cli.lines.filter((item) => item.line.includes('[nnd:ready] ')).length, + 1, + 'Legacy bridge descendants must not execute the inherited side-effect preload' + ) + } +) + +test( + 'finite Legacy CLI application exits naturally without accessing the preload handle', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const cli = startCli(['dev', '--mode', 'legacy', '--no-wait', FINITE_LEGACY_FIXTURE]) + const applicationPids = protectCli(t, cli) + const fixture = await cli.waitForRecord((record) => record.type === 'finite-legacy') + applicationPids.add(fixture.pid) + + const { line } = await cli.waitForLine((candidate) => candidate.includes('[nnd:ready] '), { + source: 'stderr', + label: 'finite Legacy readiness report' + }) + const ready = parseReadyReport(line) + assert.equal(ready.mode, 'legacy') + assert.match(ready.target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) + + const result = await cli.waitForExit({ + timeoutMs: 10_000, + label: 'finite Legacy CLI natural exit' + }) + assertNormalExit({ ...result, stderr: cli.stderr }) + await waitForProcessGone(fixture.pid) + applicationPids.clear() + await waitForEndpointClosed(ready.target.discoveryUrl) + assert.equal( + cli.lines.filter((item) => item.line.includes('[nnd:ready] ')).length, + 1, + 'the detached Legacy child must not replay the preload entry' + ) + } +) + +test( + 'direct Legacy preload sanitizes eval and print execArgv and leaves no backend orphan', + { timeout: 75_000 }, + async () => { + const source = + "process.stdout.write('@@NND_E2E@@' + JSON.stringify({ type: 'finite-preload', pid: process.pid, ppid: process.ppid }) + '\\n')" + + for (const option of ['-e', '--eval', '-p', '--print']) { + const result = await runPreloadedNode([`--import=${REGISTER_PATH}`, option, source]) + assertNormalExit(result) + assert.doesNotMatch(result.stderr, /NND_LEGACY_CHILD_START_FAILED/) + const records = result.stdout + .split(/\r?\n/) + .filter((line) => line.startsWith('@@NND_E2E@@')) + .map((line) => JSON.parse(line.slice('@@NND_E2E@@'.length))) + assert.equal(records.length, 1, `${option} evaluation was unexpectedly replayed by a child`) + assert.equal(records[0].type, 'finite-preload') + + const ready = parseReadyReport(result.stderr) + assert.equal(ready.mode, 'legacy') + await waitForProcessGone(records[0].pid) + await waitForEndpointClosed(ready.target.discoveryUrl) + } + } +) + +test( + 'dev --no-wait preloads Native into a CJS entry, forwards args and mirrors exit code', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const applicationArgs = ['alpha', 'value with spaces', '--exit-code=23'] + const cli = startCli(['dev', '--no-wait', CJS_FIXTURE, '--', ...applicationArgs]) + const applicationPids = protectCli(t, cli) + const ready = await cli.waitForRecord((record) => record.label === 'cjs') + applicationPids.add(ready.pid) + assertNativeFixture(ready, { label: 'cjs', argv: applicationArgs }) + await assertCliReportedNative(cli, ready) + + const result = await cli.waitForExit() + assert.equal(result.code, 23, `unexpected CLI output:\n${cli.stdout}\n${cli.stderr}`) + assert.equal(result.signal, null) + await waitForProcessGone(ready.pid) + applicationPids.clear() + } +) + +test( + 'dev --no-wait preloads Native into an ESM entry without source registration', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const applicationArgs = ['--format=esm'] + const cli = startCli(['dev', '--no-wait', ESM_FIXTURE, '--', ...applicationArgs]) + const applicationPids = protectCli(t, cli) + const ready = await cli.waitForRecord((record) => record.label === 'esm') + applicationPids.add(ready.pid) + assertNativeFixture(ready, { label: 'esm', argv: applicationArgs }) + await assertCliReportedNative(cli, ready) + + const result = await cli.waitForExit() + assert.equal(result.code, 0, `unexpected CLI output:\n${cli.stdout}\n${cli.stderr}`) + assert.equal(result.signal, null) + await waitForProcessGone(ready.pid) + applicationPids.clear() + } +) + +test( + 'dev --runner tsx executes a TypeScript entry with both preloads active', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const applicationArgs = ['--typed-argument', '42'] + const cli = startCli([ + 'dev', + '--runner', + 'tsx', + '--no-wait', + TS_FIXTURE, + '--', + ...applicationArgs + ]) + const applicationPids = protectCli(t, cli) + const ready = await cli.waitForRecord((record) => record.label === 'tsx') + applicationPids.add(ready.pid) + assertNativeFixture(ready, { label: 'tsx', argv: applicationArgs }) + await assertCliReportedNative(cli, ready) + assert.equal(ready.typescriptExecuted, true) + assert.ok( + importedModules(ready.execArgv).includes('tsx'), + `missing tsx preload in ${JSON.stringify(ready.execArgv)}` + ) + + const result = await cli.waitForExit() + assert.equal(result.code, 0, `unexpected CLI output:\n${cli.stdout}\n${cli.stderr}`) + assert.equal(result.signal, null) + await waitForProcessGone(ready.pid) + applicationPids.clear() + } +) + +test( + 'dev --watch performs one restart after an atomic entry replacement and leaves no child', + { timeout: 45_000 }, + async (t) => { + const fixture = await temporaryFixtureCopy(WATCH_FIXTURE) + const cli = startCli(['dev', '--watch', '--no-wait', fixture.path]) + const observedPids = new Set() + + t.after(async () => { + if (cli.running) await cli.terminate().catch(() => {}) + for (const pid of observedPids) { + if (Number.isInteger(pid) && pid > 0) { + try { + process.kill(pid, 'SIGKILL') + } catch (error) { + if (error?.code !== 'ESRCH') throw error + } + } + } + await fixture.cleanup() + }) + + const initial = await cli.waitForRecord( + (record) => record.label === 'watch' && record.generation === 'initial-generation' + ) + observedPids.add(initial.pid) + observedPids.add(initial.ppid) + assertNativeFixture(initial, { label: 'watch' }) + + // Node's native watch supervisor has no public "watcher armed" signal. + // The worker can print readiness before the supervisor consumes its + // watch:import IPC and creates the directory watcher, so an immediate + // atomic editor-style replacement can otherwise fall into that window. + await new Promise((resolvePromise) => setTimeout(resolvePromise, WATCH_SUPERVISOR_SETTLE_MS)) + await atomicReplace(fixture.path, async () => { + const source = await readFile(fixture.path, 'utf8') + return source.replace('initial-generation', 'updated-generation') + }) + + const restarted = await cli.waitForRecord( + (record) => + record.label === 'watch' && + record.generation === 'updated-generation' && + record.pid !== initial.pid, + { timeoutMs: 25_000, label: 'watch restart readiness' } + ) + observedPids.add(restarted.pid) + observedPids.add(restarted.ppid) + assertNativeFixture(restarted, { label: 'watch' }) + assert.notEqual(restarted.pid, initial.pid) + assert.equal(restarted.ppid, initial.ppid, 'Node watch supervisor must remain stable') + await waitForProcessGone(initial.pid) + + const result = await cli.terminate('SIGTERM') + assert.equal(result.signal, null) + assert.ok( + result.code === 0 || result.code === 143, + `watch supervisor must exit cleanly or preserve SIGTERM semantics; received ${result.code}` + ) + await waitForProcessGone(restarted.pid) + await waitForProcessGone(restarted.ppid) + observedPids.clear() + } +) + +test( + 'compiled Nest-style bootstrap needs no registration edit and receives forwarded SIGTERM', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + const cli = startCli(['dev', '--no-wait', NEST_FIXTURE]) + let appPid + + t.after(async () => { + if (cli.running) await cli.terminate().catch(() => {}) + if (appPid) { + try { + process.kill(appPid, 'SIGKILL') + } catch (error) { + if (error?.code !== 'ESRCH') throw error + } + } + }) + + const ready = await cli.waitForRecord((record) => record.label === 'nest-compiled') + appPid = ready.pid + assertNativeFixture(ready, { label: 'nest-compiled' }) + assert.equal(ready.framework, 'nest-style') + assert.equal(ready.module, 'AppModule') + assert.equal(ready.listenHost, '127.0.0.1') + assert.ok(Number.isInteger(ready.listenPort) && ready.listenPort > 0) + + const result = await cli.terminate('SIGTERM') + assert.deepEqual(result, { code: 143, signal: null }) + await waitForProcessGone(appPid) + appPid = undefined + } +) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/finite-legacy.cjs b/packages/network-debugger/test/e2e/cli/fixtures/finite-legacy.cjs new file mode 100644 index 0000000..1ef9116 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/finite-legacy.cjs @@ -0,0 +1,12 @@ +'use strict' + +// Deliberately do not read the preload state symbol or dispose its internal +// registration handle. A debugging preload must never extend application +// lifetime; the bridge child owns cleanup after the parent IPC disconnects. +process.stdout.write( + `@@NND_E2E@@${JSON.stringify({ + type: 'finite-legacy', + pid: process.pid, + ppid: process.ppid + })}\n` +) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/frontend-cdp-runner.mjs b/packages/network-debugger/test/e2e/cli/fixtures/frontend-cdp-runner.mjs new file mode 100644 index 0000000..4a046cd --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/frontend-cdp-runner.mjs @@ -0,0 +1,48 @@ +import { appendFile } from 'node:fs/promises' +import WebSocket from 'ws' + +const frontendUrl = process.argv[2] +const recordPath = process.env.NND_E2E_FRONTEND_RECORD +if (!frontendUrl || !recordPath) { + throw new Error('frontend URL and NND_E2E_FRONTEND_RECORD are required') +} + +const frontend = new URL(frontendUrl) +const address = frontend.searchParams.get('ws') +if (!address) throw new Error(`Frontend URL has no ws parameter: ${frontendUrl}`) +const webSocketDebuggerUrl = address.startsWith('ws:') ? address : `ws://${address}` + +await new Promise((resolvePromise, rejectPromise) => { + const socket = new WebSocket(webSocketDebuggerUrl) + const timeout = setTimeout(() => { + socket.terminate() + rejectPromise(new Error(`Timed out resuming ${webSocketDebuggerUrl}`)) + }, 10_000) + + const cleanup = () => clearTimeout(timeout) + socket.once('error', (error) => { + cleanup() + rejectPromise(error) + }) + socket.once('open', () => { + socket.send(JSON.stringify({ id: 1, method: 'Runtime.runIfWaitingForDebugger' })) + }) + socket.on('message', async (data) => { + const message = JSON.parse(data.toString()) + if (message.id !== 1) return + try { + await appendFile( + recordPath, + `${JSON.stringify({ frontendUrl, webSocketDebuggerUrl })}\n`, + 'utf8' + ) + cleanup() + socket.close() + resolvePromise() + } catch (error) { + cleanup() + socket.terminate() + rejectPromise(error) + } + }) +}) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/frontend-open-hook.cjs b/packages/network-debugger/test/e2e/cli/fixtures/frontend-open-hook.cjs new file mode 100644 index 0000000..64ffadd --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/frontend-open-hook.cjs @@ -0,0 +1,43 @@ +'use strict' + +const childProcess = require('node:child_process') +const { syncBuiltinESMExports } = require('node:module') + +const originalSpawn = childProcess.spawn +const runnerPath = process.env.NND_E2E_FRONTEND_RUNNER + +function extractFrontendUrl(argumentsList) { + for (const argument of argumentsList ?? []) { + if (typeof argument !== 'string') continue + const directIndex = argument.indexOf('devtools://') + if (directIndex >= 0) return argument.slice(directIndex).replace(/["']+$/, '') + + // `open` uses a UTF-16LE encoded PowerShell command on Windows. + try { + const decoded = Buffer.from(argument, 'base64').toString('utf16le') + const match = decoded.match(/devtools:\/\/[^"'\s]+/) + if (match) return match[0] + } catch { + // Not a base64 PowerShell argument. + } + } + return undefined +} + +childProcess.spawn = function nndE2eSpawn(command, argumentsList, options) { + const frontendUrl = extractFrontendUrl(argumentsList) + if (!frontendUrl) return originalSpawn.call(this, command, argumentsList, options) + if (!runnerPath) throw new Error('NND_E2E_FRONTEND_RUNNER is required') + + return originalSpawn(process.execPath, [runnerPath, frontendUrl], { + env: options?.env ?? process.env, + // The real launcher is detached on Linux. Preserve that lifecycle while + // avoiding Windows-only spawn flags when the replacement executable is Node. + detached: options?.detached ?? false, + stdio: options?.stdio ?? 'ignore' + }) +} + +// The CLI imports spawn from `node:child_process`; synchronize the patched CJS +// export before its ESM graph is evaluated. +syncBuiltinESMExports() diff --git a/packages/network-debugger/test/e2e/cli/fixtures/probe-core.cjs b/packages/network-debugger/test/e2e/cli/fixtures/probe-core.cjs new file mode 100644 index 0000000..51d5ce6 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/probe-core.cjs @@ -0,0 +1,53 @@ +'use strict' + +const RECORD_PREFIX = '@@NND_E2E@@' +const PRELOAD_STATE = Symbol.for('node-network-devtools.preload.state') + +async function reportReady(label, extra = {}) { + const preloadState = globalThis[PRELOAD_STATE] + if (!preloadState?.promise) { + throw new Error('NND preload state is unavailable; the CLI did not inject dist/register.mjs') + } + + const handle = await preloadState.promise + const ready = await handle.ready + const record = { + type: 'fixture-ready', + label, + pid: process.pid, + ppid: process.ppid, + argv: process.argv.slice(2), + execArgv: [...process.execArgv], + preloadInjected: true, + mode: ready.mode, + capabilities: ready.capabilities, + fallbackReason: ready.fallbackReason ?? null, + target: { + id: ready.target.id, + type: ready.target.type, + discoveryUrl: ready.target.discoveryUrl, + webSocketDebuggerUrl: ready.target.webSocketDebuggerUrl + }, + ...extra + } + process.stdout.write(`${RECORD_PREFIX}${JSON.stringify(record)}\n`) + return { handle, ready, record } +} + +function exitCodeFromArgv() { + const value = process.argv.slice(2).find((argument) => argument.startsWith('--exit-code=')) + if (!value) return 0 + const code = Number(value.slice('--exit-code='.length)) + if (!Number.isInteger(code) || code < 0 || code > 255) { + throw new Error(`Invalid fixture exit code: ${value}`) + } + return code +} + +function fail(error) { + const message = error instanceof Error ? (error.stack ?? error.message) : String(error) + process.stderr.write(`@@NND_E2E_ERROR@@${message}\n`) + process.exitCode = 70 +} + +module.exports = { exitCodeFromArgv, fail, reportReady } diff --git a/packages/network-debugger/test/e2e/cli/fixtures/probe.cjs b/packages/network-debugger/test/e2e/cli/fixtures/probe.cjs new file mode 100644 index 0000000..9df03a2 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/probe.cjs @@ -0,0 +1,10 @@ +'use strict' + +const { exitCodeFromArgv, fail, reportReady } = require('./probe-core.cjs') + +void reportReady('cjs') + .then(async ({ handle }) => { + process.exitCode = exitCodeFromArgv() + await handle.dispose() + }) + .catch(fail) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/probe.mjs b/packages/network-debugger/test/e2e/cli/fixtures/probe.mjs new file mode 100644 index 0000000..de09b17 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/probe.mjs @@ -0,0 +1,9 @@ +import probe from './probe-core.cjs' + +try { + const { handle } = await probe.reportReady('esm') + process.exitCode = probe.exitCodeFromArgv() + await handle.dispose() +} catch (error) { + probe.fail(error) +} diff --git a/packages/network-debugger/test/e2e/cli/fixtures/probe.ts b/packages/network-debugger/test/e2e/cli/fixtures/probe.ts new file mode 100644 index 0000000..3e18f9d --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/probe.ts @@ -0,0 +1,53 @@ +type PreloadState = { + promise: Promise<{ + ready: Promise<{ + mode: string + capabilities: Record + fallbackReason?: unknown + target: { + id: string + type: string + discoveryUrl: string + webSocketDebuggerUrl: string + } + }> + dispose(): Promise + }> +} + +const RECORD_PREFIX: string = '@@NND_E2E@@' +const PRELOAD_STATE: symbol = Symbol.for('node-network-devtools.preload.state') + +async function main(): Promise { + const preloadState = (globalThis as Record)[PRELOAD_STATE] as + | PreloadState + | undefined + if (!preloadState?.promise) { + throw new Error('NND preload state is unavailable; the CLI did not inject dist/register.mjs') + } + + const handle = await preloadState.promise + const ready = await handle.ready + const record = { + type: 'fixture-ready', + label: 'tsx', + pid: process.pid, + ppid: process.ppid, + argv: process.argv.slice(2), + execArgv: [...process.execArgv], + preloadInjected: true, + mode: ready.mode, + capabilities: ready.capabilities, + fallbackReason: ready.fallbackReason ?? null, + target: ready.target, + typescriptExecuted: true + } + process.stdout.write(`${RECORD_PREFIX}${JSON.stringify(record)}\n`) + await handle.dispose() +} + +void main().catch((error: unknown) => { + const message = error instanceof Error ? (error.stack ?? error.message) : String(error) + process.stderr.write(`@@NND_E2E_ERROR@@${message}\n`) + process.exitCode = 70 +}) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/watch-entry.mjs b/packages/network-debugger/test/e2e/cli/fixtures/watch-entry.mjs new file mode 100644 index 0000000..86c32ea --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/watch-entry.mjs @@ -0,0 +1,29 @@ +const RECORD_PREFIX = '@@NND_E2E@@' +const PRELOAD_STATE = Symbol.for('node-network-devtools.preload.state') +const generation = 'initial-generation' + +const preloadState = globalThis[PRELOAD_STATE] +if (!preloadState?.promise) { + throw new Error('NND preload state is unavailable; the CLI did not inject dist/register.mjs') +} + +const handle = await preloadState.promise +const ready = await handle.ready +process.stdout.write( + `${RECORD_PREFIX}${JSON.stringify({ + type: 'fixture-ready', + label: 'watch', + generation, + pid: process.pid, + ppid: process.ppid, + argv: process.argv.slice(2), + execArgv: [...process.execArgv], + preloadInjected: true, + mode: ready.mode, + capabilities: ready.capabilities, + fallbackReason: ready.fallbackReason ?? null, + target: ready.target + })}\n` +) + +setInterval(() => {}, 60_000) diff --git a/packages/network-debugger/test/e2e/cli/harness.mjs b/packages/network-debugger/test/e2e/cli/harness.mjs new file mode 100644 index 0000000..2adae1a --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/harness.mjs @@ -0,0 +1,365 @@ +import { spawn } from 'node:child_process' +import { EventEmitter } from 'node:events' +import { access, copyFile, mkdtemp, rename, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { randomUUID } from 'node:crypto' + +const CLI_DIR = dirname(fileURLToPath(import.meta.url)) + +export const PACKAGE_DIR = resolve(CLI_DIR, '../../..') +export const CLI_PATH = resolve(PACKAGE_DIR, 'dist/cli.mjs') +export const REGISTER_PATH = resolve(PACKAGE_DIR, 'dist/register.mjs') +export const FIXTURES_DIR = resolve(CLI_DIR, 'fixtures') +export const FIXTURE_RECORD_PREFIX = '@@NND_E2E@@' + +const DEFAULT_TIMEOUT_MS = 15_000 + +function timeoutError(label, timeoutMs, processState) { + return new Error( + `Timed out after ${timeoutMs}ms while waiting for ${label}.\n` + + `CLI state: ${JSON.stringify(processState)}\n` + ) +} + +function parseFixtureRecord(line) { + const marker = line.indexOf(FIXTURE_RECORD_PREFIX) + if (marker === -1) return undefined + + const serialized = line.slice(marker + FIXTURE_RECORD_PREFIX.length).trim() + try { + return JSON.parse(serialized) + } catch (error) { + throw new Error(`Fixture emitted invalid JSON: ${serialized}`, { cause: error }) + } +} + +export async function assertCliBuildExists() { + await Promise.all( + [CLI_PATH, REGISTER_PATH].map((path) => + access(path).catch(() => { + throw new Error(`Missing built CLI artifact ${path}. Run the package build before CLI E2E.`) + }) + ) + ) +} + +export function cleanCliEnvironment(overrides = {}) { + const environment = { ...process.env } + for (const key of Object.keys(environment)) { + if (key.startsWith('NND_')) delete environment[key] + } + delete environment.NODE_OPTIONS + return { ...environment, ...overrides } +} + +export class CliProcess { + constructor( + args, + { + cwd = PACKAGE_DIR, + env = cleanCliEnvironment(), + stdio = ['ignore', 'pipe', 'pipe'], + nodeArgs = [] + } = {} + ) { + this.args = [...args] + this.cwd = cwd + this.stdout = '' + this.stderr = '' + this.lines = [] + this.records = [] + this.events = new EventEmitter() + this.closed = undefined + + const child = spawn(process.execPath, [...nodeArgs, CLI_PATH, ...args], { + cwd, + env, + stdio + }) + this.child = child + this.#capture(child.stdout, 'stdout') + this.#capture(child.stderr, 'stderr') + child.once('error', (error) => this.events.emit('process-error', error)) + child.once('close', (code, signal) => { + this.closed = { code, signal } + this.events.emit('process-close', this.closed) + }) + } + + get pid() { + return this.child.pid + } + + get running() { + return ( + this.closed === undefined && this.child.exitCode === null && this.child.signalCode === null + ) + } + + output() { + return { stdout: this.stdout, stderr: this.stderr } + } + + state() { + return { + args: this.args, + cwd: this.cwd, + pid: this.pid, + exitCode: this.child.exitCode, + signalCode: this.child.signalCode, + stdout: this.stdout, + stderr: this.stderr + } + } + + waitForLine(predicate, { source, timeoutMs = DEFAULT_TIMEOUT_MS, label = 'CLI output' } = {}) { + const existing = this.lines.find( + (item) => (!source || item.source === source) && predicate(item.line, item) + ) + if (existing) return Promise.resolve(existing) + + if (this.closed) { + return Promise.reject( + new Error(`CLI exited before ${label}: ${JSON.stringify(this.closed)}\n${this.stderr}`) + ) + } + + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(timeoutError(label, timeoutMs, this.state())) + }, timeoutMs) + + const onLine = (item) => { + if (source && item.source !== source) return + let matches + try { + matches = predicate(item.line, item) + } catch (error) { + cleanup() + reject(error) + return + } + if (!matches) return + cleanup() + resolvePromise(item) + } + const onError = (error) => { + cleanup() + reject(error) + } + const onClose = (result) => { + cleanup() + reject(new Error(`CLI exited before ${label}: ${JSON.stringify(result)}\n${this.stderr}`)) + } + const cleanup = () => { + clearTimeout(timer) + this.events.off('line', onLine) + this.events.off('process-error', onError) + this.events.off('process-close', onClose) + } + + this.events.on('line', onLine) + this.events.once('process-error', onError) + this.events.once('process-close', onClose) + }) + } + + waitForRecord(predicate = () => true, options = {}) { + const existing = this.records.find(predicate) + if (existing) return Promise.resolve(existing) + + if (this.closed) { + return Promise.reject( + new Error( + `CLI exited before fixture readiness: ${JSON.stringify(this.closed)}\n${this.stderr}` + ) + ) + } + + const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS + const label = options.label ?? 'fixture readiness record' + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(timeoutError(label, timeoutMs, this.state())) + }, timeoutMs) + const onRecord = (record) => { + let matches + try { + matches = predicate(record) + } catch (error) { + cleanup() + reject(error) + return + } + if (!matches) return + cleanup() + resolvePromise(record) + } + const onError = (error) => { + cleanup() + reject(error) + } + const onClose = (result) => { + cleanup() + reject( + new Error( + `CLI exited before ${label}: ${JSON.stringify(result)}\nstdout:\n${this.stdout}\nstderr:\n${this.stderr}` + ) + ) + } + const cleanup = () => { + clearTimeout(timer) + this.events.off('record', onRecord) + this.events.off('process-error', onError) + this.events.off('process-close', onClose) + } + + this.events.on('record', onRecord) + this.events.once('process-error', onError) + this.events.once('process-close', onClose) + }) + } + + waitForExit({ timeoutMs = DEFAULT_TIMEOUT_MS, label = 'CLI exit' } = {}) { + if (this.closed) return Promise.resolve(this.closed) + + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(timeoutError(label, timeoutMs, this.state())) + }, timeoutMs) + const onClose = (result) => { + cleanup() + resolvePromise(result) + } + const onError = (error) => { + cleanup() + reject(error) + } + const cleanup = () => { + clearTimeout(timer) + this.events.off('process-close', onClose) + this.events.off('process-error', onError) + } + + this.events.once('process-close', onClose) + this.events.once('process-error', onError) + }) + } + + async terminate(signal = 'SIGTERM', { timeoutMs = 5_000 } = {}) { + if (!this.running) return this.waitForExit({ timeoutMs, label: 'already-ended CLI' }) + + this.child.kill(signal) + try { + return await this.waitForExit({ timeoutMs, label: `CLI to handle ${signal}` }) + } catch (error) { + if (this.running) this.child.kill('SIGKILL') + await this.waitForExit({ timeoutMs: 2_000, label: 'CLI forced termination' }).catch(() => {}) + throw error + } + } + + #capture(stream, source) { + if (!stream) return + stream.setEncoding('utf8') + let pending = '' + + const emitLine = (line) => { + const item = { source, line } + this.lines.push(item) + this.events.emit('line', item) + + let record + try { + record = parseFixtureRecord(line) + } catch (error) { + this.events.emit('process-error', error) + return + } + if (record === undefined) return + this.records.push(record) + this.events.emit('record', record) + } + + stream.on('data', (chunk) => { + this[source] += chunk + pending += chunk + const lines = pending.split(/\r?\n/) + pending = lines.pop() ?? '' + lines.forEach(emitLine) + }) + stream.on('end', () => { + if (pending) emitLine(pending) + }) + } +} + +export function startCli(args, options) { + return new CliProcess(args, options) +} + +export async function runCli(args, options = {}) { + const cli = startCli(args, options) + try { + const result = await cli.waitForExit({ timeoutMs: options.timeoutMs ?? DEFAULT_TIMEOUT_MS }) + return { ...result, ...cli.output(), records: [...cli.records] } + } catch (error) { + if (cli.running) await cli.terminate().catch(() => {}) + throw error + } +} + +export function processExists(pid) { + if (!Number.isInteger(pid) || pid <= 0) return false + try { + process.kill(pid, 0) + return true + } catch (error) { + if (error?.code === 'ESRCH') return false + if (error?.code === 'EPERM') return true + throw error + } +} + +export async function waitForProcessGone(pid, { timeoutMs = 5_000 } = {}) { + if (!processExists(pid)) return + + await new Promise((resolvePromise, reject) => { + const deadline = Date.now() + timeoutMs + const check = () => { + if (!processExists(pid)) { + resolvePromise() + return + } + if (Date.now() >= deadline) { + reject(new Error(`Process ${pid} remained alive for more than ${timeoutMs}ms.`)) + return + } + setTimeout(check, 25) + } + check() + }) +} + +export async function atomicReplace(path, transform) { + const temporary = `${path}.${process.pid}.${randomUUID()}.tmp` + const next = await transform() + await writeFile(temporary, next, 'utf8') + await rename(temporary, path) +} + +export async function temporaryFixtureCopy(sourcePath) { + const directory = await mkdtemp(join(tmpdir(), 'node-network-devtools-cli-e2e-')) + const targetPath = join(directory, sourcePath.split(/[\\/]/).at(-1)) + await copyFile(sourcePath, targetPath) + return { + directory, + path: targetPath, + cleanup: () => rm(directory, { recursive: true, force: true }) + } +} diff --git a/packages/network-debugger/test/e2e/enhancements/README.md b/packages/network-debugger/test/e2e/enhancements/README.md new file mode 100644 index 0000000..b27fa86 --- /dev/null +++ b/packages/network-debugger/test/e2e/enhancements/README.md @@ -0,0 +1,28 @@ +# Phase 6 enhancements E2E + +This suite is a black-box acceptance gate for Session, HAR, Replay, Legacy Mock, +and trace correlation. It loads the built ESM package, starts a real Legacy CDP +target, connects both a raw CDP client and `SessionRecorder`, and sends business +traffic to a real loopback origin. Process IPC is used only for test control. + +Run it after building the package: + +```sh +pnpm --filter node-network-devtools build +node --test packages/network-debugger/test/e2e/enhancements/enhancements.test.mjs +``` + +The suite verifies: + +- `manifest.json`, ordered `events.ndjson`, content-addressed body files, and + body integrity hashes; +- HAR 1.2 text and binary bodies plus POST data; +- Session dry-run planning and real HAR replay against the loopback origin; +- real `http.request` and Fetch calls intercepted by Legacy Mock without origin + leakage; +- correlation of an existing `traceparent`/`tracestate` and absence of implicit + trace-header injection; and +- the stable Native-plus-Mock conflict through a separate built consumer. + +On failure, the harness prints a temporary artifact directory containing the +session, raw CDP journal, consumer logs, IPC messages, and origin request log. diff --git a/packages/network-debugger/test/e2e/enhancements/enhancements-harness.mjs b/packages/network-debugger/test/e2e/enhancements/enhancements-harness.mjs new file mode 100644 index 0000000..c0d12b3 --- /dev/null +++ b/packages/network-debugger/test/e2e/enhancements/enhancements-harness.mjs @@ -0,0 +1,318 @@ +import { spawn } from 'node:child_process' +import { randomUUID } from 'node:crypto' +import { access, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { CdpClient } from '../harness/cdp-client.mjs' +import { startEnhancementsOrigin } from './fixtures/origin-server.mjs' + +const DIRECTORY = dirname(fileURLToPath(import.meta.url)) +const PACKAGE_DIRECTORY = resolve(DIRECTORY, '../../..') +const DEFAULT_TIMEOUT_MS = 15_000 + +function waitForExit(child, timeoutMs, label) { + if (child.exitCode !== null || child.signalCode !== null) { + return Promise.resolve({ code: child.exitCode, signal: child.signalCode }) + } + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error(`Timed out after ${timeoutMs}ms waiting for ${label}`)) + }, timeoutMs) + const onExit = (code, signal) => { + cleanup() + resolvePromise({ code, signal }) + } + const cleanup = () => { + clearTimeout(timer) + child.off('exit', onExit) + } + child.once('exit', onExit) + }) +} + +async function fetchJson(url) { + const response = await fetch(url, { signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS) }) + const text = await response.text() + if (!response.ok) throw new Error(`HTTP ${response.status} from ${url}: ${text}`) + return JSON.parse(text) +} + +export class EnhancementsHarness { + constructor() { + this.entryPath = + process.env.NETWORK_DEBUGGER_E2E_ENTRY_ESM ?? resolve(PACKAGE_DIRECTORY, 'dist/index.mjs') + this.fixturePath = resolve(DIRECTORY, 'fixtures/consumer.mjs') + this.messages = [] + this.stdout = '' + this.stderr = '' + this.closed = false + this.keepArtifacts = false + } + + async start() { + await access(this.entryPath).catch(() => { + throw new Error( + `Built package entry is missing at ${this.entryPath}. ` + + 'Run `pnpm --filter node-network-devtools build` before this suite.' + ) + }) + this.temporaryDirectory = await mkdtemp( + join(tmpdir(), 'node-network-devtools-enhancements-e2e-') + ) + this.sessionDirectory = join(this.temporaryDirectory, 'session') + this.origin = await startEnhancementsOrigin() + + const child = spawn(process.execPath, [this.fixturePath], { + cwd: PACKAGE_DIRECTORY, + env: { + ...process.env, + NETWORK_DEBUGGER_E2E_ENTRY: this.entryPath, + NETWORK_DEBUGGER_E2E_ORIGIN: this.origin.baseUrl, + NETWORK_DEBUGGER_E2E_SESSION_DIR: this.sessionDirectory + }, + stdio: ['ignore', 'pipe', 'pipe', 'ipc'] + }) + this.child = child + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => (this.stdout += chunk)) + child.stderr.on('data', (chunk) => (this.stderr += chunk)) + child.on('message', (message) => this.messages.push(message)) + + const ready = await this.waitForMessage((message) => message?.type === 'ready') + this.targetPid = ready.pid + this.sessionInfo = ready.sessionInfo + if (this.sessionInfo?.mode !== 'legacy') { + throw new Error(`Enhancements consumer selected ${this.sessionInfo?.mode ?? 'no backend'}`) + } + const target = this.sessionInfo.target + if (!/^ws:\/\/127\.0\.0\.1:\d+\//.test(target?.webSocketDebuggerUrl ?? '')) { + throw new Error(`Expected a real loopback CDP target: ${JSON.stringify(target)}`) + } + + const discovery = await fetchJson(target.discoveryUrl) + if (!Array.isArray(discovery) || !discovery.some((item) => item.id === target.id)) { + throw new Error(`Target ${target.id} is absent from /json/list`) + } + this.discovery = discovery + + this.client = new CdpClient(target.webSocketDebuggerUrl) + await this.client.connect() + this.networkEnable = await this.client.command('Network.enable') + return this + } + + createToken(prefix) { + return `${prefix}-${randomUUID()}` + } + + url(pathname, token) { + const url = new URL(pathname, this.origin.baseUrl) + url.searchParams.set('token', token) + return url.href + } + + command(type, payload = {}, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const id = randomUUID() + const response = this.waitForMessage( + (message) => message?.type === 'command-result' && message.id === id, + { timeoutMs } + ) + return new Promise((resolvePromise, reject) => { + this.child.send({ type, id, ...payload }, (error) => { + if (error) reject(error) + else resolvePromise() + }) + }) + .then(() => response) + .then((message) => { + if (!message.ok) throw new Error(`Enhancements command ${type} failed:\n${message.error}`) + return message.result + }) + } + + run(scenario, payload = {}) { + return this.command('run', { scenario, ...payload }) + } + + finalize() { + return this.command('finalize', {}, { timeoutMs: 30_000 }) + } + + waitForMessage(predicate, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const existing = this.messages.find(predicate) + if (existing) return Promise.resolve(existing) + if (this.child?.exitCode !== null || this.child?.signalCode !== null) { + return Promise.reject( + new Error( + `Enhancements consumer already exited ` + + `(code=${this.child?.exitCode}, signal=${this.child?.signalCode}).\n${this.stderr}` + ) + ) + } + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject( + new Error( + `Timed out after ${timeoutMs}ms waiting for consumer IPC. stderr:\n${this.stderr}` + ) + ) + }, timeoutMs) + const onMessage = (message) => { + if (!predicate(message)) return + cleanup() + resolvePromise(message) + } + const onExit = (code, signal) => { + cleanup() + reject( + new Error( + `Enhancements consumer exited while waiting for IPC ` + + `(code=${code}, signal=${signal}).\n${this.stderr}` + ) + ) + } + const cleanup = () => { + clearTimeout(timer) + this.child.off('message', onMessage) + this.child.off('exit', onExit) + } + this.child.on('message', onMessage) + this.child.once('exit', onExit) + }) + } + + async preserveFailure(error) { + this.keepArtifacts = true + if (!this.temporaryDirectory) return undefined + await mkdir(this.temporaryDirectory, { recursive: true }) + await Promise.all([ + this.client?.writeJournal(join(this.temporaryDirectory, 'raw-cdp.ndjson')), + writeFile(join(this.temporaryDirectory, 'consumer.stdout.log'), this.stdout, 'utf8'), + writeFile(join(this.temporaryDirectory, 'consumer.stderr.log'), this.stderr, 'utf8'), + writeFile( + join(this.temporaryDirectory, 'consumer-messages.ndjson'), + this.messages.map((message) => JSON.stringify(message)).join('\n') + '\n', + 'utf8' + ), + writeFile( + join(this.temporaryDirectory, 'origin.ndjson'), + (this.origin?.records ?? []).map((record) => JSON.stringify(record)).join('\n') + '\n', + 'utf8' + ), + writeFile( + join(this.temporaryDirectory, 'failure.json'), + JSON.stringify( + { + error: error instanceof Error ? { message: error.message, stack: error.stack } : error, + sessionInfo: this.sessionInfo, + node: process.version, + platform: process.platform + }, + null, + 2 + ), + 'utf8' + ) + ]) + return this.temporaryDirectory + } + + async close() { + if (this.closed) return + this.closed = true + const errors = [] + + try { + await this.client?.close() + } catch (error) { + errors.push(error) + } + + if (this.child?.connected && this.child.exitCode === null && this.child.signalCode === null) { + try { + await this.command('shutdown', {}, { timeoutMs: 6_000 }) + } catch (error) { + errors.push(error) + } + } + + if (this.child && this.child.exitCode === null && this.child.signalCode === null) { + try { + await waitForExit(this.child, 3_000, 'enhancements consumer to exit') + } catch (error) { + errors.push(error) + this.child.kill('SIGTERM') + try { + await waitForExit(this.child, 2_000, 'enhancements consumer to terminate') + } catch (terminationError) { + errors.push(terminationError) + this.child.kill('SIGKILL') + } + } + } + + try { + await this.origin?.close() + } catch (error) { + errors.push(error) + } + + if (errors.length) this.keepArtifacts = true + if (!this.keepArtifacts && this.temporaryDirectory) { + await rm(this.temporaryDirectory, { recursive: true, force: true }) + } + if (errors.length) { + throw new AggregateError(errors, 'Failed to clean up enhancements E2E harness') + } + } +} + +export async function withEnhancementsHarness(testContext, callback) { + const harness = new EnhancementsHarness() + testContext.after(async () => { + try { + await harness.close() + } catch (error) { + const directory = await harness.preserveFailure(error).catch(() => undefined) + if (directory) console.error(`Enhancements cleanup failure artifacts: ${directory}`) + throw error + } + }) + + try { + await harness.start() + return await callback(harness) + } catch (error) { + const directory = await harness.preserveFailure(error).catch(() => undefined) + if (directory) { + console.error(`Enhancements E2E failure artifacts: ${directory}`) + if (error instanceof Error) error.message += `\nFailure artifacts: ${directory}` + } + throw error + } +} + +export async function runNativeMockConflictConsumer() { + const entryPath = + process.env.NETWORK_DEBUGGER_E2E_ENTRY_ESM ?? resolve(PACKAGE_DIRECTORY, 'dist/index.mjs') + await access(entryPath) + const fixturePath = resolve(DIRECTORY, 'fixtures/native-mock-conflict.mjs') + const child = spawn(process.execPath, [fixturePath], { + cwd: PACKAGE_DIRECTORY, + env: { ...process.env, NETWORK_DEBUGGER_E2E_ENTRY: entryPath }, + stdio: ['ignore', 'pipe', 'pipe'] + }) + let stdout = '' + let stderr = '' + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => (stdout += chunk)) + child.stderr.on('data', (chunk) => (stderr += chunk)) + const exit = await waitForExit(child, DEFAULT_TIMEOUT_MS, 'Native plus Mock consumer') + return { ...exit, stdout, stderr } +} diff --git a/packages/network-debugger/test/e2e/enhancements/enhancements.test.mjs b/packages/network-debugger/test/e2e/enhancements/enhancements.test.mjs new file mode 100644 index 0000000..e9c85aa --- /dev/null +++ b/packages/network-debugger/test/e2e/enhancements/enhancements.test.mjs @@ -0,0 +1,272 @@ +import assert from 'node:assert/strict' +import { createHash } from 'node:crypto' +import { readFile } from 'node:fs/promises' +import { resolve } from 'node:path' +import test from 'node:test' + +import { runNativeMockConflictConsumer, withEnhancementsHarness } from './enhancements-harness.mjs' +import { BINARY_BODY } from './fixtures/origin-server.mjs' + +const TEST_TIMEOUT_MS = 60_000 +const TRACEPARENT = '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' +const TRACESTATE = 'vendor=value' + +function entryForUrl(har, url) { + const entry = har.log.entries.find((candidate) => candidate.request.url === url) + assert.ok(entry, `HAR entry is missing for ${url}`) + return entry +} + +function indexedRequestForUrl(manifest, url) { + const entry = Object.values(manifest.requestIndex).find( + (candidate) => candidate.request?.url === url + ) + assert.ok(entry, `Session request index is missing ${url}`) + return entry +} + +test( + 'records real Legacy traffic, exports HAR, replays, mocks, and correlates trace context', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withEnhancementsHarness(t, async (harness) => { + assert.equal(harness.networkEnable.request.id, harness.networkEnable.response.id) + assert.deepEqual(harness.networkEnable.result, {}) + + const traceToken = harness.createToken('trace') + const binaryToken = harness.createToken('binary') + const plainToken = harness.createToken('plain') + const postToken = harness.createToken('post') + const mockHttpToken = harness.createToken('mock-http') + const mockFetchToken = harness.createToken('mock-fetch') + const urls = { + trace: harness.url('/text', traceToken), + binary: harness.url('/binary', binaryToken), + plain: harness.url('/plain', plainToken), + post: harness.url('/post', postToken), + mockHttp: harness.url('/mock-http', mockHttpToken), + mockFetch: harness.url('/mock-fetch', mockFetchToken) + } + const postBody = `replay-post:${postToken}:正文` + + const traceResult = await harness.run('http-text', { + url: urls.trace, + headers: { traceparent: TRACEPARENT, tracestate: TRACESTATE } + }) + const binaryResult = await harness.run('http-binary', { url: urls.binary }) + const plainResult = await harness.run('http-plain', { url: urls.plain }) + const postResult = await harness.run('fetch-post', { + url: urls.post, + headers: { 'content-type': 'text/plain; charset=utf-8' }, + body: postBody + }) + const mockHttpResult = await harness.run('mock-http', { url: urls.mockHttp }) + const mockFetchResult = await harness.run('mock-fetch', { + url: urls.mockFetch, + headers: { + 'content-type': 'text/plain; charset=utf-8', + 'x-mock-match': 'fetch' + }, + body: 'mock-fetch-request' + }) + + assert.equal(traceResult.result.status, 200) + assert.equal( + Buffer.from(traceResult.result.bodyBase64, 'base64').toString('utf8'), + `session-text:${traceToken}:你好` + ) + assert.deepEqual(Buffer.from(binaryResult.result.bodyBase64, 'base64'), BINARY_BODY) + assert.equal(plainResult.result.status, 200) + assert.equal(postResult.result.status, 201) + assert.equal(JSON.parse(postResult.result.body).requestBody, postBody) + assert.equal(mockHttpResult.result.status, 207) + assert.equal(mockHttpResult.result.headers['x-mock-kind'], 'http') + assert.equal( + Buffer.from(mockHttpResult.result.bodyBase64, 'base64').toString('utf8'), + 'legacy-http-mock-body' + ) + assert.equal(mockFetchResult.result.status, 202) + assert.equal(mockFetchResult.result.headers['x-mock-kind'], 'fetch') + assert.equal(mockFetchResult.result.body, 'legacy-fetch-mock-body') + + for (const result of [ + traceResult, + binaryResult, + plainResult, + postResult, + mockHttpResult, + mockFetchResult + ]) { + assert.equal(result.terminalMethod, 'Network.loadingFinished') + assert.equal(typeof result.requestId, 'string') + assert.ok(result.requestId.length > 0) + } + for (const url of Object.values(urls)) { + assert.equal( + harness.client.findEvents( + 'Network.requestWillBeSent', + (params) => params.request?.url === url + ).length, + 1, + `independent raw CDP client did not observe ${url}` + ) + } + + // Mocked calls are real http.request/fetch invocations, but the loopback + // origin must prove neither call escaped the Legacy mock layer. + assert.equal( + harness.origin.records.some( + (record) => record.pathname === '/mock-http' || record.pathname === '/mock-fetch' + ), + false + ) + + const finalized = await harness.finalize() + const manifest = JSON.parse( + await readFile(resolve(harness.sessionDirectory, 'manifest.json'), 'utf8') + ) + const eventText = await readFile(resolve(harness.sessionDirectory, 'events.ndjson'), 'utf8') + const events = eventText + .trim() + .split('\n') + .filter(Boolean) + .map((line) => JSON.parse(line)) + const har = JSON.parse(await readFile(finalized.harPath, 'utf8')) + + assert.equal(manifest.schemaVersion, 1) + assert.equal(manifest.state, 'completed') + assert.equal(manifest.target.id, harness.sessionInfo.target.id) + assert.equal(manifest.stats.requestCount, 6) + assert.equal(manifest.stats.bodyCount, 6) + assert.equal(manifest.stats.bodyErrorCount, 0) + assert.equal(manifest.stats.failedRequestCount, 0) + assert.equal(manifest.issues.length, 0) + assert.equal(events.length, manifest.stats.eventCount) + assert.ok(events.length >= 18) + events.forEach((event, index) => { + assert.equal(event.schemaVersion, 1) + assert.equal(event.sequence, index + 1) + assert.equal(typeof event.recordedAt, 'string') + }) + assert.equal( + events.some( + (event) => + event.method === 'Network.requestWillBeSent' && + event.params?.request?.url === urls.trace + ), + true + ) + assert.equal( + events.some((event) => event.method.startsWith('Network.webSocket')), + false, + 'the Session tap must not record its own CDP WebSocket transport' + ) + assert.equal( + Object.values(manifest.requestIndex).some((request) => + request.request?.url?.startsWith('ws://127.0.0.1:') + ), + false, + 'the Session tap must not appear in the request index' + ) + + for (const bodyIndex of Object.values(manifest.bodyIndex)) { + const bytes = await readFile(resolve(harness.sessionDirectory, bodyIndex.path)) + assert.equal(bytes.byteLength, bodyIndex.byteLength) + assert.equal(createHash('sha256').update(bytes).digest('hex'), bodyIndex.sha256) + } + + assert.equal(har.log.version, '1.2') + assert.equal(har.log.entries.length, 6) + const textEntry = entryForUrl(har, urls.trace) + assert.equal(textEntry.response.content.text, `session-text:${traceToken}:你好`) + assert.equal(textEntry.response.content.encoding, undefined) + const binaryEntry = entryForUrl(har, urls.binary) + assert.equal(binaryEntry.response.content.encoding, 'base64') + assert.deepEqual(Buffer.from(binaryEntry.response.content.text, 'base64'), BINARY_BODY) + const postEntry = entryForUrl(har, urls.post) + assert.equal(postEntry.request.method, 'POST') + assert.equal(postEntry.request.postData.text, postBody) + assert.equal(entryForUrl(har, urls.mockHttp).response.status, 207) + assert.equal(entryForUrl(har, urls.mockFetch).response.status, 202) + + const tracedRequest = indexedRequestForUrl(manifest, urls.trace) + assert.deepEqual(tracedRequest.trace, { + traceparent: TRACEPARENT, + version: '00', + traceId: '4bf92f3577b34da6a3ce929d0e0e4736', + parentId: '00f067aa0ba902b7', + traceFlags: '01', + sampled: true, + tracestate: TRACESTATE + }) + assert.deepEqual(manifest.traceIndex[tracedRequest.trace.traceId].requestIds, [ + tracedRequest.requestId + ]) + assert.equal(indexedRequestForUrl(manifest, urls.plain).trace, undefined) + assert.equal(entryForUrl(har, urls.trace)._trace.traceparent, TRACEPARENT) + assert.equal(entryForUrl(har, urls.plain)._trace, undefined) + + assert.equal(finalized.dryRun.dryRun, true) + assert.equal(finalized.dryRun.requests.length, 6) + assert.equal(finalized.dryRun.succeeded, 6) + assert.equal(finalized.dryRun.failed, 0) + assert.equal( + finalized.dryRun.results.every((result) => result.dryRun && result.ok), + true + ) + assert.equal(finalized.realReplay.dryRun, false) + assert.equal(finalized.realReplay.requests.length, 6) + assert.equal(finalized.realReplay.succeeded, 6) + assert.equal(finalized.realReplay.failed, 0) + assert.equal( + finalized.realReplay.results.every((result) => !result.dryRun && result.ok), + true + ) + + // Four non-mocked requests hit once while recording and once during real + // HAR replay. Header evidence proves trace correlation did not inject a + // traceparent into unrelated requests. + for (const token of [traceToken, binaryToken, plainToken, postToken]) { + assert.equal( + harness.origin.records.filter((record) => record.token === token).length, + 2, + `expected original plus replay traffic for ${token}` + ) + } + assert.equal( + harness.origin.records.some( + (record) => record.pathname === '/mock-http' || record.pathname === '/mock-fetch' + ), + false + ) + for (const record of harness.origin.records.filter((record) => record.token === traceToken)) { + assert.equal(record.headers.traceparent, TRACEPARENT) + assert.equal(record.headers.tracestate, TRACESTATE) + } + for (const record of harness.origin.records.filter((record) => record.token === plainToken)) { + assert.equal(record.headers.traceparent, undefined) + assert.equal(record.headers.tracestate, undefined) + } + for (const record of harness.origin.records.filter((record) => record.token === postToken)) { + assert.equal(Buffer.from(record.bodyBase64, 'base64').toString('utf8'), postBody) + } + }) + } +) + +test( + 'built consumer rejects Native plus Legacy Mock with a stable conflict', + { timeout: TEST_TIMEOUT_MS }, + async () => { + const result = await runNativeMockConflictConsumer() + assert.equal(result.code, 0, result.stderr) + assert.equal(result.signal, null) + const lines = result.stdout.trim().split('\n').filter(Boolean) + const error = JSON.parse(lines.at(-1)) + assert.equal(error.name, 'RuntimeRegistrationError') + assert.equal(error.code, 'NND_NATIVE_MOCK_CONFLICT') + assert.match(error.message, /only with the Legacy backend/i) + assert.equal(error.details.mode, 'native') + assert.equal(error.details.mockRuleCount, 1) + } +) diff --git a/packages/network-debugger/test/e2e/enhancements/fixtures/consumer.mjs b/packages/network-debugger/test/e2e/enhancements/fixtures/consumer.mjs new file mode 100644 index 0000000..253d91c --- /dev/null +++ b/packages/network-debugger/test/e2e/enhancements/fixtures/consumer.mjs @@ -0,0 +1,202 @@ +import http from 'node:http' +import { pathToFileURL } from 'node:url' + +const entryPath = process.env.NETWORK_DEBUGGER_E2E_ENTRY +const originBaseUrl = process.env.NETWORK_DEBUGGER_E2E_ORIGIN +const sessionDirectory = process.env.NETWORK_DEBUGGER_E2E_SESSION_DIR + +if (!entryPath) throw new Error('NETWORK_DEBUGGER_E2E_ENTRY is required') +if (!originBaseUrl) throw new Error('NETWORK_DEBUGGER_E2E_ORIGIN is required') +if (!sessionDirectory) throw new Error('NETWORK_DEBUGGER_E2E_SESSION_DIR is required') + +const api = await import(pathToFileURL(entryPath).href) +for (const name of ['register', 'SessionRecorder', 'exportHar', 'replay']) { + if (api[name] === undefined) throw new Error(`No public ${name} export found at ${entryPath}`) +} + +const mockRules = [ + { + id: 'e2e-http-mock', + match: { url: `${originBaseUrl}/mock-http*`, method: 'GET' }, + response: { + status: 207, + statusText: 'Mock HTTP', + headers: { 'content-type': 'text/plain; charset=utf-8', 'x-mock-kind': 'http' }, + body: 'legacy-http-mock-body' + } + }, + { + id: 'e2e-fetch-mock', + match: { + url: `${originBaseUrl}/mock-fetch*`, + method: 'POST', + headers: { 'x-mock-match': 'fetch' } + }, + response: { + status: 202, + statusText: 'Mock Fetch', + headers: { 'content-type': 'text/plain; charset=utf-8', 'x-mock-kind': 'fetch' }, + body: 'legacy-fetch-mock-body' + } + } +] + +const registration = api.register({ + mode: 'legacy', + devtools: { open: false }, + legacy: { serverPort: 0, mock: mockRules } +}) +const ready = await registration.ready +if (ready.mode !== 'legacy') throw new Error(`Expected Legacy, received ${ready.mode}`) + +const recorder = await api.SessionRecorder.start({ + directory: sessionDirectory, + target: ready.target +}) + +function send(message) { + return new Promise((resolve, reject) => { + if (!process.send) { + reject(new Error('Enhancements consumer lost its IPC channel')) + return + } + process.send(message, (error) => (error ? reject(error) : resolve())) + }) +} + +function httpRequest(url, { method = 'GET', headers = {}, body } = {}) { + return new Promise((resolve, reject) => { + const request = http.request(url, { method, headers }, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + resolve({ + status: response.statusCode, + statusText: response.statusMessage, + headers: response.headers, + bodyBase64: Buffer.concat(chunks).toString('base64') + }) + }) + }) + request.once('error', reject) + request.end(body) + }) +} + +function waitForTerminal(url, operation, timeoutMs = 10_000) { + let requestId + let unsubscribe = () => {} + let timer + const terminal = new Promise((resolve, reject) => { + timer = setTimeout(() => { + unsubscribe() + reject(new Error(`Timed out waiting for a recorded lifecycle: ${url}`)) + }, timeoutMs) + unsubscribe = recorder.tap.onEvent((event) => { + if (event.method === 'Network.requestWillBeSent' && event.params?.request?.url === url) { + requestId = event.params.requestId + return + } + if (!requestId || event.params?.requestId !== requestId) return + if (event.method === 'Network.loadingFailed') { + clearTimeout(timer) + unsubscribe() + reject( + new Error( + `Recorded request failed for ${url}: ${event.params?.errorText ?? 'unknown error'}` + ) + ) + } else if (event.method === 'Network.loadingFinished') { + clearTimeout(timer) + unsubscribe() + resolve({ requestId, terminalMethod: event.method }) + } + }) + }) + + return Promise.all([Promise.resolve().then(operation), terminal]).then(([result, lifecycle]) => ({ + result, + ...lifecycle + })) +} + +async function runScenario(message) { + const url = message.url + switch (message.scenario) { + case 'http-text': + case 'http-binary': + case 'http-plain': + case 'mock-http': + return waitForTerminal(url, () => httpRequest(url, { headers: message.headers ?? {} })) + case 'fetch-post': + case 'mock-fetch': + return waitForTerminal(url, async () => { + const response = await fetch(url, { + method: 'POST', + headers: message.headers ?? {}, + body: message.body + }) + return { + status: response.status, + statusText: response.statusText, + headers: Object.fromEntries(response.headers), + body: await response.text() + } + }) + default: + throw new Error(`Unknown enhancements E2E scenario: ${message.scenario}`) + } +} + +let finalized = false +async function finalizeSession() { + if (finalized) throw new Error('Enhancements session was already finalized') + finalized = true + await recorder.close() + const exported = await api.exportHar(sessionDirectory) + const dryRun = await api.replay(sessionDirectory, { dryRun: true }) + const realReplay = await api.replay(exported.outputPath, { timeoutMs: 5_000 }) + return { + manifest: recorder.getManifest(), + harPath: exported.outputPath, + dryRun, + realReplay + } +} + +async function shutdown() { + if (!finalized) await recorder.close() + await registration.dispose() +} + +if (!process.send) throw new Error('Enhancements consumer must be started with process IPC') + +const onMessage = async (message) => { + if (!message || typeof message !== 'object' || typeof message.id !== 'string') return + try { + let result + if (message.type === 'run') result = await runScenario(message) + else if (message.type === 'finalize') result = await finalizeSession() + else if (message.type === 'shutdown') { + process.off('message', onMessage) + await shutdown() + await send({ type: 'command-result', id: message.id, ok: true, result: {} }) + process.disconnect() + return + } else { + throw new Error(`Unknown enhancements E2E command: ${message.type}`) + } + await send({ type: 'command-result', id: message.id, ok: true, result }) + } catch (error) { + await send({ + type: 'command-result', + id: message.id, + ok: false, + error: error instanceof Error ? error.stack : String(error) + }) + } +} + +process.on('message', onMessage) +await send({ type: 'ready', pid: process.pid, sessionInfo: ready }) diff --git a/packages/network-debugger/test/e2e/enhancements/fixtures/native-mock-conflict.mjs b/packages/network-debugger/test/e2e/enhancements/fixtures/native-mock-conflict.mjs new file mode 100644 index 0000000..928ab4c --- /dev/null +++ b/packages/network-debugger/test/e2e/enhancements/fixtures/native-mock-conflict.mjs @@ -0,0 +1,28 @@ +import { pathToFileURL } from 'node:url' + +const entryPath = process.env.NETWORK_DEBUGGER_E2E_ENTRY +if (!entryPath) throw new Error('NETWORK_DEBUGGER_E2E_ENTRY is required') + +const { register } = await import(pathToFileURL(entryPath).href) +try { + register({ + mode: 'native', + legacy: { + mock: [{ match: { url: 'http://127.0.0.1/*' }, response: { body: 'nope' } }] + } + }) + throw new Error('Native plus Mock unexpectedly registered') +} catch (error) { + const result = { + name: error?.name, + code: error?.code, + message: error?.message, + details: error?.details + } + if (result.code !== 'NND_NATIVE_MOCK_CONFLICT') { + console.error(JSON.stringify(result)) + process.exitCode = 1 + } else { + console.log(JSON.stringify(result)) + } +} diff --git a/packages/network-debugger/test/e2e/enhancements/fixtures/origin-server.mjs b/packages/network-debugger/test/e2e/enhancements/fixtures/origin-server.mjs new file mode 100644 index 0000000..6fe9b14 --- /dev/null +++ b/packages/network-debugger/test/e2e/enhancements/fixtures/origin-server.mjs @@ -0,0 +1,124 @@ +import http from 'node:http' + +export const BINARY_BODY = Buffer.from([0x00, 0x01, 0x02, 0x7f, 0x80, 0xfe, 0xff, 0x42]) + +async function readBody(request) { + const chunks = [] + for await (const chunk of request) chunks.push(Buffer.from(chunk)) + return Buffer.concat(chunks) +} + +function closeServer(server, sockets) { + return new Promise((resolve, reject) => { + server.close((error) => { + if (error && error.code !== 'ERR_SERVER_NOT_RUNNING') reject(error) + else resolve() + }) + for (const socket of sockets) socket.destroy() + }) +} + +/** A real loopback origin. IPC remains the test-control plane. */ +export async function startEnhancementsOrigin() { + const sockets = new Set() + const records = [] + + const server = http.createServer(async (request, response) => { + const url = new URL(request.url, `http://${request.headers.host ?? '127.0.0.1'}`) + const body = await readBody(request) + const token = url.searchParams.get('token') ?? '' + records.push({ + sequence: records.length + 1, + method: request.method, + url: url.href, + pathname: url.pathname, + token, + headers: { ...request.headers }, + bodyBase64: body.toString('base64') + }) + + if (url.pathname === '/text') { + const result = `session-text:${token}:你好` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(result), + 'x-origin': 'enhancements' + }) + response.end(result) + return + } + + if (url.pathname === '/binary') { + response.writeHead(200, { + 'content-type': 'application/octet-stream', + 'content-length': BINARY_BODY.length, + 'x-origin': 'enhancements' + }) + response.end(BINARY_BODY) + return + } + + if (url.pathname === '/plain') { + const result = `plain-response:${token}` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(result), + 'x-origin': 'enhancements' + }) + response.end(result) + return + } + + if (url.pathname === '/post') { + const result = JSON.stringify({ token, requestBody: body.toString('utf8') }) + response.writeHead(201, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(result), + 'x-origin': 'enhancements' + }) + response.end(result) + return + } + + // These paths are deliberately real and observable. A matching Legacy + // mock must prevent them from ever reaching this handler. + if (url.pathname === '/mock-http' || url.pathname === '/mock-fetch') { + response.writeHead(418, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('mock unexpectedly reached the origin') + return + } + + response.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('not found') + }) + + server.on('connection', (socket) => { + sockets.add(socket) + socket.once('close', () => sockets.delete(socket)) + }) + + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) + + const address = server.address() + if (!address || typeof address === 'string') { + await closeServer(server, sockets) + throw new Error('Enhancements origin did not expose a TCP address') + } + + let closed = false + return { + baseUrl: `http://127.0.0.1:${address.port}`, + records, + async close() { + if (closed) return + closed = true + await closeServer(server, sockets) + } + } +} diff --git a/packages/network-debugger/test/e2e/fixtures/native-target.mjs b/packages/network-debugger/test/e2e/fixtures/native-target.mjs new file mode 100644 index 0000000..b10c8b4 --- /dev/null +++ b/packages/network-debugger/test/e2e/fixtures/native-target.mjs @@ -0,0 +1,159 @@ +import http from 'node:http' +import https from 'node:https' + +const entryUrl = process.env.NETWORK_DEBUGGER_E2E_ENTRY +if (!entryUrl) throw new Error('NETWORK_DEBUGGER_E2E_ENTRY is required') +if (!process.send) throw new Error('Native E2E target must be started with an IPC channel') + +const originalNetworkFunctions = { + fetch: globalThis.fetch, + httpRequest: http.request, + httpsRequest: https.request +} + +const { register } = await import(entryUrl) +if (typeof register !== 'function') + throw new Error(`No public register() export found at ${entryUrl}`) + +const handle = register({ + mode: 'native', + autoOpenDevtool: false, + ...(process.env.NETWORK_DEBUGGER_E2E_SESSION_DIR + ? { + session: { + directory: process.env.NETWORK_DEBUGGER_E2E_SESSION_DIR, + har: true + } + } + : {}) +}) + +if (typeof handle !== 'function' || !handle.ready || typeof handle.dispose !== 'function') { + throw new Error('register({ mode: "native" }) did not return the public callable session handle') +} + +const sessionInfo = await handle.ready +if (sessionInfo.mode !== 'native') { + throw new Error(`Expected native adapter, received ${sessionInfo.mode}`) +} + +function send(message) { + return new Promise((resolve, reject) => { + process.send(message, (error) => (error ? reject(error) : resolve())) + }) +} + +function performHttpGet(url, token) { + return new Promise((resolve, reject) => { + const request = http.get(url, { headers: { 'x-e2e-token': token } }, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + resolve({ + status: response.statusCode, + body: Buffer.concat(chunks).toString('utf8') + }) + }) + }) + request.once('error', reject) + }) +} + +async function performFetchPost(url, token) { + const requestBody = `fetch-request:${token}` + const request = new Request(url, { + method: 'POST', + headers: { + 'content-type': 'text/plain; charset=utf-8', + 'x-e2e-token': token + }, + body: requestBody + }) + const response = await fetch(request) + return { + status: response.status, + body: await response.text(), + requestBody + } +} + +async function performFailedRequest(url, token) { + try { + await performHttpGet(url, token) + } catch (error) { + return { failed: true, error: String(error) } + } + throw new Error('Expected the reset endpoint to fail the HTTP request') +} + +async function runScenario(message) { + switch (message.scenario) { + case 'http': + return performHttpGet(message.url, message.token) + case 'fetch': + return performFetchPost(message.url, message.token) + case 'failed': + return performFailedRequest(message.url, message.token) + default: + throw new Error(`Unknown E2E scenario: ${message.scenario}`) + } +} + +process.on('message', async (message) => { + if (message?.type === 'run') { + try { + const result = await runScenario(message) + await send({ type: 'scenario-result', id: message.id, ok: true, result }) + } catch (error) { + await send({ + type: 'scenario-result', + id: message.id, + ok: false, + error: error instanceof Error ? error.stack : String(error) + }) + } + return + } + + if (message?.type === 'finalize-session') { + try { + await handle.dispose() + await send({ + type: 'session-finalized', + id: message.id, + ok: true, + result: sessionInfo.session + }) + } catch (error) { + await send({ + type: 'session-finalized', + id: message.id, + ok: false, + error: error instanceof Error ? error.stack : String(error) + }) + } + return + } + + if (message?.type === 'shutdown') { + try { + await handle.dispose() + await send({ type: 'shutdown-complete' }) + } finally { + process.removeAllListeners('message') + process.disconnect() + } + } +}) + +await send({ + type: 'ready', + pid: process.pid, + sessionInfo, + nativeFunctionsUnchanged: { + fetch: globalThis.fetch === originalNetworkFunctions.fetch, + httpRequest: http.request === originalNetworkFunctions.httpRequest, + httpsRequest: https.request === originalNetworkFunctions.httpsRequest + } +}) diff --git a/packages/network-debugger/test/e2e/fixtures/origin-server.mjs b/packages/network-debugger/test/e2e/fixtures/origin-server.mjs new file mode 100644 index 0000000..984d2c5 --- /dev/null +++ b/packages/network-debugger/test/e2e/fixtures/origin-server.mjs @@ -0,0 +1,82 @@ +import http from 'node:http' + +async function readRequestBody(request) { + const chunks = [] + for await (const chunk of request) chunks.push(Buffer.from(chunk)) + return Buffer.concat(chunks).toString('utf8') +} + +function closeServer(server, sockets) { + return new Promise((resolve, reject) => { + server.close((error) => (error ? reject(error) : resolve())) + for (const socket of sockets) socket.destroy() + }) +} + +export async function startOriginServer() { + const sockets = new Set() + const server = http.createServer(async (request, response) => { + const url = new URL(request.url, 'http://127.0.0.1') + const token = url.searchParams.get('token') ?? '' + + try { + if (url.pathname === '/http') { + const body = `http-response:${token}` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-e2e-token': token + }) + response.end(body) + return + } + + if (url.pathname === '/fetch') { + const requestBody = await readRequestBody(request) + const body = JSON.stringify({ token, requestBody }) + response.writeHead(201, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-e2e-token': token + }) + response.end(body) + return + } + + if (url.pathname === '/reset') { + request.socket.destroy(new Error(`intentional reset for ${token}`)) + return + } + + response.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('not found') + } catch (error) { + if (!response.headersSent) response.writeHead(500) + response.end(String(error)) + } + }) + + server.on('connection', (socket) => { + sockets.add(socket) + socket.once('close', () => sockets.delete(socket)) + }) + + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) + + const address = server.address() + if (!address || typeof address === 'string') { + await closeServer(server, sockets) + throw new Error('Origin fixture did not expose a TCP address') + } + + return { + baseUrl: `http://127.0.0.1:${address.port}`, + close: () => closeServer(server, sockets) + } +} diff --git a/packages/network-debugger/test/e2e/frontend/README.md b/packages/network-debugger/test/e2e/frontend/README.md new file mode 100644 index 0000000..6cd05f9 --- /dev/null +++ b/packages/network-debugger/test/e2e/frontend/README.md @@ -0,0 +1,76 @@ +# Official DevTools frontend smoke + +This test uses the official DevTools frontend bundled with the Chromium revision pinned by +`@playwright/test@1.62.1` (Playwright Chromium build 1234 / Chrome for Testing 151.0.7922.34). +The Chromium remote-debugging server hosts that exact build locally, and both Native and Legacy +smokes open: + +```text +http:///devtools/js_app.html?experiments=true&v8only=true&ws=&hl=en-US +``` + +The browser serves `/devtools/js_app.html`, its generated entrypoints, and model modules itself; +there is no copied or third-party frontend. Chromium is launched with external networking disabled +and the frontend, target, and origin all use bundled assets or `127.0.0.1`, so the test requires no +internet access. +The test also records frontend resource requests and WebSockets and fails if any use a non-loopback +host. + +The pinned frontend model API used by the smoke is deliberately small: + +```js +const Logs = await import('./models/logs/logs.js') +const requests = Logs.NetworkLog.NetworkLog.instance().requests() +const content = await request.requestContentData() + +const SDK = await import('./core/sdk/sdk.js') +const target = SDK.TargetManager.TargetManager.instance().primaryPageTarget() +``` + +Each smoke performs the request/body assertion twice: once after the initial connection, then again +after reloading the frontend and confirming that it recreated one active `node` target. Both +requests carry different generated tokens. The Legacy smoke starts the built public package with +forced Legacy and `serverPort: 0`, connects through its standard discovered target, and keeps two +additional raw CDP clients connected. Those clients deliberately issue different commands with the +same numeric command id, proving that a successful body response and an unknown-method error are +returned only to their issuing connections while the official frontend also requests the body. + +`chrome-devtools-frontend@1.0.1684555` was evaluated but cannot be served directly: its npm +tarball contains TypeScript sources and `front_end/entrypoint_template.html`, but no generated +`js_app.html`, JavaScript entrypoint, or generated CSS modules. Building it requires Chromium's +GN/depot_tools toolchain. The Playwright Chromium bundle is therefore the reproducible runnable +frontend pin for this test; an old third-party prebuilt package must not be substituted. + +Run after building the package and installing Playwright Chromium: + +```sh +pnpm --filter node-network-devtools build +pnpm exec playwright install chromium +pnpm exec playwright test -c test/e2e/frontend/playwright.config.mjs +``` + +Run only the forced-Legacy smoke with: + +```sh +pnpm exec playwright test -c test/e2e/frontend/playwright.config.mjs legacy-frontend.spec.mjs +``` + +Suggested package script: + +```json +"test:e2e:frontend": "playwright test -c test/e2e/frontend/playwright.config.mjs" +``` + +CI should install the pinned browser before the offline test phase with +`pnpm exec playwright install --with-deps chromium`, build `node-network-devtools`, run this script +on the Node version that provides `--experimental-network-inspection`, and upload +`NETWORK_DEBUGGER_E2E_ARTIFACT_DIR` with `if: always()`. + +The Legacy smoke attaches a full-page screenshot, Playwright trace, browser/frontend logs, metadata, +and both raw-client CDP journals on success. On failure both smokes attach the same frontend evidence +plus target logs and the primary CDP NDJSON journal. + +The Chromium asset server has no `/favicon.ico`; that one exact local 404 is ignored. Known failures +of optional Network commands not implemented by Node Native are allowlisted only for the Native +smoke. Legacy owns its CDP implementation and has no protocol-error allowlist. Every other frontend +console error, page error, renderer crash, or non-loopback connection fails either smoke. diff --git a/packages/network-debugger/test/e2e/frontend/chromium-devtools.mjs b/packages/network-debugger/test/e2e/frontend/chromium-devtools.mjs new file mode 100644 index 0000000..b05daac --- /dev/null +++ b/packages/network-debugger/test/e2e/frontend/chromium-devtools.mjs @@ -0,0 +1,485 @@ +import { spawn } from 'node:child_process' +import { randomUUID } from 'node:crypto' +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { join } from 'node:path' + +import { chromium } from '@playwright/test' + +const DEFAULT_TIMEOUT_MS = 10_000 + +// Node's native Network backend does not implement these optional Chromium +// commands yet. The official frontend reports them through console.error while +// continuing to operate normally; every other frontend error remains fatal. +const EXPECTED_PROTOCOL_ERRORS = { + native: [ + /^Request Network\.(?:configureDurableMessages|setAttachDebugStack|setBlockedURLs|emulateNetworkConditionsByRule|overrideNetworkState|clearAcceptedEncodingsOverride) failed\./ + ], + // Legacy owns its CDP implementation, so frontend compatibility errors are + // product failures rather than runtime limitations. + legacy: [] +} + +function waitForExit(child, timeoutMs = 5_000) { + if (child.exitCode !== null || child.signalCode !== null) return Promise.resolve() + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error(`Chromium did not exit within ${timeoutMs}ms`)) + }, timeoutMs) + const onExit = () => { + cleanup() + resolve() + } + const cleanup = () => { + clearTimeout(timer) + child.off('exit', onExit) + } + child.once('exit', onExit) + if (child.exitCode !== null || child.signalCode !== null) onExit() + }) +} + +function waitForBrowserWebSocket(child, output, timeoutMs = DEFAULT_TIMEOUT_MS) { + const current = output.stderr.match(/DevTools listening on (ws:\/\/[^\s]+)/)?.[1] + if (current) return Promise.resolve(current) + + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error(`Timed out waiting for Chromium CDP endpoint. stderr:\n${output.stderr}`)) + }, timeoutMs) + + const onData = () => { + const match = output.stderr.match(/DevTools listening on (ws:\/\/[^\s]+)/) + if (!match) return + cleanup() + resolve(match[1]) + } + const onExit = (code, signal) => { + cleanup() + reject( + new Error( + `Chromium exited before publishing CDP (code=${code}, signal=${signal}).\n${output.stderr}` + ) + ) + } + const onError = (error) => { + cleanup() + reject(error) + } + const cleanup = () => { + clearTimeout(timer) + child.stderr.off('data', onData) + child.off('exit', onExit) + child.off('error', onError) + } + + child.stderr.on('data', onData) + child.once('exit', onExit) + child.once('error', onError) + }) +} + +function serializeError(error) { + if (error instanceof Error) { + return { name: error.name, message: error.message, stack: error.stack } + } + return { message: String(error) } +} + +function toNdjson(values) { + return values.map((value) => JSON.stringify(value)).join('\n') + (values.length ? '\n' : '') +} + +export class ChromiumDevToolsFrontend { + constructor(inspectorUrl, { backend = 'native' } = {}) { + if (!Object.hasOwn(EXPECTED_PROTOCOL_ERRORS, backend)) { + throw new Error(`Unknown DevTools frontend backend: ${backend}`) + } + this.inspectorUrl = inspectorUrl + this.backend = backend + this.consoleMessages = [] + this.pageErrors = [] + this.crashes = [] + this.externalConnections = [] + this.browserOutput = { stdout: '', stderr: '' } + this.traceStarted = false + this.traceStopped = false + this.closed = false + } + + async start() { + this.userDataDirectory = await mkdtemp(join(tmpdir(), 'node-network-devtools-chromium-')) + const browserProcess = spawn( + chromium.executablePath(), + [ + '--headless=new', + '--remote-debugging-port=0', + `--user-data-dir=${this.userDataDirectory}`, + '--no-first-run', + '--no-default-browser-check', + '--no-sandbox', + '--no-proxy-server', + '--disable-background-networking', + '--disable-component-update', + '--disable-default-apps', + '--disable-domain-reliability', + '--disable-extensions', + '--disable-sync', + '--metrics-recording-only', + '--mute-audio', + '--host-resolver-rules=MAP * ~NOTFOUND, EXCLUDE 127.0.0.1' + ], + { stdio: ['ignore', 'pipe', 'pipe'] } + ) + this.browserProcess = browserProcess + browserProcess.stdout.setEncoding('utf8') + browserProcess.stderr.setEncoding('utf8') + browserProcess.stdout.on('data', (chunk) => { + this.browserOutput.stdout += chunk + }) + browserProcess.stderr.on('data', (chunk) => { + this.browserOutput.stderr += chunk + }) + + this.browserWebSocketUrl = await waitForBrowserWebSocket(browserProcess, this.browserOutput) + const browser = await chromium.connectOverCDP(this.browserWebSocketUrl) + this.browser = browser + this.browserVersion = browser.version() + + const [context] = browser.contexts() + if (!context) throw new Error('Chromium did not expose its default browser context') + this.context = context + await context.tracing.start({ screenshots: true, snapshots: true, sources: false }) + this.traceStarted = true + + const inspectorSocket = this.inspectorUrl.replace(/^ws:\/\//, '') + const browserEndpoint = new URL(this.browserWebSocketUrl) + // Chromium's local remote-debugging server exposes the exact official + // frontend bundled in this binary. /devtools/ is complete; /bundled/ is + // not a static asset root on this HTTP server. + this.frontendUrl = + `http://${browserEndpoint.host}/devtools/js_app.html?experiments=true&v8only=true` + + `&ws=${inspectorSocket}&hl=en-US` + + const page = await context.newPage() + this.page = page + page.on('console', (message) => { + this.consoleMessages.push({ + type: message.type(), + text: message.text(), + location: message.location() + }) + }) + page.on('pageerror', (error) => this.pageErrors.push(serializeError(error))) + page.on('crash', () => this.crashes.push({ timestamp: new Date().toISOString() })) + const recordExternalConnection = (kind, url) => { + try { + const parsed = new URL(url) + if (!['http:', 'https:', 'ws:', 'wss:'].includes(parsed.protocol)) return + if (!['127.0.0.1', 'localhost', '[::1]'].includes(parsed.hostname)) { + this.externalConnections.push({ kind, url }) + } + } catch { + this.externalConnections.push({ kind, url }) + } + } + page.on('request', (request) => recordExternalConnection('request', request.url())) + page.on('websocket', (socket) => recordExternalConnection('websocket', socket.url())) + + await page.goto(this.frontendUrl, { + waitUntil: 'domcontentloaded', + timeout: DEFAULT_TIMEOUT_MS + }) + await this.openNetworkPanel() + return this + } + + async openNetworkPanel() { + const page = this.page + const networkTab = page.getByText('Network', { exact: true }).first() + await networkTab.waitFor({ state: 'visible', timeout: DEFAULT_TIMEOUT_MS }) + await networkTab.click() + await page.getByText('Fetch/XHR', { exact: true }).waitFor({ + state: 'visible', + timeout: DEFAULT_TIMEOUT_MS + }) + } + + async reload() { + await this.page.reload({ + waitUntil: 'domcontentloaded', + timeout: DEFAULT_TIMEOUT_MS + }) + await this.openNetworkPanel() + } + + async targetState() { + return this.page.evaluate(async () => { + const SDK = await import('./core/sdk/sdk.js') + const targetManager = SDK.TargetManager.TargetManager.instance() + const target = targetManager.primaryPageTarget() + return { + connected: Boolean(target), + targetCount: targetManager.targets().length, + type: target?.type(), + suspended: target?.suspended() + } + }) + } + + async requestState(url) { + return this.page.evaluate(async (requestUrl) => { + const Logs = await import('./models/logs/logs.js') + const request = Logs.NetworkLog.NetworkLog.instance() + .requests() + .find((candidate) => candidate.url() === requestUrl) + if (!request) return { found: false } + return { + found: true, + finished: Boolean(request.finished), + method: request.requestMethod, + mimeType: request.mimeType, + statusCode: request.statusCode, + url: request.url() + } + }, url) + } + + async requestBody(url) { + return this.page.evaluate(async (requestUrl) => { + const Logs = await import('./models/logs/logs.js') + const request = Logs.NetworkLog.NetworkLog.instance() + .requests() + .find((candidate) => candidate.url() === requestUrl) + if (!request) throw new Error(`Network model did not contain ${requestUrl}`) + if (!request.finished) throw new Error(`Network request was not finished: ${requestUrl}`) + const content = await request.requestContentData() + return { + text: content.text, + mimeType: content.mimeType, + charset: content.charset, + error: content.error ? String(content.error) : undefined + } + }, url) + } + + unexpectedErrors() { + const browserEndpoint = this.browserWebSocketUrl ? new URL(this.browserWebSocketUrl) : undefined + const missingFaviconUrl = browserEndpoint + ? `http://${browserEndpoint.host}/favicon.ico` + : undefined + const unexpectedConsole = this.consoleMessages.filter( + (message) => + message.type === 'error' && + !EXPECTED_PROTOCOL_ERRORS[this.backend].some((pattern) => pattern.test(message.text)) && + !( + message.location.url === missingFaviconUrl && + /^Failed to load resource: .*status of 404/.test(message.text) + ) + ) + return { + console: unexpectedConsole, + page: this.pageErrors, + crashes: this.crashes, + externalConnections: this.externalConnections + } + } + + assertNoUnexpectedErrors() { + const errors = this.unexpectedErrors() + if ( + errors.console.length || + errors.page.length || + errors.crashes.length || + errors.externalConnections.length + ) { + throw new Error(`Unexpected DevTools frontend errors:\n${JSON.stringify(errors, null, 2)}`) + } + } + + async captureEvidence(testInfo, prefix = `${this.backend}-devtools`) { + await mkdir(testInfo.outputDir, { recursive: true }) + const attachments = [] + const attachFile = async (name, content, contentType = 'text/plain') => { + const path = testInfo.outputPath(name) + await writeFile(path, content) + await testInfo.attach(name, { path, contentType }) + attachments.push(path) + } + + if (this.page && !this.page.isClosed()) { + const screenshotName = `${prefix}-frontend.png` + const screenshotPath = testInfo.outputPath(screenshotName) + await this.page.screenshot({ path: screenshotPath, fullPage: true }) + await testInfo.attach(screenshotName, { + path: screenshotPath, + contentType: 'image/png' + }) + attachments.push(screenshotPath) + } + + if (this.traceStarted && !this.traceStopped) { + const traceName = `${prefix}-trace.zip` + const tracePath = testInfo.outputPath(traceName) + await this.context.tracing.stop({ path: tracePath }) + this.traceStopped = true + await testInfo.attach(traceName, { path: tracePath, contentType: 'application/zip' }) + attachments.push(tracePath) + } + + await Promise.all([ + attachFile(`${prefix}-console.ndjson`, toNdjson(this.consoleMessages)), + attachFile(`${prefix}-page-errors.ndjson`, toNdjson(this.pageErrors)), + attachFile(`${prefix}-chromium.stdout.log`, this.browserOutput.stdout), + attachFile(`${prefix}-chromium.stderr.log`, this.browserOutput.stderr), + attachFile( + `${prefix}-metadata.json`, + JSON.stringify( + { + backend: this.backend, + playwrightChromium: this.browserVersion, + chromiumExecutable: chromium.executablePath(), + frontendUrl: this.frontendUrl, + inspectorUrl: this.inspectorUrl, + actualPageUrls: this.context?.pages().map((page) => page.url()) ?? [], + unexpectedErrors: this.unexpectedErrors() + }, + null, + 2 + ), + 'application/json' + ) + ]) + + return attachments + } + + async captureFailure(testInfo, error, targetHarness) { + const attachments = [] + const attachFile = async (name, content, contentType = 'text/plain') => { + const path = testInfo.outputPath(name) + await mkdir(testInfo.outputDir, { recursive: true }) + await writeFile(path, content) + await testInfo.attach(name, { path, contentType }) + attachments.push(path) + } + + if (this.page && !this.page.isClosed()) { + const screenshotPath = testInfo.outputPath('devtools-frontend.png') + try { + await this.page.screenshot({ path: screenshotPath, fullPage: true }) + await testInfo.attach('devtools-frontend.png', { + path: screenshotPath, + contentType: 'image/png' + }) + attachments.push(screenshotPath) + } catch (screenshotError) { + await attachFile( + 'devtools-screenshot-error.json', + JSON.stringify(serializeError(screenshotError), null, 2), + 'application/json' + ) + } + } + + if (this.traceStarted && !this.traceStopped) { + const tracePath = testInfo.outputPath('devtools-trace.zip') + await this.context.tracing.stop({ path: tracePath }).catch(() => undefined) + this.traceStopped = true + await testInfo + .attach('devtools-trace.zip', { path: tracePath, contentType: 'application/zip' }) + .catch(() => {}) + } + + await Promise.all([ + attachFile('frontend-console.ndjson', toNdjson(this.consoleMessages)), + attachFile('frontend-page-errors.ndjson', toNdjson(this.pageErrors)), + attachFile('chromium.stdout.log', this.browserOutput.stdout), + attachFile('chromium.stderr.log', this.browserOutput.stderr), + attachFile( + 'frontend-metadata.json', + JSON.stringify( + { + error: serializeError(error), + backend: this.backend, + playwrightChromium: this.browserVersion, + chromiumExecutable: chromium.executablePath(), + frontendUrl: this.frontendUrl, + inspectorUrl: this.inspectorUrl, + actualPageUrls: this.context?.pages().map((page) => page.url()) ?? [], + unexpectedErrors: this.unexpectedErrors() + }, + null, + 2 + ), + 'application/json' + ), + attachFile(`${this.backend}-target.stdout.log`, targetHarness.stdout), + attachFile(`${this.backend}-target.stderr.log`, targetHarness.stderr), + attachFile(`${this.backend}-target-messages.ndjson`, toNdjson(targetHarness.targetMessages)) + ]) + + if (targetHarness.client) { + const journalPath = testInfo.outputPath(`${this.backend}-cdp-${randomUUID()}.ndjson`) + await targetHarness.client.writeJournal(journalPath) + await testInfo.attach(`${this.backend}-cdp.ndjson`, { + path: journalPath, + contentType: 'application/x-ndjson' + }) + attachments.push(journalPath) + } + return attachments + } + + async close() { + if (this.closed) return + this.closed = true + const errors = [] + + if (this.traceStarted && !this.traceStopped) { + try { + await this.context.tracing.stop() + this.traceStopped = true + } catch (error) { + errors.push(error) + } + } + + try { + await this.browser?.close() + } catch (error) { + errors.push(error) + } + + if ( + this.browserProcess && + this.browserProcess.exitCode === null && + this.browserProcess.signalCode === null + ) { + this.browserProcess.kill('SIGTERM') + try { + await waitForExit(this.browserProcess) + } catch { + this.browserProcess.kill('SIGKILL') + await waitForExit(this.browserProcess, 2_000).catch((error) => errors.push(error)) + } + } + + if (this.userDataDirectory) { + try { + await rm(this.userDataDirectory, { + recursive: true, + force: true, + maxRetries: 5, + retryDelay: 100 + }) + } catch (error) { + errors.push(error) + } + } + + if (errors.length) throw new AggregateError(errors, 'Failed to clean up Chromium frontend') + } +} diff --git a/packages/network-debugger/test/e2e/frontend/legacy-frontend.spec.mjs b/packages/network-debugger/test/e2e/frontend/legacy-frontend.spec.mjs new file mode 100644 index 0000000..b6fc485 --- /dev/null +++ b/packages/network-debugger/test/e2e/frontend/legacy-frontend.spec.mjs @@ -0,0 +1,153 @@ +import { mkdir } from 'node:fs/promises' + +import { expect, test } from '@playwright/test' + +import { CdpClient } from '../harness/cdp-client.mjs' +import { LegacyE2EHarness } from '../legacy/legacy-harness.mjs' +import { ChromiumDevToolsFrontend } from './chromium-devtools.mjs' + +async function expectConnected(frontend) { + await expect + .poll(() => frontend.targetState(), { + message: 'the official frontend should have one live Legacy Node target' + }) + .toMatchObject({ + connected: true, + targetCount: 1, + type: 'node', + suspended: false + }) +} + +function eventForUrl(client, method, url) { + return client.waitForEvent(method, (params) => { + const eventUrl = params.request?.url ?? params.response?.url ?? params.url + return eventUrl === url + }) +} + +function decodeBody(result) { + return result.base64Encoded ? Buffer.from(result.body, 'base64').toString('utf8') : result.body +} + +async function attachJournal(testInfo, name, client) { + await mkdir(testInfo.outputDir, { recursive: true }) + const path = testInfo.outputPath(name) + await client.writeJournal(path) + await testInfo.attach(name, { path, contentType: 'application/x-ndjson' }) +} + +async function exerciseFetch(frontend, legacyHarness, secondClient, label) { + const token = legacyHarness.createToken(label) + const url = legacyHarness.url('/post', token) + const requestPromise = eventForUrl(legacyHarness.client, 'Network.requestWillBeSent', url) + const scenarioPromise = legacyHarness.runScenario('fetch-post', { url, token }) + const request = await requestPromise + const scenario = await scenarioPromise + + await expect + .poll(() => frontend.requestState(url), { + message: 'the official DevTools Network model should finish the Legacy request' + }) + .toMatchObject({ + found: true, + finished: true, + method: 'POST', + mimeType: 'application/json', + statusCode: 201, + url + }) + + await expect(frontend.page.getByText(token, { exact: false }).first()).toBeVisible() + + // Both raw clients started at command id 1. Issue different commands with + // the same next id while the official frontend is also requesting content. + // A broadcast or incorrectly routed response makes one of these assertions + // fail immediately. + const frontendBodyPromise = frontend.requestBody(url) + const rawBodyPromise = legacyHarness.client.command('Network.getResponseBody', { + requestId: request.message.params.requestId + }) + const secondClientErrorPromise = secondClient + .command('NodeNetworkDevtools.frontendMultiClientProbe') + .then( + () => undefined, + (error) => error + ) + const [content, rawBody, secondClientError] = await Promise.all([ + frontendBodyPromise, + rawBodyPromise, + secondClientErrorPromise + ]) + + expect(secondClientError?.cdpError?.code).toBe(-32601) + expect(secondClientError.cdpResponse.id).toBe(rawBody.request.id) + expect(rawBody.response.id).toBe(rawBody.request.id) + expect(content.error).toBeUndefined() + expect(content.mimeType).toBe('application/json') + expect(content.charset).toBe('utf-8') + + const expected = { + token, + requestBody: `fetch-request:${token}` + } + expect(JSON.parse(content.text)).toEqual(expected) + expect(JSON.parse(decodeBody(rawBody.result))).toEqual(expected) + expect(JSON.parse(scenario.body)).toEqual(expected) +} + +test('official Chromium DevTools frontend displays Legacy requests across reload and isolates clients', async ({}, testInfo) => { + const legacyHarness = new LegacyE2EHarness({ consumer: 'esm' }) + let frontend + let secondClient + let failure + + try { + await legacyHarness.start() + secondClient = new CdpClient(legacyHarness.sessionInfo.target.webSocketDebuggerUrl) + await secondClient.connect() + const secondEnable = await secondClient.command('Network.enable') + expect(secondEnable.response.id).toBe(secondEnable.request.id) + + frontend = new ChromiumDevToolsFrontend(legacyHarness.sessionInfo.target.webSocketDebuggerUrl, { + backend: 'legacy' + }) + await frontend.start() + await expect(frontend.page).toHaveTitle(/DevTools/) + const inspectorSocket = legacyHarness.sessionInfo.target.webSocketDebuggerUrl.replace( + /^ws:\/\//, + '' + ) + expect(new URL(frontend.page.url()).searchParams.get('ws')).toBe(inspectorSocket) + await expectConnected(frontend) + + await exerciseFetch(frontend, legacyHarness, secondClient, 'legacy-frontend-initial') + + await frontend.reload() + await expect(frontend.page).toHaveTitle(/DevTools/) + expect(new URL(frontend.page.url()).searchParams.get('ws')).toBe(inspectorSocket) + await expectConnected(frontend) + await exerciseFetch(frontend, legacyHarness, secondClient, 'legacy-frontend-reconnected') + + frontend.assertNoUnexpectedErrors() + await frontend.captureEvidence(testInfo, 'legacy-devtools') + await attachJournal(testInfo, 'legacy-primary-cdp.ndjson', legacyHarness.client) + await attachJournal(testInfo, 'legacy-secondary-cdp.ndjson', secondClient) + } catch (error) { + failure = error + await frontend?.captureFailure(testInfo, error, legacyHarness).catch(() => {}) + if (secondClient) { + await attachJournal(testInfo, 'legacy-secondary-cdp.ndjson', secondClient).catch(() => {}) + } + await legacyHarness.writeFailureArtifacts(error).catch(() => undefined) + throw error + } finally { + const cleanupErrors = [] + await frontend?.close().catch((error) => cleanupErrors.push(error)) + await secondClient?.close().catch((error) => cleanupErrors.push(error)) + await legacyHarness.close().catch((error) => cleanupErrors.push(error)) + if (!failure && cleanupErrors.length) { + throw new AggregateError(cleanupErrors, 'Legacy frontend E2E cleanup failed') + } + } +}) diff --git a/packages/network-debugger/test/e2e/frontend/native-frontend.spec.mjs b/packages/network-debugger/test/e2e/frontend/native-frontend.spec.mjs new file mode 100644 index 0000000..6befb14 --- /dev/null +++ b/packages/network-debugger/test/e2e/frontend/native-frontend.spec.mjs @@ -0,0 +1,86 @@ +import { expect, test } from '@playwright/test' + +import { NativeE2EHarness } from '../harness/native-harness.mjs' +import { ChromiumDevToolsFrontend } from './chromium-devtools.mjs' + +async function expectConnected(frontend) { + await expect + .poll(() => frontend.targetState(), { + message: 'the official frontend should have a live Node target' + }) + .toMatchObject({ + connected: true, + targetCount: 1, + type: 'node', + suspended: false + }) +} + +async function exerciseFetch(frontend, nativeHarness, label) { + const token = nativeHarness.createToken(label) + const url = nativeHarness.url('/fetch', token) + const scenario = await nativeHarness.runScenario('fetch', { url, token }) + + await expect + .poll(() => frontend.requestState(url), { + message: 'the official DevTools Network model should finish the Native request' + }) + .toMatchObject({ + found: true, + finished: true, + method: 'POST', + mimeType: 'application/json', + statusCode: 201, + url + }) + + await expect(frontend.page.getByText(token, { exact: false }).first()).toBeVisible() + + const content = await frontend.requestBody(url) + expect(content.error).toBeUndefined() + expect(content.mimeType).toBe('application/json') + expect(content.charset).toBe('utf-8') + expect(JSON.parse(content.text)).toEqual({ + token, + requestBody: `fetch-request:${token}` + }) + expect(JSON.parse(scenario.body)).toEqual(JSON.parse(content.text)) +} + +test('official Chromium DevTools frontend displays Native requests before and after reconnecting', async ({}, testInfo) => { + const nativeHarness = new NativeE2EHarness() + let frontend + let failure + + try { + await nativeHarness.start() + // Construct before starting so launch failures still retain Chromium logs, + // screenshots/traces where available, and the Native CDP journal. + frontend = new ChromiumDevToolsFrontend(nativeHarness.inspectorUrl) + await frontend.start() + await expect(frontend.page).toHaveTitle(/DevTools/) + const inspectorSocket = nativeHarness.inspectorUrl.replace(/^ws:\/\//, '') + expect(new URL(frontend.page.url()).searchParams.get('ws')).toBe(inspectorSocket) + await expectConnected(frontend) + + await exerciseFetch(frontend, nativeHarness, 'frontend-initial') + + await frontend.reload() + await expect(frontend.page).toHaveTitle(/DevTools/) + expect(new URL(frontend.page.url()).searchParams.get('ws')).toBe(inspectorSocket) + await expectConnected(frontend) + await exerciseFetch(frontend, nativeHarness, 'frontend-reconnected') + frontend.assertNoUnexpectedErrors() + } catch (error) { + failure = error + await frontend?.captureFailure(testInfo, error, nativeHarness).catch(() => {}) + throw error + } finally { + const cleanupErrors = [] + await frontend?.close().catch((error) => cleanupErrors.push(error)) + await nativeHarness.close().catch((error) => cleanupErrors.push(error)) + if (!failure && cleanupErrors.length) { + throw new AggregateError(cleanupErrors, 'Frontend E2E cleanup failed') + } + } +}) diff --git a/packages/network-debugger/test/e2e/frontend/playwright.config.mjs b/packages/network-debugger/test/e2e/frontend/playwright.config.mjs new file mode 100644 index 0000000..f1f8023 --- /dev/null +++ b/packages/network-debugger/test/e2e/frontend/playwright.config.mjs @@ -0,0 +1,20 @@ +import { tmpdir } from 'node:os' +import { resolve } from 'node:path' + +import { defineConfig } from '@playwright/test' + +const outputDirectory = process.env.NETWORK_DEBUGGER_E2E_ARTIFACT_DIR + ? resolve(process.env.NETWORK_DEBUGGER_E2E_ARTIFACT_DIR, 'frontend') + : resolve(tmpdir(), `node-network-devtools-playwright-${process.pid}`) + +export default defineConfig({ + testDir: '.', + testMatch: '**/*.spec.mjs', + timeout: 45_000, + expect: { timeout: 10_000 }, + fullyParallel: false, + workers: 1, + retries: 0, + outputDir: outputDirectory, + reporter: process.env.CI ? [['line']] : [['list']] +}) diff --git a/packages/network-debugger/test/e2e/harness/cdp-client.mjs b/packages/network-debugger/test/e2e/harness/cdp-client.mjs new file mode 100644 index 0000000..e668932 --- /dev/null +++ b/packages/network-debugger/test/e2e/harness/cdp-client.mjs @@ -0,0 +1,262 @@ +import { writeFile } from 'node:fs/promises' + +import WebSocket from 'ws' + +const DEFAULT_TIMEOUT_MS = 10_000 + +function timeoutError(label, timeoutMs) { + return new Error(`Timed out after ${timeoutMs}ms while waiting for ${label}`) +} + +function stringifyJournalEntry(entry) { + return JSON.stringify(entry, (_key, value) => + typeof value === 'bigint' ? value.toString() : value + ) +} + +/** + * A deliberately small CDP client. It speaks JSON-RPC over a real WebSocket and + * does not know anything about the network debugger implementation. + */ +export class CdpClient { + #socket + #nextCommandId = 0 + #nextSequence = 0 + #pendingCommands = new Map() + #eventWaiters = new Set() + #closed = false + + constructor(webSocketUrl) { + this.webSocketUrl = webSocketUrl + this.journal = [] + this.events = [] + } + + async connect({ timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + if (this.#socket) { + throw new Error('CDP client is already connected') + } + + const socket = new WebSocket(this.webSocketUrl) + this.#socket = socket + + await new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + socket.terminate() + reject(timeoutError(`CDP WebSocket ${this.webSocketUrl}`, timeoutMs)) + }, timeoutMs) + + const cleanup = () => { + clearTimeout(timer) + socket.off('open', onOpen) + socket.off('error', onInitialError) + socket.off('unexpected-response', onUnexpectedResponse) + } + + const onOpen = () => { + cleanup() + resolve() + } + + const onInitialError = (error) => { + cleanup() + reject(error) + } + + const onUnexpectedResponse = (_request, response) => { + cleanup() + reject( + new Error( + `Unexpected HTTP ${response.statusCode} while connecting to ${this.webSocketUrl}` + ) + ) + } + + socket.once('open', onOpen) + socket.once('error', onInitialError) + socket.once('unexpected-response', onUnexpectedResponse) + }) + + socket.on('message', (data) => this.#onMessage(data)) + socket.on('error', (error) => this.#onDisconnect(error)) + socket.on('close', (code, reason) => { + this.#onDisconnect( + new Error(`CDP WebSocket closed (${code}): ${reason.toString() || 'no reason'}`) + ) + }) + + this.#record('connection', { state: 'open', url: this.webSocketUrl }) + return this + } + + async command(method, params = {}, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const socket = this.#socket + if (!socket || socket.readyState !== WebSocket.OPEN) { + throw new Error(`Cannot send ${method}: CDP WebSocket is not open`) + } + + const id = ++this.#nextCommandId + const request = { id, method, params } + this.#record('send', request) + + const response = await new Promise((resolve, reject) => { + const timer = setTimeout(() => { + this.#pendingCommands.delete(id) + reject(timeoutError(`response to CDP command ${method} (${id})`, timeoutMs)) + }, timeoutMs) + + this.#pendingCommands.set(id, { + method, + resolve: (message) => { + clearTimeout(timer) + resolve(message) + }, + reject: (error) => { + clearTimeout(timer) + reject(error) + } + }) + + socket.send(JSON.stringify(request), (error) => { + if (!error) return + const pending = this.#pendingCommands.get(id) + if (!pending) return + this.#pendingCommands.delete(id) + pending.reject(error) + }) + }) + + if (response.error) { + const error = new Error( + `CDP command ${method} failed (${response.error.code}): ${response.error.message}` + ) + error.cdpError = response.error + error.cdpResponse = response + throw error + } + + return { + id, + request, + response, + result: response.result + } + } + + waitForEvent(method, predicate = () => true, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const existing = this.events.find( + (record) => + record.message.method === method && predicate(record.message.params, record.message) + ) + if (existing) return Promise.resolve(existing) + + return new Promise((resolve, reject) => { + const waiter = { method, predicate, resolve, reject, timer: undefined } + waiter.timer = setTimeout(() => { + this.#eventWaiters.delete(waiter) + const observed = this.events.map((record) => record.message.method).join(', ') + reject( + new Error( + `${timeoutError(`CDP event ${method}`, timeoutMs).message}. Observed: ${observed || 'none'}` + ) + ) + }, timeoutMs) + this.#eventWaiters.add(waiter) + }) + } + + findEvents(method, predicate = () => true) { + return this.events.filter( + (record) => + record.message.method === method && predicate(record.message.params, record.message) + ) + } + + async writeJournal(path) { + const body = this.journal.map(stringifyJournalEntry).join('\n') + await writeFile(path, body ? `${body}\n` : '', 'utf8') + } + + async close({ timeoutMs = 2_000 } = {}) { + const socket = this.#socket + if (!socket || socket.readyState === WebSocket.CLOSED) return + + this.#closed = true + await new Promise((resolve) => { + const timer = setTimeout(() => { + socket.terminate() + resolve() + }, timeoutMs) + + socket.once('close', () => { + clearTimeout(timer) + resolve() + }) + socket.close() + }) + } + + #record(direction, message) { + const record = { + sequence: ++this.#nextSequence, + timestamp: new Date().toISOString(), + direction, + message + } + this.journal.push(record) + return record + } + + #onMessage(data) { + let message + try { + message = JSON.parse(data.toString()) + } catch (error) { + this.#record('receive-invalid', { raw: data.toString(), error: String(error) }) + this.#onDisconnect(error) + return + } + + const record = this.#record('receive', message) + if (message.id !== undefined) { + const pending = this.#pendingCommands.get(message.id) + if (!pending) return + this.#pendingCommands.delete(message.id) + pending.resolve(message) + return + } + + if (!message.method) return + this.events.push(record) + + for (const waiter of [...this.#eventWaiters]) { + if (waiter.method !== message.method) continue + try { + if (!waiter.predicate(message.params, message)) continue + } catch (error) { + clearTimeout(waiter.timer) + this.#eventWaiters.delete(waiter) + waiter.reject(error) + continue + } + clearTimeout(waiter.timer) + this.#eventWaiters.delete(waiter) + waiter.resolve(record) + } + } + + #onDisconnect(error) { + if (this.#closed) return + this.#record('connection', { state: 'closed', error: String(error) }) + for (const [id, pending] of this.#pendingCommands) { + pending.reject(new Error(`CDP connection ended before ${pending.method} (${id}): ${error}`)) + } + this.#pendingCommands.clear() + for (const waiter of this.#eventWaiters) { + clearTimeout(waiter.timer) + waiter.reject(new Error(`CDP connection ended while waiting for ${waiter.method}: ${error}`)) + } + this.#eventWaiters.clear() + } +} diff --git a/packages/network-debugger/test/e2e/harness/native-harness.mjs b/packages/network-debugger/test/e2e/harness/native-harness.mjs new file mode 100644 index 0000000..3b89455 --- /dev/null +++ b/packages/network-debugger/test/e2e/harness/native-harness.mjs @@ -0,0 +1,420 @@ +import { spawn } from 'node:child_process' +import { access, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' +import { randomUUID } from 'node:crypto' + +import { CdpClient } from './cdp-client.mjs' +import { startOriginServer } from '../fixtures/origin-server.mjs' + +const HARNESS_DIR = dirname(fileURLToPath(import.meta.url)) +const PACKAGE_DIR = resolve(HARNESS_DIR, '../../..') +const DEFAULT_ENTRY_PATH = resolve(PACKAGE_DIR, 'dist/index.mjs') +const TARGET_PATH = resolve(HARNESS_DIR, '../fixtures/native-target.mjs') +const DEFAULT_TIMEOUT_MS = 10_000 + +function waitForEmitter({ + emitter, + event, + predicate, + timeoutMs, + label, + history, + endEvent, + endError +}) { + const existing = history?.find(predicate) + if (existing) return Promise.resolve(existing) + + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error(`Timed out after ${timeoutMs}ms while waiting for ${label}`)) + }, timeoutMs) + + const onValue = (value) => { + let matches + try { + matches = predicate(value) + } catch (error) { + cleanup() + reject(error) + return + } + if (!matches) return + cleanup() + resolvePromise(value) + } + + const onError = (error) => { + cleanup() + reject(error) + } + + const onEnd = (...args) => { + cleanup() + reject(endError(...args)) + } + + const cleanup = () => { + clearTimeout(timer) + emitter.off(event, onValue) + emitter.off('error', onError) + if (endEvent) emitter.off(endEvent, onEnd) + } + + emitter.on(event, onValue) + emitter.once('error', onError) + if (endEvent) emitter.once(endEvent, onEnd) + }) +} + +function waitForExit(child, timeoutMs, label) { + if (child.exitCode !== null || child.signalCode !== null) { + return Promise.resolve({ code: child.exitCode, signal: child.signalCode }) + } + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error(`Timed out after ${timeoutMs}ms while waiting for ${label}`)) + }, timeoutMs) + const onExit = (code, signal) => { + cleanup() + resolvePromise({ code, signal }) + } + const cleanup = () => { + clearTimeout(timer) + child.off('exit', onExit) + } + child.once('exit', onExit) + }) +} + +function serializeError(error) { + if (error instanceof Error) { + return { name: error.name, message: error.message, stack: error.stack } + } + return { message: String(error) } +} + +export class NativeE2EHarness { + constructor({ + entryPath = process.env.NETWORK_DEBUGGER_E2E_ENTRY ?? DEFAULT_ENTRY_PATH, + recordSession = false + } = {}) { + this.entryPath = entryPath + this.recordSession = recordSession + this.targetMessages = [] + this.stdout = '' + this.stderr = '' + this.closed = false + this.keepSessionArtifacts = false + } + + async start() { + await access(this.entryPath).catch(() => { + throw new Error( + `Built public package entry is missing at ${this.entryPath}. ` + + 'Run `pnpm --filter node-network-devtools build` before the E2E suite.' + ) + }) + + if (this.recordSession) { + this.temporaryDirectory = await mkdtemp( + join(tmpdir(), 'node-network-devtools-native-session-e2e-') + ) + this.sessionDirectory = join(this.temporaryDirectory, 'session') + } + + this.origin = await startOriginServer() + const child = spawn( + process.execPath, + ['--inspect-wait=127.0.0.1:0', '--experimental-network-inspection', TARGET_PATH], + { + cwd: PACKAGE_DIR, + env: { + ...process.env, + NETWORK_DEBUGGER_E2E_ENTRY: pathToFileURL(this.entryPath).href, + ...(this.sessionDirectory + ? { NETWORK_DEBUGGER_E2E_SESSION_DIR: this.sessionDirectory } + : {}) + }, + stdio: ['ignore', 'pipe', 'pipe', 'ipc'] + } + ) + this.child = child + + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => { + this.stdout += chunk + }) + child.stderr.on('data', (chunk) => { + this.stderr += chunk + }) + child.on('message', (message) => this.targetMessages.push(message)) + + const inspectorUrl = await this.#waitForInspectorUrl() + this.inspectorUrl = inspectorUrl + const client = new CdpClient(inspectorUrl) + this.client = client + await client.connect() + + this.networkEnable = await client.command('Network.enable') + this.runIfWaiting = await client.command('Runtime.runIfWaitingForDebugger') + + const ready = await this.waitForTargetMessage((message) => message?.type === 'ready') + this.targetPid = ready.pid + this.sessionInfo = ready.sessionInfo + this.nativeFunctionsUnchanged = ready.nativeFunctionsUnchanged + return this + } + + createToken(prefix) { + return `${prefix}-${randomUUID()}` + } + + url(pathname, token) { + return `${this.origin.baseUrl}${pathname}?token=${encodeURIComponent(token)}` + } + + async runScenario(scenario, { url, token, timeoutMs = DEFAULT_TIMEOUT_MS }) { + const id = randomUUID() + const resultPromise = this.waitForTargetMessage( + (message) => message?.type === 'scenario-result' && message.id === id, + { timeoutMs } + ) + + await new Promise((resolvePromise, reject) => { + this.child.send({ type: 'run', id, scenario, url, token }, (error) => + error ? reject(error) : resolvePromise() + ) + }) + + const message = await resultPromise + if (!message.ok) throw new Error(`Target scenario ${scenario} failed:\n${message.error}`) + return message.result + } + + async finalizeSession({ timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + if (!this.sessionDirectory) throw new Error('Native Session recording is not enabled') + const id = randomUUID() + const resultPromise = this.waitForTargetMessage( + (message) => message?.type === 'session-finalized' && message.id === id, + { timeoutMs } + ) + await new Promise((resolvePromise, reject) => { + this.child.send({ type: 'finalize-session', id }, (error) => + error ? reject(error) : resolvePromise() + ) + }) + const message = await resultPromise + if (!message.ok) throw new Error(`Native Session finalization failed:\n${message.error}`) + return message.result + } + + waitForTargetMessage(predicate, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + if (this.child.exitCode !== null || this.child.signalCode !== null) { + return Promise.reject( + new Error( + `Native target already exited (code=${this.child.exitCode}, signal=${this.child.signalCode}).\n` + + this.stderr + ) + ) + } + return waitForEmitter({ + emitter: this.child, + event: 'message', + predicate, + timeoutMs, + label: 'target IPC message', + history: this.targetMessages, + endEvent: 'exit', + endError: (code, signal) => + new Error( + `Native target exited while waiting for IPC (code=${code}, signal=${signal}).\n` + + this.stderr + ) + }) + } + + async writeFailureArtifacts(error) { + const configuredRoot = process.env.NETWORK_DEBUGGER_E2E_ARTIFACT_DIR + let artifactDirectory + if (configuredRoot) { + await mkdir(configuredRoot, { recursive: true }) + artifactDirectory = join( + configuredRoot, + `native-${Date.now()}-${process.pid}-${randomUUID()}` + ) + await mkdir(artifactDirectory, { recursive: true }) + } else { + artifactDirectory = await mkdtemp(join(tmpdir(), 'node-network-devtools-native-e2e-')) + } + + await Promise.all([ + this.client?.writeJournal(join(artifactDirectory, 'cdp.ndjson')) ?? Promise.resolve(), + writeFile(join(artifactDirectory, 'target.stdout.log'), this.stdout, 'utf8'), + writeFile(join(artifactDirectory, 'target.stderr.log'), this.stderr, 'utf8'), + writeFile( + join(artifactDirectory, 'target-messages.ndjson'), + this.targetMessages.map((message) => JSON.stringify(message)).join('\n') + '\n', + 'utf8' + ), + writeFile( + join(artifactDirectory, 'metadata.json'), + JSON.stringify( + { + error: serializeError(error), + node: process.version, + platform: process.platform, + inspectorUrl: this.inspectorUrl, + targetPid: this.targetPid, + sessionInfo: this.sessionInfo, + nativeFunctionsUnchanged: this.nativeFunctionsUnchanged + }, + null, + 2 + ), + 'utf8' + ) + ]) + + return artifactDirectory + } + + async close() { + if (this.closed) return + this.closed = true + const errors = [] + + if (this.child && this.child.exitCode === null && this.child.signalCode === null) { + try { + const shutdown = this.waitForTargetMessage( + (message) => message?.type === 'shutdown-complete', + { timeoutMs: 3_000 } + ) + await new Promise((resolvePromise, reject) => { + this.child.send({ type: 'shutdown' }, (error) => + error ? reject(error) : resolvePromise() + ) + }) + await shutdown + } catch (error) { + errors.push(error) + } + } + + try { + await this.client?.close() + } catch (error) { + errors.push(error) + } + + if (this.child && this.child.exitCode === null && this.child.signalCode === null) { + try { + await waitForExit(this.child, 3_000, 'native target to exit') + } catch (error) { + errors.push(error) + this.child.kill('SIGTERM') + try { + await waitForExit(this.child, 2_000, 'native target to terminate') + } catch (terminationError) { + errors.push(terminationError) + this.child.kill('SIGKILL') + } + } + } + + try { + await this.origin?.close() + } catch (error) { + errors.push(error) + } + + if (this.temporaryDirectory && !this.keepSessionArtifacts) { + try { + await rm(this.temporaryDirectory, { recursive: true, force: true }) + } catch (error) { + errors.push(error) + } + } + + if (errors.length) throw new AggregateError(errors, 'Failed to clean up native E2E harness') + } + + async #waitForInspectorUrl({ timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const existing = this.stderr.match(/Debugger listening on (ws:\/\/[^\s]+)/)?.[1] + if (existing) return existing + + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject( + new Error( + `Timed out after ${timeoutMs}ms waiting for Node Inspector URL. stderr:\n${this.stderr}` + ) + ) + }, timeoutMs) + + const onData = () => { + const match = this.stderr.match(/Debugger listening on (ws:\/\/[^\s]+)/) + if (!match) return + cleanup() + resolvePromise(match[1]) + } + + const onExit = (code, signal) => { + cleanup() + reject( + new Error( + `Native target exited before Inspector startup (code=${code}, signal=${signal}).\n` + + this.stderr + ) + ) + } + + const onError = (error) => { + cleanup() + reject(error) + } + + const cleanup = () => { + clearTimeout(timer) + this.child.stderr.off('data', onData) + this.child.off('exit', onExit) + this.child.off('error', onError) + } + + this.child.stderr.on('data', onData) + this.child.once('exit', onExit) + this.child.once('error', onError) + }) + } +} + +export async function withNativeHarness(testContext, callback, options = {}) { + const harness = new NativeE2EHarness(options) + testContext.after(async () => harness.close()) + + try { + await harness.start() + return await callback(harness) + } catch (error) { + harness.keepSessionArtifacts = true + const artifactDirectory = await harness.writeFailureArtifacts(error).catch(() => undefined) + if (artifactDirectory) { + console.error(`Native E2E failure artifacts: ${artifactDirectory}`) + if (error instanceof Error) { + error.message = `${error.message}\nFailure artifacts: ${artifactDirectory}` + if (harness.sessionDirectory) { + error.message += `\nNative Session artifacts: ${harness.sessionDirectory}` + } + } else { + error = new Error(`${String(error)}\nFailure artifacts: ${artifactDirectory}`) + } + } + throw error + } +} diff --git a/packages/network-debugger/test/e2e/legacy/README.md b/packages/network-debugger/test/e2e/legacy/README.md new file mode 100644 index 0000000..1f493e1 --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/README.md @@ -0,0 +1,20 @@ +# Real Legacy protocol E2E + +This suite starts the built ESM or CommonJS public package in a real child +process with `mode: "legacy"`. Test control uses the child's IPC channel. HTTP, +Fetch, SSE, and WebSocket traffic goes to a real loopback origin and is observed +only through a raw WebSocket CDP client. + +The contract intentionally requires the v2 Legacy architecture: + +- `legacy.serverPort: 0` binds the target on an OS-assigned port; +- `registration.ready.target` agrees with `/json/list`; +- `/json/version` and `/json/protocol` are served by the same endpoint; +- every CDP command id receives either `result` or a standard `error`; +- failed requests terminate with `Network.loadingFailed`, never a manufactured + successful lifecycle. + +No test imports Legacy plugins, mocks the bridge, or manufactures protocol +events. On failure the harness writes the raw CDP journal, origin journal, +consumer stdout/stderr, IPC records, and target discovery metadata to a temporary +artifact directory (or `NETWORK_DEBUGGER_E2E_ARTIFACT_DIR` when configured). diff --git a/packages/network-debugger/test/e2e/legacy/fixtures/consumer.cjs b/packages/network-debugger/test/e2e/legacy/fixtures/consumer.cjs new file mode 100644 index 0000000..86db8d3 --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/fixtures/consumer.cjs @@ -0,0 +1,31 @@ +'use strict' + +const { resolve } = require('node:path') + +const entryPath = process.env.NETWORK_DEBUGGER_E2E_ENTRY +if (!entryPath) throw new Error('NETWORK_DEBUGGER_E2E_ENTRY is required') + +const { register } = require(entryPath) +if (typeof register !== 'function') { + throw new Error(`No public register() export found at ${entryPath}`) +} + +const handle = register({ + mode: 'legacy', + devtools: { open: false }, + legacy: { serverPort: 0 } +}) +const readyPromise = handle.ready + +Promise.resolve(readyPromise) + .then(async (ready) => { + if (ready.mode !== 'legacy') { + throw new Error(`Expected forced Legacy adapter, received ${ready.mode}`) + } + const { installScenarioController } = require(resolve(__dirname, 'scenario-runner.cjs')) + await installScenarioController({ handle, ready, consumer: 'cjs' }) + }) + .catch((error) => { + console.error(error) + process.exitCode = 1 + }) diff --git a/packages/network-debugger/test/e2e/legacy/fixtures/consumer.mjs b/packages/network-debugger/test/e2e/legacy/fixtures/consumer.mjs new file mode 100644 index 0000000..13d0ae0 --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/fixtures/consumer.mjs @@ -0,0 +1,26 @@ +import { createRequire } from 'node:module' +import { dirname, resolve } from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' + +const entryPath = process.env.NETWORK_DEBUGGER_E2E_ENTRY +if (!entryPath) throw new Error('NETWORK_DEBUGGER_E2E_ENTRY is required') + +const { register } = await import(pathToFileURL(entryPath).href) +if (typeof register !== 'function') { + throw new Error(`No public register() export found at ${entryPath}`) +} + +const handle = register({ + mode: 'legacy', + devtools: { open: false }, + legacy: { serverPort: 0 } +}) +const ready = await handle.ready +if (ready.mode !== 'legacy') { + throw new Error(`Expected forced Legacy adapter, received ${ready.mode}`) +} + +const require = createRequire(import.meta.url) +const fixtureDirectory = dirname(fileURLToPath(import.meta.url)) +const { installScenarioController } = require(resolve(fixtureDirectory, 'scenario-runner.cjs')) +await installScenarioController({ handle, ready, consumer: 'esm' }) diff --git a/packages/network-debugger/test/e2e/legacy/fixtures/origin-server.mjs b/packages/network-debugger/test/e2e/legacy/fixtures/origin-server.mjs new file mode 100644 index 0000000..a29fde1 --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/fixtures/origin-server.mjs @@ -0,0 +1,234 @@ +import http from 'node:http' +import { gzipSync } from 'node:zlib' + +import { WebSocketServer } from 'ws' + +const BINARY_BODY = Buffer.from([0x00, 0x01, 0x02, 0x7f, 0x80, 0xfe, 0xff, 0x42]) + +async function readBody(request) { + const chunks = [] + for await (const chunk of request) chunks.push(Buffer.from(chunk)) + return Buffer.concat(chunks) +} + +function closeHttpServer(server, sockets) { + return new Promise((resolve, reject) => { + server.close((error) => { + if (error && error.code !== 'ERR_SERVER_NOT_RUNNING') reject(error) + else resolve() + }) + for (const socket of sockets) socket.destroy() + }) +} + +/** + * A real loopback origin used by the Legacy protocol suite. Test control stays + * on process IPC; every entry recorded here is business traffic emitted by the + * packaged consumer. + */ +export async function startLegacyOriginServer() { + const sockets = new Set() + const records = [] + const webSocketServer = new WebSocketServer({ + noServer: true, + perMessageDeflate: { + threshold: 0, + serverNoContextTakeover: true, + clientNoContextTakeover: true + } + }) + + const server = http.createServer(async (request, response) => { + const url = new URL(request.url, `http://${request.headers.host ?? '127.0.0.1'}`) + const token = url.searchParams.get('token') ?? '' + const record = { + sequence: records.length + 1, + timestamp: new Date().toISOString(), + protocol: 'http', + method: request.method, + url: url.href, + token + } + records.push(record) + + try { + if (url.pathname === '/get' || url.pathname === '/concurrent') { + const body = `get-response:${token}` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-e2e-token': token + }) + response.end(body) + return + } + + if (url.pathname === '/post') { + const requestBody = await readBody(request) + const body = JSON.stringify({ token, requestBody: requestBody.toString('utf8') }) + response.writeHead(201, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-e2e-token': token + }) + response.end(body) + return + } + + if (url.pathname === '/text') { + const body = `legacy-text:${token}:你好` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(body) + }) + response.end(body) + return + } + + if (url.pathname === '/gzip') { + const decoded = `legacy-gzip:${token}:压缩内容` + const body = gzipSync(decoded) + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-encoding': 'gzip', + 'content-length': body.length + }) + response.end(body) + return + } + + if (url.pathname === '/binary') { + response.writeHead(200, { + 'content-type': 'application/octet-stream', + 'content-length': BINARY_BODY.length + }) + response.end(BINARY_BODY) + return + } + + if (url.pathname === '/redirect') { + response.writeHead(302, { + location: `/text?token=${encodeURIComponent(token)}`, + 'content-length': '0' + }) + response.end() + return + } + + if (url.pathname === '/reset') { + request.socket.destroy(new Error(`intentional reset:${token}`)) + return + } + + if (url.pathname === '/timeout') { + // The consumer owns the timeout and destroys this socket. Keeping the + // origin passive makes the failure a real client timeout. + return + } + + if (url.pathname === '/abort') { + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'transfer-encoding': 'chunked' + }) + response.flushHeaders() + response.write(`partial:${token}:`) + return + } + + if (url.pathname === '/sse') { + response.writeHead(200, { + 'content-type': 'text/event-stream; charset=utf-8', + 'cache-control': 'no-cache', + connection: 'close' + }) + response.flushHeaders() + + // Deliberately split one logical event across transport chunks. This + // verifies streaming parsing rather than parsing a manufactured body. + const chunks = [ + 'id: 1\nevent: alpha\ndata: first', + '\ndata: line-2\n\n', + 'id: 2\ndata: second\n\n', + 'event: omega\nid: 3\ndata: third\n\n' + ] + const writeNext = () => { + const chunk = chunks.shift() + if (chunk === undefined) { + response.end() + return + } + response.write(chunk) + setImmediate(writeNext) + } + writeNext() + return + } + + response.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('not found') + } catch (error) { + record.error = error instanceof Error ? error.message : String(error) + if (!response.headersSent) response.writeHead(500) + response.end(String(error)) + } + }) + + server.on('connection', (socket) => { + sockets.add(socket) + socket.once('close', () => sockets.delete(socket)) + }) + + server.on('upgrade', (request, socket, head) => { + const url = new URL(request.url, `http://${request.headers.host ?? '127.0.0.1'}`) + if (url.pathname !== '/websocket') { + socket.destroy() + return + } + records.push({ + sequence: records.length + 1, + timestamp: new Date().toISOString(), + protocol: 'websocket', + method: request.method, + url: url.href, + token: url.searchParams.get('token') ?? '' + }) + webSocketServer.handleUpgrade(request, socket, head, (webSocket) => { + webSocketServer.emit('connection', webSocket, request) + }) + }) + + webSocketServer.on('connection', (socket) => { + socket.on('message', (data, isBinary) => { + socket.send(data, { binary: isBinary }) + }) + }) + + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) + + const address = server.address() + if (!address || typeof address === 'string') { + await closeHttpServer(server, sockets) + throw new Error('Legacy origin fixture did not expose a TCP address') + } + + let closed = false + return { + baseUrl: `http://127.0.0.1:${address.port}`, + binaryBody: BINARY_BODY, + records, + async close() { + if (closed) return + closed = true + for (const client of webSocketServer.clients) client.terminate() + webSocketServer.close() + await closeHttpServer(server, sockets) + } + } +} diff --git a/packages/network-debugger/test/e2e/legacy/fixtures/scenario-runner.cjs b/packages/network-debugger/test/e2e/legacy/fixtures/scenario-runner.cjs new file mode 100644 index 0000000..c4c3b88 --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/fixtures/scenario-runner.cjs @@ -0,0 +1,296 @@ +'use strict' + +const http = require('node:http') +const WebSocket = require('ws') + +function serializeError(error) { + return { + name: error?.name ?? 'Error', + message: error?.message ?? String(error), + code: error?.code + } +} + +function httpRequest(url, { method = 'GET', body, headers = {} } = {}) { + return new Promise((resolve, reject) => { + const request = http.request(url, { method, headers }, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + resolve({ + status: response.statusCode, + headers: response.headers, + bodyBase64: Buffer.concat(chunks).toString('base64') + }) + }) + }) + request.once('error', reject) + if (Array.isArray(body)) { + for (const chunk of body.slice(0, -1)) request.write(chunk) + request.end(body.at(-1)) + } else { + request.end(body) + } + }) +} + +function failedHttpRequest(url, { timeoutMs } = {}) { + return new Promise((resolve, reject) => { + let settled = false + const request = http.request(url, { method: 'GET' }, (response) => { + response.resume() + response.once('error', (error) => { + if (settled) return + settled = true + resolve({ failed: true, error: serializeError(error) }) + }) + response.once('end', () => { + if (settled) return + settled = true + reject(new Error(`Expected ${url} to fail, but it completed with ${response.statusCode}`)) + }) + }) + request.once('error', (error) => { + if (settled) return + settled = true + resolve({ failed: true, error: serializeError(error) }) + }) + if (timeoutMs !== undefined) { + request.setTimeout(timeoutMs, () => { + request.destroy(new Error(`intentional client timeout after ${timeoutMs}ms`)) + }) + } + request.once('close', () => { + if (settled) return + settled = true + resolve({ failed: true, error: { name: 'Error', message: 'request closed' } }) + }) + request.once('response', () => { + // A reset/timeout scenario must not unexpectedly complete successfully. + request.once('finish', () => undefined) + }) + request.once('abort', reject) + request.end() + }) +} + +function abortResponse(url) { + return new Promise((resolve, reject) => { + let settled = false + const request = http.request(url, { method: 'GET' }, (response) => { + response.once('data', (chunk) => { + if (settled) return + settled = true + response.destroy(new Error('intentional response abort')) + request.destroy() + resolve({ aborted: true, firstChunk: Buffer.from(chunk).toString('utf8') }) + }) + response.once('error', (error) => { + if (settled) return + settled = true + resolve({ aborted: true, error: serializeError(error) }) + }) + }) + request.once('error', (error) => { + if (settled) return + settled = true + resolve({ aborted: true, error: serializeError(error) }) + }) + request.once('close', () => { + if (settled) return + settled = true + resolve({ aborted: true }) + }) + request.once('abort', reject) + request.end() + }) +} + +function nextWebSocketMessage(socket) { + return new Promise((resolve, reject) => { + const onMessage = (data, isBinary) => { + cleanup() + resolve({ data: Buffer.from(data), isBinary }) + } + const onError = (error) => { + cleanup() + reject(error) + } + const onClose = (code) => { + cleanup() + reject(new Error(`WebSocket closed before a message (code=${code})`)) + } + const cleanup = () => { + socket.off('message', onMessage) + socket.off('error', onError) + socket.off('close', onClose) + } + socket.once('message', onMessage) + socket.once('error', onError) + socket.once('close', onClose) + }) +} + +async function webSocketRoundTrip(url, token, binaryBase64) { + const socket = new WebSocket(url, { + perMessageDeflate: { + threshold: 0, + serverNoContextTakeover: true, + clientNoContextTakeover: true + } + }) + await new Promise((resolve, reject) => { + socket.once('open', resolve) + socket.once('error', reject) + }) + + const text = `client-text:${token}` + const textMessage = nextWebSocketMessage(socket) + socket.send(text) + const textEcho = await textMessage + + const binary = Buffer.from(binaryBase64, 'base64') + const binaryMessage = nextWebSocketMessage(socket) + socket.send(binary) + const binaryEcho = await binaryMessage + + const closed = new Promise((resolve, reject) => { + socket.once('close', (code, reason) => resolve({ code, reason: reason.toString() })) + socket.once('error', reject) + }) + socket.close(1000, 'scenario-complete') + const close = await closed + + return { + text, + textEcho: textEcho.data.toString('utf8'), + textEchoIsBinary: textEcho.isBinary, + binaryBase64, + binaryEchoBase64: binaryEcho.data.toString('base64'), + binaryEchoIsBinary: binaryEcho.isBinary, + extensions: socket.extensions, + close + } +} + +async function runScenario(message) { + switch (message.scenario) { + case 'http-get': + case 'body': + return httpRequest(message.url, { + headers: { 'x-e2e-token': message.token } + }) + case 'fetch-post': { + const requestBody = `fetch-request:${message.token}` + const response = await fetch(message.url, { + method: 'POST', + headers: { + 'content-type': 'text/plain; charset=utf-8', + 'x-e2e-token': message.token + }, + body: requestBody + }) + return { + status: response.status, + body: await response.text(), + requestBody + } + } + case 'http-post-chunks': { + const chunks = [`http-`, `request:`, message.token] + const response = await httpRequest(message.url, { + method: 'POST', + headers: { + 'content-type': 'text/plain; charset=utf-8', + 'x-e2e-token': message.token + }, + body: chunks + }) + return { ...response, requestBody: chunks.join('') } + } + case 'redirect': { + const redirect = await httpRequest(message.url, { + headers: { 'x-e2e-token': message.token } + }) + const location = redirect.headers.location + if (!location) throw new Error('redirect response did not include Location') + const destinationUrl = new URL(location, message.url).href + const destination = await httpRequest(destinationUrl, { + headers: { 'x-e2e-token': message.token } + }) + return { redirect, destination, destinationUrl } + } + case 'reset': + return failedHttpRequest(message.url) + case 'timeout': + return failedHttpRequest(message.url, { timeoutMs: 150 }) + case 'abort': + return abortResponse(message.url) + case 'sse': { + const response = await fetch(message.url, { + headers: { 'x-e2e-token': message.token } + }) + return { status: response.status, body: await response.text() } + } + case 'websocket': + return webSocketRoundTrip(message.url, message.token, message.binaryBase64) + case 'concurrent': + return Promise.all( + message.urls.map((url) => httpRequest(url, { headers: { 'x-e2e-token': message.token } })) + ) + default: + throw new Error(`Unknown Legacy E2E scenario: ${message.scenario}`) + } +} + +function send(message) { + return new Promise((resolve, reject) => { + if (!process.send) { + reject(new Error('Legacy E2E consumer lost its IPC channel')) + return + } + process.send(message, (error) => (error ? reject(error) : resolve())) + }) +} + +async function installScenarioController({ handle, ready, consumer }) { + if (!process.send) throw new Error('Legacy E2E consumer must be started with process IPC') + + const onMessage = async (message) => { + if (message?.type === 'run') { + try { + const result = await runScenario(message) + await send({ type: 'scenario-result', id: message.id, ok: true, result }) + } catch (error) { + await send({ + type: 'scenario-result', + id: message.id, + ok: false, + error: error instanceof Error ? error.stack : String(error) + }) + } + return + } + + if (message?.type === 'shutdown') { + process.off('message', onMessage) + try { + await handle.dispose() + await send({ type: 'shutdown-complete' }) + } finally { + process.disconnect() + } + } + } + + process.on('message', onMessage) + await send({ + type: 'ready', + pid: process.pid, + consumer, + sessionInfo: ready + }) +} + +module.exports = { installScenarioController } diff --git a/packages/network-debugger/test/e2e/legacy/legacy-harness.mjs b/packages/network-debugger/test/e2e/legacy/legacy-harness.mjs new file mode 100644 index 0000000..f5e7f8e --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/legacy-harness.mjs @@ -0,0 +1,441 @@ +import { spawn } from 'node:child_process' +import { randomUUID } from 'node:crypto' +import { access, mkdir, mkdtemp, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { CdpClient } from '../harness/cdp-client.mjs' +import { startLegacyOriginServer } from './fixtures/origin-server.mjs' + +const LEGACY_DIRECTORY = dirname(fileURLToPath(import.meta.url)) +const PACKAGE_DIRECTORY = resolve(LEGACY_DIRECTORY, '../../..') +const DEFAULT_TIMEOUT_MS = 12_000 + +const CONSUMERS = { + esm: { + entryPath: resolve(PACKAGE_DIRECTORY, 'dist/index.mjs'), + fixturePath: resolve(LEGACY_DIRECTORY, 'fixtures/consumer.mjs') + }, + cjs: { + entryPath: resolve(PACKAGE_DIRECTORY, 'dist/index.js'), + fixturePath: resolve(LEGACY_DIRECTORY, 'fixtures/consumer.cjs') + } +} + +function serializeError(error) { + if (error instanceof Error) { + return { name: error.name, message: error.message, stack: error.stack } + } + return { message: String(error) } +} + +function waitForExit(child, timeoutMs, label) { + if (child.exitCode !== null || child.signalCode !== null) { + return Promise.resolve({ code: child.exitCode, signal: child.signalCode }) + } + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error(`Timed out after ${timeoutMs}ms while waiting for ${label}`)) + }, timeoutMs) + const onExit = (code, signal) => { + cleanup() + resolvePromise({ code, signal }) + } + const cleanup = () => { + clearTimeout(timer) + child.off('exit', onExit) + } + child.once('exit', onExit) + }) +} + +async function fetchJson(url, label) { + let response + try { + response = await fetch(url, { signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS) }) + } catch (error) { + throw new Error(`Could not read Legacy ${label} from ${url}: ${error}`, { cause: error }) + } + const body = await response.text() + if (!response.ok) { + throw new Error(`Legacy ${label} returned HTTP ${response.status} from ${url}: ${body}`) + } + try { + return JSON.parse(body) + } catch (error) { + throw new Error(`Legacy ${label} was not JSON at ${url}: ${body}`, { cause: error }) + } +} + +function assertStandardTarget(target) { + if (!target || typeof target !== 'object') { + throw new Error(`registration.ready did not return a target: ${JSON.stringify(target)}`) + } + for (const field of [ + 'id', + 'title', + 'type', + 'webSocketDebuggerUrl', + 'devtoolsFrontendUrl', + 'discoveryUrl' + ]) { + if (typeof target[field] !== 'string' || target[field].length === 0) { + throw new Error(`Legacy target.${field} must be a non-empty string`) + } + } + if (!/^ws:\/\/127\.0\.0\.1:\d+\//.test(target.webSocketDebuggerUrl)) { + throw new Error( + `Legacy target must expose a loopback WebSocket path: ${target.webSocketDebuggerUrl}` + ) + } + if (!/^http:\/\/127\.0\.0\.1:\d+\/json\/list$/.test(target.discoveryUrl)) { + throw new Error( + `Legacy target must expose standard /json/list discovery: ${target.discoveryUrl}` + ) + } +} + +export class LegacyE2EHarness { + constructor({ consumer = 'esm', entryPath } = {}) { + const definition = CONSUMERS[consumer] + if (!definition) throw new Error(`Unknown Legacy consumer kind: ${consumer}`) + this.consumer = consumer + this.entryPath = + entryPath ?? + process.env[`NETWORK_DEBUGGER_E2E_ENTRY_${consumer.toUpperCase()}`] ?? + definition.entryPath + this.fixturePath = definition.fixturePath + this.targetMessages = [] + this.stdout = '' + this.stderr = '' + this.closed = false + } + + async start() { + await access(this.entryPath).catch(() => { + throw new Error( + `Built ${this.consumer.toUpperCase()} package entry is missing at ${this.entryPath}. ` + + 'Run `pnpm --filter node-network-devtools build` before the Legacy E2E suite.' + ) + }) + + this.origin = await startLegacyOriginServer() + const child = spawn(process.execPath, [this.fixturePath], { + cwd: PACKAGE_DIRECTORY, + env: { + ...process.env, + NETWORK_DEBUGGER_E2E_ENTRY: this.entryPath + }, + stdio: ['ignore', 'pipe', 'pipe', 'ipc'] + }) + this.child = child + + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => { + this.stdout += chunk + }) + child.stderr.on('data', (chunk) => { + this.stderr += chunk + }) + child.on('message', (message) => this.targetMessages.push(message)) + + const ready = await this.waitForTargetMessage((message) => message?.type === 'ready') + this.targetPid = ready.pid + this.sessionInfo = ready.sessionInfo + if (ready.consumer !== this.consumer) { + throw new Error(`Expected ${this.consumer} consumer, target reported ${ready.consumer}`) + } + if (this.sessionInfo?.mode !== 'legacy') { + throw new Error(`Forced Legacy selected ${this.sessionInfo?.mode ?? 'no adapter'}`) + } + assertStandardTarget(this.sessionInfo.target) + + const discoveryUrl = new URL(this.sessionInfo.target.discoveryUrl) + this.discovery = { + list: await fetchJson(discoveryUrl.href, '/json/list'), + version: await fetchJson(new URL('/json/version', discoveryUrl).href, '/json/version'), + protocol: await fetchJson(new URL('/json/protocol', discoveryUrl).href, '/json/protocol') + } + + if (!Array.isArray(this.discovery.list)) { + throw new Error('Legacy /json/list response must be an array') + } + this.discoveredTarget = this.discovery.list.find( + (target) => + target?.id === this.sessionInfo.target.id || + target?.webSocketDebuggerUrl === this.sessionInfo.target.webSocketDebuggerUrl + ) + if (!this.discoveredTarget) { + throw new Error( + `registration.ready target is absent from /json/list: ${JSON.stringify(this.discovery.list)}` + ) + } + for (const field of ['id', 'title', 'type', 'url', 'webSocketDebuggerUrl']) { + if (this.discoveredTarget[field] !== this.sessionInfo.target[field]) { + throw new Error(`registration.ready and /json/list disagree on ${field}`) + } + } + if (!Array.isArray(this.discovery.protocol?.domains)) { + throw new Error('Legacy /json/protocol must expose a domains array') + } + + const client = new CdpClient(this.sessionInfo.target.webSocketDebuggerUrl) + this.client = client + await client.connect() + this.networkEnable = await client.command('Network.enable') + return this + } + + createToken(prefix) { + return `${prefix}-${randomUUID()}` + } + + url(pathname, token, search = {}) { + const url = new URL(pathname, this.origin.baseUrl) + url.searchParams.set('token', token) + for (const [name, value] of Object.entries(search)) { + url.searchParams.set(name, String(value)) + } + return url.href + } + + webSocketUrl(pathname, token) { + const url = new URL(this.url(pathname, token)) + url.protocol = 'ws:' + return url.href + } + + async runScenario(scenario, payload = {}, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const id = randomUUID() + const resultPromise = this.waitForTargetMessage( + (message) => message?.type === 'scenario-result' && message.id === id, + { timeoutMs } + ) + + await new Promise((resolvePromise, reject) => { + this.child.send({ type: 'run', id, scenario, ...payload }, (error) => + error ? reject(error) : resolvePromise() + ) + }) + + const message = await resultPromise + if (!message.ok) throw new Error(`Legacy target scenario ${scenario} failed:\n${message.error}`) + return message.result + } + + waitForTargetMessage(predicate, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + const existing = this.targetMessages.find(predicate) + if (existing) return Promise.resolve(existing) + if (this.child.exitCode !== null || this.child.signalCode !== null) { + return Promise.reject( + new Error( + `Legacy target already exited (code=${this.child.exitCode}, signal=${this.child.signalCode}).\n` + + this.stderr + ) + ) + } + + return new Promise((resolvePromise, reject) => { + const timer = setTimeout(() => { + cleanup() + reject( + new Error( + `Timed out after ${timeoutMs}ms waiting for Legacy target IPC. stderr:\n${this.stderr}` + ) + ) + }, timeoutMs) + const onMessage = (message) => { + let matches + try { + matches = predicate(message) + } catch (error) { + cleanup() + reject(error) + return + } + if (!matches) return + cleanup() + resolvePromise(message) + } + const onExit = (code, signal) => { + cleanup() + reject( + new Error( + `Legacy target exited while waiting for IPC (code=${code}, signal=${signal}).\n` + + this.stderr + ) + ) + } + const onError = (error) => { + cleanup() + reject(error) + } + const cleanup = () => { + clearTimeout(timer) + this.child.off('message', onMessage) + this.child.off('exit', onExit) + this.child.off('error', onError) + } + this.child.on('message', onMessage) + this.child.once('exit', onExit) + this.child.once('error', onError) + }) + } + + async writeFailureArtifacts(error) { + const configuredRoot = process.env.NETWORK_DEBUGGER_E2E_ARTIFACT_DIR + let artifactDirectory + if (configuredRoot) { + await mkdir(configuredRoot, { recursive: true }) + artifactDirectory = join( + configuredRoot, + `legacy-${this.consumer}-${Date.now()}-${process.pid}-${randomUUID()}` + ) + await mkdir(artifactDirectory, { recursive: true }) + } else { + artifactDirectory = await mkdtemp( + join(tmpdir(), `node-network-devtools-legacy-${this.consumer}-e2e-`) + ) + } + + await Promise.all([ + this.client?.writeJournal(join(artifactDirectory, 'cdp.ndjson')) ?? + writeFile(join(artifactDirectory, 'cdp.ndjson'), '', 'utf8'), + writeFile(join(artifactDirectory, 'consumer.stdout.log'), this.stdout, 'utf8'), + writeFile(join(artifactDirectory, 'consumer.stderr.log'), this.stderr, 'utf8'), + writeFile( + join(artifactDirectory, 'consumer-messages.ndjson'), + this.targetMessages.map((message) => JSON.stringify(message)).join('\n') + '\n', + 'utf8' + ), + writeFile( + join(artifactDirectory, 'origin.ndjson'), + (this.origin?.records ?? []).map((record) => JSON.stringify(record)).join('\n') + '\n', + 'utf8' + ), + writeFile( + join(artifactDirectory, 'target.json'), + JSON.stringify( + { + registrationTarget: this.sessionInfo?.target, + discoveredTarget: this.discoveredTarget, + discovery: this.discovery + }, + null, + 2 + ), + 'utf8' + ), + writeFile( + join(artifactDirectory, 'metadata.json'), + JSON.stringify( + { + error: serializeError(error), + node: process.version, + platform: process.platform, + consumer: this.consumer, + entryPath: this.entryPath, + targetPid: this.targetPid, + sessionInfo: this.sessionInfo + }, + null, + 2 + ), + 'utf8' + ) + ]) + + return artifactDirectory + } + + async close() { + if (this.closed) return + this.closed = true + const errors = [] + + try { + await this.client?.close() + } catch (error) { + errors.push(error) + } + + if ( + this.child && + this.child.connected && + this.child.exitCode === null && + this.child.signalCode === null + ) { + try { + const shutdown = this.waitForTargetMessage( + (message) => message?.type === 'shutdown-complete', + { timeoutMs: 4_000 } + ) + await new Promise((resolvePromise, reject) => { + this.child.send({ type: 'shutdown' }, (error) => + error ? reject(error) : resolvePromise() + ) + }) + await shutdown + } catch (error) { + errors.push(error) + } + } + + if (this.child && this.child.exitCode === null && this.child.signalCode === null) { + try { + await waitForExit(this.child, 3_000, 'Legacy target to exit') + } catch (error) { + errors.push(error) + this.child.kill('SIGTERM') + try { + await waitForExit(this.child, 2_000, 'Legacy target to terminate') + } catch (terminationError) { + errors.push(terminationError) + this.child.kill('SIGKILL') + } + } + } + + try { + await this.origin?.close() + } catch (error) { + errors.push(error) + } + + if (errors.length) throw new AggregateError(errors, 'Failed to clean up Legacy E2E harness') + } +} + +export async function withLegacyHarness(testContext, options, callback) { + const harness = new LegacyE2EHarness(options) + testContext.after(async () => { + try { + await harness.close() + } catch (error) { + const artifactDirectory = await harness.writeFailureArtifacts(error).catch(() => undefined) + if (artifactDirectory) { + console.error(`Legacy E2E cleanup failure artifacts: ${artifactDirectory}`) + } + throw error + } + }) + + try { + await harness.start() + return await callback(harness) + } catch (error) { + const artifactDirectory = await harness.writeFailureArtifacts(error).catch(() => undefined) + if (artifactDirectory) { + console.error(`Legacy E2E failure artifacts: ${artifactDirectory}`) + if (error instanceof Error) { + error.message = `${error.message}\nFailure artifacts: ${artifactDirectory}` + } else { + error = new Error(`${String(error)}\nFailure artifacts: ${artifactDirectory}`) + } + } + throw error + } +} diff --git a/packages/network-debugger/test/e2e/legacy/legacy-protocol.test.mjs b/packages/network-debugger/test/e2e/legacy/legacy-protocol.test.mjs new file mode 100644 index 0000000..df2f63c --- /dev/null +++ b/packages/network-debugger/test/e2e/legacy/legacy-protocol.test.mjs @@ -0,0 +1,623 @@ +import assert from 'node:assert/strict' +import test from 'node:test' + +import { withLegacyHarness } from './legacy-harness.mjs' + +const TEST_TIMEOUT_MS = 50_000 +const BINARY_WEBSOCKET_PAYLOAD = Buffer.from([0x00, 0xff, 0x10, 0x80, 0x42]) + +function eventUrl(params) { + return params.request?.url ?? params.response?.url ?? params.url +} + +function eventForUrl(client, method, url) { + return client.waitForEvent(method, (params) => eventUrl(params) === url) +} + +function assertTimestamp(value, label) { + assert.equal(typeof value, 'number', `${label} must be a number`) + assert.ok(Number.isFinite(value), `${label} must be finite`) + assert.ok(value >= 0, `${label} must not be negative`) +} + +function assertSuccessfulLifecycle(request, response, finished) { + const requestId = request.message.params.requestId + assert.ok(requestId, 'requestWillBeSent must include requestId') + assert.equal(response.message.params.requestId, requestId) + assert.equal(finished.message.params.requestId, requestId) + assert.ok(request.sequence < response.sequence, 'request must precede response') + assert.ok(response.sequence < finished.sequence, 'response must precede loadingFinished') + assertTimestamp(request.message.params.timestamp, 'request timestamp') + assertTimestamp(response.message.params.timestamp, 'response timestamp') + assertTimestamp(finished.message.params.timestamp, 'loadingFinished timestamp') +} + +function decodeBody(result) { + return result.base64Encoded + ? Buffer.from(result.body, 'base64') + : Buffer.from(result.body, 'utf8') +} + +async function successfulExchange(harness, scenario, { url, token, ...payload }) { + const requestPromise = eventForUrl(harness.client, 'Network.requestWillBeSent', url) + const scenarioPromise = harness.runScenario(scenario, { url, token, ...payload }) + const request = await requestPromise + const requestId = request.message.params.requestId + const response = await harness.client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === requestId + ) + const finished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ) + const result = await scenarioPromise + assertSuccessfulLifecycle(request, response, finished) + for (const method of [ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.loadingFinished' + ]) { + assert.equal( + harness.client.findEvents(method, (params) => params.requestId === requestId).length, + 1, + `${method} must be emitted exactly once for ${url}` + ) + } + return { request, response, finished, result } +} + +async function responseBody(harness, requestId) { + const exchange = await harness.client.command('Network.getResponseBody', { requestId }) + assert.equal(exchange.response.id, exchange.request.id) + assert.equal(typeof exchange.result?.body, 'string') + assert.equal(typeof exchange.result?.base64Encoded, 'boolean') + return exchange.result +} + +async function expectCdpError(client, method, params = {}) { + try { + await client.command(method, params, { timeoutMs: 3_000 }) + } catch (error) { + assert.ok(error.cdpResponse, `${method} must return a CDP error, not time out or disconnect`) + assert.equal(typeof error.cdpResponse.id, 'number') + assert.equal(typeof error.cdpError?.code, 'number') + assert.equal(typeof error.cdpError?.message, 'string') + assert.ok(error.cdpError.message.length > 0) + return error.cdpResponse + } + assert.fail(`${method} unexpectedly succeeded`) +} + +async function failedExchange(harness, scenario, url, token, { mayReceiveResponse = false } = {}) { + const requestPromise = eventForUrl(harness.client, 'Network.requestWillBeSent', url) + const scenarioPromise = harness.runScenario(scenario, { url, token }) + const request = await requestPromise + const requestId = request.message.params.requestId + const failed = await harness.client.waitForEvent( + 'Network.loadingFailed', + (params) => params.requestId === requestId + ) + const result = await scenarioPromise + + assert.ok(failed.sequence > request.sequence) + assertTimestamp(failed.message.params.timestamp, `${scenario} loadingFailed timestamp`) + assert.equal(typeof failed.message.params.errorText, 'string') + assert.ok(failed.message.params.errorText.length > 0) + assert.equal( + harness.client.findEvents('Network.loadingFailed', (params) => params.requestId === requestId) + .length, + 1, + `${scenario} must emit loadingFailed exactly once` + ) + assert.equal( + harness.client.findEvents('Network.loadingFinished', (params) => params.requestId === requestId) + .length, + 0, + `${scenario} must not also emit loadingFinished` + ) + if (!mayReceiveResponse) { + assert.equal( + harness.client.findEvents( + 'Network.responseReceived', + (params) => params.requestId === requestId + ).length, + 0, + `${scenario} must not manufacture a response` + ) + } + return { request, failed, result } +} + +test( + 'Legacy exposes standard discovery and answers every raw CDP command id', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const target = harness.sessionInfo.target + assert.equal(target.type, 'node') + assert.equal(harness.discoveredTarget.id, target.id) + assert.equal(harness.discoveredTarget.webSocketDebuggerUrl, target.webSocketDebuggerUrl) + assert.equal(harness.networkEnable.response.id, harness.networkEnable.request.id) + assert.deepEqual(harness.networkEnable.result, {}) + assert.equal(typeof harness.discovery.version['Protocol-Version'], 'string') + assert.ok( + harness.discovery.protocol.domains.some((domain) => domain.domain === 'Network'), + '/json/protocol must describe Network' + ) + + const before = harness.client.journal.length + const debuggerOutcome = await Promise.allSettled([ + harness.client.command('Debugger.enable', {}, { timeoutMs: 3_000 }), + harness.client.command('Runtime.enable', {}, { timeoutMs: 3_000 }) + ]) + for (const outcome of debuggerOutcome) { + if (outcome.status === 'fulfilled') { + assert.ok( + Object.hasOwn(outcome.value.response, 'result'), + 'successful CDP command must include result' + ) + } else { + assert.ok( + outcome.reason?.cdpResponse, + `known unsupported domains must return CDP errors: ${outcome.reason}` + ) + } + } + const missingBody = await expectCdpError(harness.client, 'Network.getResponseBody', { + requestId: 'missing-request-id' + }) + assert.ok( + [-32602, -32000].includes(missingBody.error.code), + `missing body must use invalid-params/server-error, received ${missingBody.error.code}` + ) + const unknownMethod = await expectCdpError( + harness.client, + 'NodeNetworkDevtools.unknownMethod' + ) + assert.equal(unknownMethod.error.code, -32601) + + const commandJournal = harness.client.journal.slice(before) + const sent = commandJournal.filter( + (record) => record.direction === 'send' && record.message.id !== undefined + ) + const received = new Map( + commandJournal + .filter((record) => record.direction === 'receive' && record.message.id !== undefined) + .map((record) => [record.message.id, record.message]) + ) + assert.ok(sent.length >= 4) + for (const command of sent) { + const response = received.get(command.message.id) + assert.ok( + response, + `${command.message.method} (${command.message.id}) received no result or CDP error` + ) + const hasResult = Object.hasOwn(response, 'result') + const hasError = Object.hasOwn(response, 'error') + assert.notEqual( + hasResult, + hasError, + `${command.message.method} (${command.message.id}) must receive exactly one of result/error` + ) + } + }) + } +) + +test( + 'Legacy ESM consumer captures real HTTP GET and Fetch POST lifecycles', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const getToken = harness.createToken('http-get') + const getUrl = harness.url('/get', getToken) + const get = await successfulExchange(harness, 'http-get', { + url: getUrl, + token: getToken + }) + assert.equal(get.request.message.params.request.method, 'GET') + assert.equal(get.response.message.params.response.status, 200) + assert.equal( + Buffer.from(get.result.bodyBase64, 'base64').toString('utf8'), + `get-response:${getToken}` + ) + const getBody = await responseBody(harness, get.request.message.params.requestId) + assert.equal(decodeBody(getBody).toString('utf8'), `get-response:${getToken}`) + + const frames = get.request.message.params.initiator?.stack?.callFrames ?? [] + assert.ok(frames.length > 0, 'Legacy initiator capability must include real call frames') + assert.ok( + frames.some((frame) => + frame.url.replaceAll('\\', '/').endsWith('/legacy/fixtures/scenario-runner.cjs') + ), + `initiator must reference the real consumer scenario: ${JSON.stringify(frames)}` + ) + + const postToken = harness.createToken('fetch-post') + const postUrl = harness.url('/post', postToken) + const post = await successfulExchange(harness, 'fetch-post', { + url: postUrl, + token: postToken + }) + assert.equal(post.request.message.params.request.method, 'POST') + assert.equal(post.request.message.params.request.postData, `fetch-request:${postToken}`) + const postData = await harness.client.command('Network.getRequestPostData', { + requestId: post.request.message.params.requestId + }) + assert.equal(postData.result.postData, `fetch-request:${postToken}`) + assert.equal(post.response.message.params.response.status, 201) + const postBody = await responseBody(harness, post.request.message.params.requestId) + assert.deepEqual(JSON.parse(decodeBody(postBody).toString('utf8')), { + token: postToken, + requestBody: `fetch-request:${postToken}` + }) + assert.deepEqual(JSON.parse(post.result.body), { + token: postToken, + requestBody: `fetch-request:${postToken}` + }) + + const chunkedToken = harness.createToken('http-post-chunks') + const chunkedUrl = harness.url('/post', chunkedToken) + const chunked = await successfulExchange(harness, 'http-post-chunks', { + url: chunkedUrl, + token: chunkedToken + }) + const expectedChunkedBody = `http-request:${chunkedToken}` + assert.equal(chunked.request.message.params.request.postData, expectedChunkedBody) + const chunkedPostData = await harness.client.command('Network.getRequestPostData', { + requestId: chunked.request.message.params.requestId + }) + assert.equal(chunkedPostData.result.postData, expectedChunkedBody) + assert.deepEqual( + JSON.parse(Buffer.from(chunked.result.bodyBase64, 'base64').toString('utf8')), + { token: chunkedToken, requestBody: expectedChunkedBody } + ) + }) + } +) + +test( + 'Legacy preserves text, gzip, and binary response bodies', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const textToken = harness.createToken('text') + const text = await successfulExchange(harness, 'body', { + url: harness.url('/text', textToken), + token: textToken + }) + const textBody = await responseBody(harness, text.request.message.params.requestId) + assert.equal(textBody.base64Encoded, false) + assert.equal(decodeBody(textBody).toString('utf8'), `legacy-text:${textToken}:你好`) + + const gzipToken = harness.createToken('gzip') + const gzip = await successfulExchange(harness, 'body', { + url: harness.url('/gzip', gzipToken), + token: gzipToken + }) + const gzipBody = await responseBody(harness, gzip.request.message.params.requestId) + assert.equal(gzipBody.base64Encoded, false) + assert.equal(decodeBody(gzipBody).toString('utf8'), `legacy-gzip:${gzipToken}:压缩内容`) + + const binaryToken = harness.createToken('binary') + const binary = await successfulExchange(harness, 'body', { + url: harness.url('/binary', binaryToken), + token: binaryToken + }) + const binaryBody = await responseBody(harness, binary.request.message.params.requestId) + assert.equal(binaryBody.base64Encoded, true) + assert.deepEqual(decodeBody(binaryBody), harness.origin.binaryBody) + }) + } +) + +test( + 'Legacy reports redirect, abort, reset, and timeout terminal states', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const redirectToken = harness.createToken('redirect') + const redirectUrl = harness.url('/redirect', redirectToken) + const destinationUrl = harness.url('/text', redirectToken) + const firstRequestPromise = eventForUrl( + harness.client, + 'Network.requestWillBeSent', + redirectUrl + ) + const destinationRequestPromise = eventForUrl( + harness.client, + 'Network.requestWillBeSent', + destinationUrl + ) + const redirectScenario = harness.runScenario('redirect', { + url: redirectUrl, + token: redirectToken + }) + const firstRequest = await firstRequestPromise + const destinationRequest = await destinationRequestPromise + const firstResponse = await harness.client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === firstRequest.message.params.requestId + ) + const firstFinished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === firstRequest.message.params.requestId + ) + const destinationResponse = await harness.client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === destinationRequest.message.params.requestId + ) + const destinationFinished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === destinationRequest.message.params.requestId + ) + const redirectResult = await redirectScenario + + assertSuccessfulLifecycle(firstRequest, firstResponse, firstFinished) + assertSuccessfulLifecycle(destinationRequest, destinationResponse, destinationFinished) + assert.notEqual( + firstRequest.message.params.requestId, + destinationRequest.message.params.requestId + ) + assert.equal(firstResponse.message.params.response.status, 302) + assert.equal(destinationResponse.message.params.response.status, 200) + assert.equal(redirectResult.redirect.status, 302) + assert.equal(redirectResult.destination.status, 200) + assert.equal(redirectResult.destinationUrl, destinationUrl) + + const resetToken = harness.createToken('reset') + const reset = await failedExchange( + harness, + 'reset', + harness.url('/reset', resetToken), + resetToken + ) + assert.equal(reset.result.failed, true) + + const timeoutToken = harness.createToken('timeout') + const timeout = await failedExchange( + harness, + 'timeout', + harness.url('/timeout', timeoutToken), + timeoutToken + ) + assert.equal(timeout.result.failed, true) + + const abortToken = harness.createToken('abort') + const abort = await failedExchange( + harness, + 'abort', + harness.url('/abort', abortToken), + abortToken, + { mayReceiveResponse: true } + ) + assert.equal(abort.result.aborted, true) + }) + } +) + +test( + 'Legacy preserves SSE fields and ordering from a real chunked stream', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const token = harness.createToken('sse') + const url = harness.url('/sse', token) + const requestPromise = eventForUrl(harness.client, 'Network.requestWillBeSent', url) + const scenarioPromise = harness.runScenario('sse', { url, token }) + const request = await requestPromise + const requestId = request.message.params.requestId + const response = await harness.client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === requestId + ) + const first = await harness.client.waitForEvent( + 'Network.eventSourceMessageReceived', + (params) => params.requestId === requestId && params.eventId === '1' + ) + const second = await harness.client.waitForEvent( + 'Network.eventSourceMessageReceived', + (params) => params.requestId === requestId && params.eventId === '2' + ) + const third = await harness.client.waitForEvent( + 'Network.eventSourceMessageReceived', + (params) => params.requestId === requestId && params.eventId === '3' + ) + const finished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ) + const result = await scenarioPromise + + assertSuccessfulLifecycle(request, response, finished) + assert.equal(response.message.params.type, 'EventSource') + assert.deepEqual( + [first, second, third].map(({ message }) => ({ + eventName: message.params.eventName, + eventId: message.params.eventId, + data: message.params.data + })), + [ + { eventName: 'alpha', eventId: '1', data: 'first\nline-2' }, + { eventName: 'message', eventId: '2', data: 'second' }, + { eventName: 'omega', eventId: '3', data: 'third' } + ] + ) + assert.ok(response.sequence < first.sequence) + assert.ok(first.sequence < second.sequence) + assert.ok(second.sequence < third.sequence) + assert.ok(third.sequence < finished.sequence) + assert.equal( + harness.client.findEvents( + 'Network.responseReceived', + (params) => params.requestId === requestId + ).length, + 1, + 'SSE must emit responseReceived exactly once' + ) + assert.equal( + harness.client.findEvents( + 'Network.eventSourceMessageReceived', + (params) => params.requestId === requestId + ).length, + 3, + 'SSE must emit exactly the three origin events' + ) + assert.equal( + harness.client.findEvents( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ).length, + 1, + 'SSE must terminate exactly once' + ) + assert.equal(result.status, 200) + assert.match(result.body, /event: alpha/) + }) + } +) + +test( + 'Legacy reports a real compressed WebSocket handshake, text, binary, and close events', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const token = harness.createToken('websocket') + const url = harness.webSocketUrl('/websocket', token) + const createdPromise = eventForUrl(harness.client, 'Network.webSocketCreated', url) + const scenarioPromise = harness.runScenario('websocket', { + url, + token, + binaryBase64: BINARY_WEBSOCKET_PAYLOAD.toString('base64') + }) + const created = await createdPromise + const requestId = created.message.params.requestId + const willSend = await harness.client.waitForEvent( + 'Network.webSocketWillSendHandshakeRequest', + (params) => params.requestId === requestId + ) + const handshake = await harness.client.waitForEvent( + 'Network.webSocketHandshakeResponseReceived', + (params) => params.requestId === requestId + ) + const textSent = await harness.client.waitForEvent( + 'Network.webSocketFrameSent', + (params) => + params.requestId === requestId && + params.response.opcode === 1 && + params.response.payloadData === `client-text:${token}` + ) + const textReceived = await harness.client.waitForEvent( + 'Network.webSocketFrameReceived', + (params) => + params.requestId === requestId && + params.response.opcode === 1 && + params.response.payloadData === `client-text:${token}` + ) + const binaryPayload = BINARY_WEBSOCKET_PAYLOAD.toString('base64') + const binarySent = await harness.client.waitForEvent( + 'Network.webSocketFrameSent', + (params) => + params.requestId === requestId && + params.response.opcode === 2 && + params.response.payloadData === binaryPayload + ) + const binaryReceived = await harness.client.waitForEvent( + 'Network.webSocketFrameReceived', + (params) => + params.requestId === requestId && + params.response.opcode === 2 && + params.response.payloadData === binaryPayload + ) + const closed = await harness.client.waitForEvent( + 'Network.webSocketClosed', + (params) => params.requestId === requestId + ) + const result = await scenarioPromise + const extensionHeader = Object.entries(handshake.message.params.response.headers).find( + ([name]) => name.toLowerCase() === 'sec-websocket-extensions' + )?.[1] + + assert.equal(handshake.message.params.response.status, 101) + assert.match(String(extensionHeader), /permessage-deflate/) + assert.ok(created.sequence < willSend.sequence) + assert.ok(willSend.sequence < handshake.sequence) + assert.ok(handshake.sequence < textSent.sequence) + assert.ok(textSent.sequence < textReceived.sequence) + assert.ok(textReceived.sequence < binarySent.sequence) + assert.ok(binarySent.sequence < binaryReceived.sequence) + assert.ok(binaryReceived.sequence < closed.sequence) + assert.equal(result.textEcho, `client-text:${token}`) + assert.equal(result.textEchoIsBinary, false) + assert.equal(result.binaryEchoBase64, binaryPayload) + assert.equal(result.binaryEchoIsBinary, true) + assert.equal(result.extensions, 'permessage-deflate') + assert.equal(result.close.code, 1000) + assert.equal( + harness.client.findEvents( + 'Network.loadingFailed', + (params) => params.requestId === requestId + ).length, + 0, + 'a successful WebSocket upgrade must not also report HTTP loadingFailed' + ) + }) + } +) + +test( + 'Legacy concurrent requests retain stable distinct request ids', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'esm' }, async (harness) => { + const token = harness.createToken('concurrent') + const urls = Array.from({ length: 20 }, (_value, index) => + harness.url('/concurrent', token, { index }) + ) + const requestPromises = urls.map((url) => + eventForUrl(harness.client, 'Network.requestWillBeSent', url) + ) + const scenarioPromise = harness.runScenario('concurrent', { urls, token }) + const requests = await Promise.all(requestPromises) + const terminals = await Promise.all( + requests.map(async (request) => { + const requestId = request.message.params.requestId + const response = await harness.client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === requestId + ) + const finished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ) + assertSuccessfulLifecycle(request, response, finished) + return requestId + }) + ) + const results = await scenarioPromise + + assert.equal(new Set(terminals).size, urls.length) + assert.equal(results.length, urls.length) + assert.ok(results.every((result) => result.status === 200)) + }) + } +) + +test( + 'Legacy works through the built CommonJS public package consumer', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withLegacyHarness(t, { consumer: 'cjs' }, async (harness) => { + assert.equal(harness.sessionInfo.mode, 'legacy') + const token = harness.createToken('cjs') + const exchange = await successfulExchange(harness, 'http-get', { + url: harness.url('/get', token), + token + }) + assert.equal(exchange.response.message.params.response.status, 200) + const body = await responseBody(harness, exchange.request.message.params.requestId) + assert.equal(decodeBody(body).toString('utf8'), `get-response:${token}`) + }) + } +) diff --git a/packages/network-debugger/test/e2e/native-protocol.test.mjs b/packages/network-debugger/test/e2e/native-protocol.test.mjs new file mode 100644 index 0000000..ebcf468 --- /dev/null +++ b/packages/network-debugger/test/e2e/native-protocol.test.mjs @@ -0,0 +1,260 @@ +import assert from 'node:assert/strict' +import { createHash } from 'node:crypto' +import { readFile } from 'node:fs/promises' +import { resolve } from 'node:path' +import test from 'node:test' + +import { withNativeHarness } from './harness/native-harness.mjs' + +const TEST_TIMEOUT_MS = 30_000 + +function eventForUrl(client, method, url) { + return client.waitForEvent(method, (params) => { + const eventUrl = params.request?.url ?? params.response?.url + return eventUrl === url + }) +} + +function assertTimestamp(value, label) { + assert.equal(typeof value, 'number', `${label} must be a number`) + assert.ok(Number.isFinite(value), `${label} must be finite`) + assert.ok(value >= 0, `${label} must not be negative`) +} + +function assertNativeWallTime(value) { + assertTimestamp(value, 'request wallTime') + // Node's native Network domain currently emits epoch milliseconds on some + // releases even though CDP models wallTime as TimeSinceEpoch (seconds). + // NativeAdapter intentionally forwards the official runtime unchanged. + const epochMilliseconds = value > 100_000_000_000 ? value : value * 1_000 + assert.ok( + Math.abs(Date.now() - epochMilliseconds) < 60_000, + `wallTime must represent the current epoch; received ${value}` + ) +} + +function assertSuccessfulLifecycle(client, request, response, finished) { + const requestId = request.message.params.requestId + assert.ok(requestId, 'requestWillBeSent must include a requestId') + assert.equal(response.message.params.requestId, requestId) + assert.equal(finished.message.params.requestId, requestId) + assert.ok(request.sequence < response.sequence, 'request must precede response') + assert.ok(response.sequence < finished.sequence, 'response must precede loadingFinished') + + assertTimestamp(request.message.params.timestamp, 'request timestamp') + assertTimestamp(response.message.params.timestamp, 'response timestamp') + assertTimestamp(finished.message.params.timestamp, 'loadingFinished timestamp') + assert.ok( + request.message.params.timestamp <= response.message.params.timestamp, + 'request timestamp must not exceed response timestamp' + ) + assert.ok( + response.message.params.timestamp <= finished.message.params.timestamp, + 'response timestamp must not exceed loadingFinished timestamp' + ) + + assertNativeWallTime(request.message.params.wallTime) + for (const method of [ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.loadingFinished' + ]) { + assert.equal( + client.findEvents(method, (params) => params.requestId === requestId).length, + 1, + `${method} must be emitted exactly once` + ) + } +} + +function decodeBody(result) { + return result.base64Encoded ? Buffer.from(result.body, 'base64').toString('utf8') : result.body +} + +test( + 'native adapter uses a real Node Inspector session with correlated CDP commands', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withNativeHarness(t, async (harness) => { + assert.equal(harness.sessionInfo.mode, 'native') + assert.deepEqual(harness.nativeFunctionsUnchanged, { + fetch: true, + httpRequest: true, + httpsRequest: true + }) + assert.equal(harness.sessionInfo.target.webSocketDebuggerUrl, harness.inspectorUrl) + assert.equal(harness.networkEnable.request.id, harness.networkEnable.response.id) + assert.deepEqual(harness.networkEnable.result, {}) + + const evaluation = await harness.client.command('Runtime.evaluate', { + expression: 'process.pid', + returnByValue: true + }) + assert.equal(evaluation.result.result.type, 'number') + assert.equal(evaluation.result.result.value, harness.targetPid) + }) + } +) + +test( + 'native adapter reports a real HTTP lifecycle and source initiator', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withNativeHarness(t, async (harness) => { + const token = harness.createToken('http') + const url = harness.url('/http', token) + const requestPromise = eventForUrl(harness.client, 'Network.requestWillBeSent', url) + const responsePromise = eventForUrl(harness.client, 'Network.responseReceived', url) + + const scenarioPromise = harness.runScenario('http', { url, token }) + const request = await requestPromise + const response = await responsePromise + const finished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === request.message.params.requestId + ) + const scenario = await scenarioPromise + + assertSuccessfulLifecycle(harness.client, request, response, finished) + assert.equal(request.message.params.request.method, 'GET') + assert.equal(response.message.params.response.status, 200) + assert.equal(response.message.params.response.headers['x-e2e-token'], token) + assert.deepEqual(scenario, { status: 200, body: `http-response:${token}` }) + + if (harness.sessionInfo.capabilities?.initiator !== false) { + const frames = request.message.params.initiator?.stack?.callFrames ?? [] + assert.ok(frames.length > 0, 'supported initiator capability must include call frames') + assert.ok( + frames.some((frame) => + frame.url.replaceAll('\\', '/').endsWith('/test/e2e/fixtures/native-target.mjs') + ), + `initiator must reference native-target.mjs; received ${JSON.stringify(frames)}` + ) + } + }) + } +) + +test( + 'native adapter reports a real Fetch lifecycle and response body', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withNativeHarness(t, async (harness) => { + const token = harness.createToken('fetch') + const url = harness.url('/fetch', token) + const requestPromise = eventForUrl(harness.client, 'Network.requestWillBeSent', url) + const responsePromise = eventForUrl(harness.client, 'Network.responseReceived', url) + + const scenarioPromise = harness.runScenario('fetch', { url, token }) + const request = await requestPromise + const response = await responsePromise + const finished = await harness.client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === request.message.params.requestId + ) + const scenario = await scenarioPromise + + assertSuccessfulLifecycle(harness.client, request, response, finished) + assert.equal(request.message.params.request.method, 'POST') + assert.equal(response.message.params.response.status, 201) + + const bodyExchange = await harness.client.command('Network.getResponseBody', { + requestId: request.message.params.requestId + }) + const body = JSON.parse(decodeBody(bodyExchange.result)) + assert.deepEqual(body, { + token, + requestBody: `fetch-request:${token}` + }) + assert.equal(scenario.status, 201) + assert.deepEqual(JSON.parse(scenario.body), body) + }) + } +) + +test( + 'native adapter terminates a failed request with loadingFailed only', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withNativeHarness(t, async (harness) => { + const token = harness.createToken('failed') + const url = harness.url('/reset', token) + const requestPromise = eventForUrl(harness.client, 'Network.requestWillBeSent', url) + const scenarioPromise = harness.runScenario('failed', { url, token }) + + const request = await requestPromise + const requestId = request.message.params.requestId + const failed = await harness.client.waitForEvent( + 'Network.loadingFailed', + (params) => params.requestId === requestId + ) + const scenario = await scenarioPromise + + assert.equal(scenario.failed, true) + assert.ok(failed.sequence > request.sequence) + assertTimestamp(failed.message.params.timestamp, 'loadingFailed timestamp') + assert.equal(typeof failed.message.params.errorText, 'string') + assert.ok(failed.message.params.errorText.length > 0) + assert.equal( + harness.client.findEvents( + 'Network.responseReceived', + (params) => params.requestId === requestId + ).length, + 0 + ) + assert.equal( + harness.client.findEvents( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ).length, + 0 + ) + }) + } +) + +test( + 'native adapter records a real backend-neutral Session and HAR', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + await withNativeHarness( + t, + async (harness) => { + assert.equal(harness.sessionInfo.mode, 'native') + assert.equal(harness.sessionInfo.session?.directory, harness.sessionDirectory) + + const token = harness.createToken('native-session') + const url = harness.url('/http', token) + const scenario = await harness.runScenario('http', { url, token }) + assert.deepEqual(scenario, { status: 200, body: `http-response:${token}` }) + + await harness.finalizeSession() + const manifest = JSON.parse( + await readFile(resolve(harness.sessionDirectory, 'manifest.json'), 'utf8') + ) + const har = JSON.parse( + await readFile(resolve(harness.sessionDirectory, 'session.har'), 'utf8') + ) + + assert.equal(manifest.state, 'completed') + assert.equal(manifest.target.id, harness.sessionInfo.target.id) + assert.equal(manifest.stats.requestCount, 1) + assert.equal(manifest.stats.failedRequestCount, 0) + assert.equal(manifest.stats.bodyErrorCount, 0) + assert.equal(manifest.stats.bodyCount, 1) + const indexedRequest = Object.values(manifest.requestIndex)[0] + assert.equal(indexedRequest.request.url, url) + const indexedBody = manifest.bodyIndex[indexedRequest.requestId] + const body = await readFile(resolve(harness.sessionDirectory, indexedBody.path)) + assert.equal(createHash('sha256').update(body).digest('hex'), indexedBody.sha256) + assert.equal(body.toString('utf8'), `http-response:${token}`) + + assert.equal(har.log.version, '1.2') + assert.equal(har.log.entries.length, 1) + assert.equal(har.log.entries[0].request.url, url) + assert.equal(har.log.entries[0].response.content.text, `http-response:${token}`) + }, + { recordSession: true } + ) + } +) diff --git a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs new file mode 100644 index 0000000..3ed36cb --- /dev/null +++ b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs @@ -0,0 +1,110 @@ +import assert from 'node:assert/strict' +import http from 'node:http' +import { createRequire } from 'node:module' +import test from 'node:test' +import { join } from 'node:path' + +import { installPackedPackage, removePackedInstallation } from '../pack/packed-package.mjs' + +const ROUNDS = Number(process.env.NND_OS_SMOKE_ROUNDS ?? 20) +const TEST_TIMEOUT_MS = 240_000 + +assert.ok(Number.isInteger(ROUNDS) && ROUNDS >= 20, 'OS smoke must run at least 20 rounds') + +function requestJson(url, timeoutMs = 3_000) { + return new Promise((resolve, reject) => { + const request = http.get(url, { agent: false }, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + const text = Buffer.concat(chunks).toString('utf8') + if (response.statusCode !== 200) { + reject(new Error(`${url} returned HTTP ${response.statusCode}: ${text}`)) + return + } + try { + resolve(JSON.parse(text)) + } catch (error) { + reject(new Error(`${url} returned invalid JSON: ${text}`, { cause: error })) + } + }) + }) + request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) + request.once('error', reject) + }) +} + +async function assertEndpointClosed(url) { + let lastResponse + for (let attempt = 0; attempt < 10; attempt += 1) { + try { + lastResponse = await requestJson(url, 500) + } catch { + return + } + await new Promise((resolve) => setTimeout(resolve, 50)) + } + assert.fail( + `target endpoint remained open after dispose: ${url}\n${JSON.stringify(lastResponse)}` + ) +} + +async function runRounds(register, mode) { + const controllerPid = process.pid + for (let round = 1; round <= ROUNDS; round += 1) { + let registration + let target + try { + registration = register({ + mode, + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false }, + legacy: { serverPort: 0 } + }) + const ready = await registration.ready + target = ready.target + assert.equal(process.pid, controllerPid, `${mode} round ${round} changed controller process`) + assert.equal(ready.mode, mode, `${mode} round ${round} selected another adapter`) + assert.equal(registration.status().state, 'ready') + assert.match(target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) + assert.match(target.webSocketDebuggerUrl, /^ws:\/\/127\.0\.0\.1:\d+\//) + + const targets = await requestJson(target.discoveryUrl) + assert.ok(Array.isArray(targets), `${mode} round ${round} discovery must be an array`) + assert.ok( + targets.some((candidate) => candidate.id === target.id), + `${mode} round ${round} target is absent from discovery` + ) + } finally { + await registration?.dispose() + } + + assert.equal(registration.status().state, 'disposed') + await assertEndpointClosed(target.discoveryUrl) + } +} + +test( + 'packed Native and Legacy adapters each survive 20 rounds in one process', + { timeout: TEST_TIMEOUT_MS }, + async (t) => { + assert.ok( + process.execArgv.some((argument) => argument.startsWith('--experimental-network-inspection')), + 'start this controller with --experimental-network-inspection' + ) + + const installation = await installPackedPackage('nnd-os-smoke-') + t.after(() => removePackedInstallation(installation)) + const consumerRequire = createRequire(join(installation.root, 'consumer.cjs')) + const { register } = consumerRequire('node-network-devtools') + assert.equal(typeof register, 'function') + + await t.test(`Native adapter: ${ROUNDS} consecutive rounds`, () => + runRounds(register, 'native') + ) + await t.test(`Legacy adapter: ${ROUNDS} consecutive rounds`, () => + runRounds(register, 'legacy') + ) + } +) diff --git a/packages/network-debugger/test/e2e/pack/legacy-runtime-consumer.cjs b/packages/network-debugger/test/e2e/pack/legacy-runtime-consumer.cjs new file mode 100644 index 0000000..7ee193e --- /dev/null +++ b/packages/network-debugger/test/e2e/pack/legacy-runtime-consumer.cjs @@ -0,0 +1,71 @@ +'use strict' + +const http = require('node:http') +const { register } = require('node-network-devtools') + +if (!process.send) throw new Error('Legacy runtime consumer requires an IPC channel') + +function send(message) { + return new Promise((resolve, reject) => { + process.send(message, (error) => (error ? reject(error) : resolve())) + }) +} + +function request(url) { + return new Promise((resolve, reject) => { + const outgoing = http.get(url, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + resolve({ + status: response.statusCode, + bodyBase64: Buffer.concat(chunks).toString('base64') + }) + }) + }) + outgoing.once('error', reject) + }) +} + +async function main() { + const registration = register({ + mode: 'legacy', + devtools: { open: false }, + legacy: { serverPort: 0 } + }) + const ready = await registration.ready + await send({ type: 'ready', ready, pid: process.pid }) + + process.on('message', async (message) => { + if (message?.type === 'request') { + try { + await send({ type: 'request-result', id: message.id, result: await request(message.url) }) + } catch (error) { + await send({ + type: 'request-result', + id: message.id, + error: error instanceof Error ? error.stack : String(error) + }) + } + return + } + + if (message?.type === 'shutdown') { + await registration.dispose() + await send({ type: 'shutdown-complete' }) + process.removeAllListeners('message') + process.disconnect() + } + }) +} + +main().catch(async (error) => { + console.error(error) + try { + await send({ type: 'fatal', error: error instanceof Error ? error.stack : String(error) }) + } finally { + process.exitCode = 1 + process.disconnect() + } +}) diff --git a/packages/network-debugger/test/e2e/pack/legacy-runtime.test.mjs b/packages/network-debugger/test/e2e/pack/legacy-runtime.test.mjs new file mode 100644 index 0000000..468cb22 --- /dev/null +++ b/packages/network-debugger/test/e2e/pack/legacy-runtime.test.mjs @@ -0,0 +1,443 @@ +import assert from 'node:assert/strict' +import { spawn } from 'node:child_process' +import { randomUUID } from 'node:crypto' +import { copyFile } from 'node:fs/promises' +import http from 'node:http' +import { createRequire } from 'node:module' +import test from 'node:test' +import { dirname, join } from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' + +import { installPackedPackage, removePackedInstallation } from './packed-package.mjs' + +const TEST_TIMEOUT_MS = 120_000 +const IO_TIMEOUT_MS = 10_000 +const FIXTURE_DIRECTORY = dirname(fileURLToPath(import.meta.url)) + +class CdpClient { + constructor(WebSocket, url) { + this.WebSocket = WebSocket + this.url = url + this.nextId = 0 + this.pending = new Map() + this.events = [] + this.waiters = new Set() + } + + async connect() { + const socket = new this.WebSocket(this.url) + this.socket = socket + await new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + socket.terminate() + reject(new Error(`Timed out connecting to ${this.url}`)) + }, IO_TIMEOUT_MS) + const cleanup = () => { + clearTimeout(timer) + socket.off('open', onOpen) + socket.off('error', onError) + } + const onOpen = () => { + cleanup() + resolve() + } + const onError = (error) => { + cleanup() + reject(error) + } + socket.once('open', onOpen) + socket.once('error', onError) + }) + socket.on('message', (data) => this.onMessage(data)) + socket.on('error', (error) => this.onDisconnect(error)) + socket.on('close', () => this.onDisconnect(new Error('CDP WebSocket closed'))) + return this + } + + command(method, params = {}) { + const id = ++this.nextId + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + this.pending.delete(id) + reject(new Error(`Timed out waiting for ${method} (${id})`)) + }, IO_TIMEOUT_MS) + this.pending.set(id, { + resolve: (message) => { + clearTimeout(timer) + if (message.error) { + reject(new Error(`${method} failed: ${message.error.message}`)) + } else { + resolve(message.result) + } + }, + reject: (error) => { + clearTimeout(timer) + reject(error) + } + }) + this.socket.send(JSON.stringify({ id, method, params }), (error) => { + if (!error) return + const pending = this.pending.get(id) + this.pending.delete(id) + pending?.reject(error) + }) + }) + } + + waitForEvent(method, predicate = () => true) { + const existing = this.events.find( + (message) => message.method === method && predicate(message.params) + ) + if (existing) return Promise.resolve(existing.params) + + return new Promise((resolve, reject) => { + const waiter = { method, predicate, resolve, reject, timer: undefined } + waiter.timer = setTimeout(() => { + this.waiters.delete(waiter) + reject(new Error(`Timed out waiting for ${method}`)) + }, IO_TIMEOUT_MS) + this.waiters.add(waiter) + }) + } + + onMessage(data) { + const message = JSON.parse(data.toString()) + if (message.id !== undefined) { + const pending = this.pending.get(message.id) + if (!pending) return + this.pending.delete(message.id) + pending.resolve(message) + return + } + if (!message.method) return + this.events.push(message) + for (const waiter of [...this.waiters]) { + if (waiter.method !== message.method || !waiter.predicate(message.params)) continue + clearTimeout(waiter.timer) + this.waiters.delete(waiter) + waiter.resolve(message.params) + } + } + + onDisconnect(error) { + for (const pending of this.pending.values()) pending.reject(error) + this.pending.clear() + for (const waiter of this.waiters) { + clearTimeout(waiter.timer) + waiter.reject(error) + } + this.waiters.clear() + } + + async close() { + const socket = this.socket + if (!socket || socket.readyState === this.WebSocket.CLOSED) return + await new Promise((resolve) => { + const timer = setTimeout(() => { + socket.terminate() + resolve() + }, 2_000) + socket.once('close', () => { + clearTimeout(timer) + resolve() + }) + socket.close() + }) + } +} + +function listen(server) { + return new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) +} + +function closeServer(server) { + if (!server?.listening) return Promise.resolve() + return new Promise((resolve, reject) => + server.close((error) => (error ? reject(error) : resolve())) + ) +} + +function requestBuffer(url, timeoutMs = IO_TIMEOUT_MS) { + return new Promise((resolve, reject) => { + const request = http.get(url, { agent: false }, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => resolve({ response, body: Buffer.concat(chunks) })) + }) + request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) + request.once('error', reject) + }) +} + +function waitForMessage(child, messages, predicate, timeoutMs = IO_TIMEOUT_MS) { + const existing = messages.find(predicate) + if (existing) return Promise.resolve(existing) + if (child.exitCode !== null || child.signalCode !== null) { + return Promise.reject(new Error(`Legacy consumer already exited with ${child.exitCode}`)) + } + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error('Timed out waiting for Legacy consumer IPC')) + }, timeoutMs) + const cleanup = () => { + clearTimeout(timer) + child.off('message', onMessage) + child.off('exit', onExit) + } + const onMessage = (message) => { + if (!predicate(message)) return + cleanup() + resolve(message) + } + const onExit = (code, signal) => { + cleanup() + reject(new Error(`Legacy consumer exited before IPC (code=${code}, signal=${signal})`)) + } + child.on('message', onMessage) + child.once('exit', onExit) + }) +} + +function send(child, message) { + return new Promise((resolve, reject) => + child.send(message, (error) => (error ? reject(error) : resolve())) + ) +} + +function waitForExit(child, timeoutMs = IO_TIMEOUT_MS) { + if (child.exitCode !== null || child.signalCode !== null) return Promise.resolve() + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + child.off('exit', onExit) + reject(new Error('Timed out waiting for Legacy consumer to exit')) + }, timeoutMs) + const onExit = () => { + clearTimeout(timer) + resolve() + } + child.once('exit', onExit) + }) +} + +function runFinitePreload(packageDirectory, timeoutMs = 15_000) { + const registerUrl = pathToFileURL(join(packageDirectory, 'dist/register.mjs')).href + const source = + "process.stdout.write('@@NND_PACK_FINITE@@' + JSON.stringify({ pid: process.pid }) + '\\n')" + return new Promise((resolve, reject) => { + const child = spawn(process.execPath, [`--import=${registerUrl}`, '-e', source], { + cwd: packageDirectory, + env: { + ...process.env, + NND_MODE: 'legacy', + NND_LEGACY_SERVER_PORT: '0', + NND_PRELOAD_REPORT: '1' + }, + stdio: ['ignore', 'pipe', 'pipe'] + }) + let stdout = '' + let stderr = '' + let timedOut = false + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => (stdout += chunk)) + child.stderr.on('data', (chunk) => (stderr += chunk)) + const timer = setTimeout(() => { + timedOut = true + child.kill('SIGKILL') + }, timeoutMs) + child.once('error', (error) => { + clearTimeout(timer) + reject(error) + }) + child.once('close', (code, signal) => { + clearTimeout(timer) + if (timedOut) { + reject( + new Error( + `Packed finite preload did not exit naturally on ${process.version}.\n` + + `stdout:\n${stdout}\nstderr:\n${stderr}` + ) + ) + return + } + resolve({ code, signal, stdout, stderr }) + }) + }) +} + +async function waitForEndpointClosed(url, timeoutMs = 5_000) { + const deadline = Date.now() + timeoutMs + while (Date.now() < deadline) { + try { + await requestBuffer(url, 500) + } catch { + return + } + await new Promise((resolve) => setTimeout(resolve, 25)) + } + throw new Error(`Packed finite Legacy target remained reachable after exit: ${url}`) +} + +test( + 'the packed Legacy adapter runs a real CDP lifecycle under this Node runtime', + { timeout: TEST_TIMEOUT_MS }, + async () => { + const installation = await installPackedPackage('nnd-legacy-runtime-') + const consumerRequire = createRequire(join(installation.root, 'consumer.cjs')) + const WebSocket = consumerRequire('ws') + const fixture = join(installation.root, 'legacy-runtime-consumer.cjs') + await copyFile(join(FIXTURE_DIRECTORY, 'legacy-runtime-consumer.cjs'), fixture) + + const token = `${process.platform}-${process.version}-${process.pid}` + const expectedBody = Buffer.from(`legacy-pack-runtime:${token}`) + const origin = http.createServer((_request, response) => { + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': String(expectedBody.length), + 'x-nnd-pack-token': token + }) + response.end(expectedBody) + }) + const messages = [] + let child + let client + + try { + await listen(origin) + const address = origin.address() + const requestUrl = `http://127.0.0.1:${address.port}/compat?token=${encodeURIComponent(token)}` + + child = spawn(process.execPath, [fixture], { + cwd: installation.root, + env: { ...process.env }, + stdio: ['ignore', 'pipe', 'pipe', 'ipc'] + }) + let stdout = '' + let stderr = '' + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => (stdout += chunk)) + child.stderr.on('data', (chunk) => (stderr += chunk)) + child.on('message', (message) => messages.push(message)) + + const readyMessage = await waitForMessage( + child, + messages, + (message) => message?.type === 'ready' + ) + const ready = readyMessage.ready + assert.equal(ready.mode, 'legacy') + assert.match(ready.target.webSocketDebuggerUrl, /^ws:\/\/127\.0\.0\.1:\d+\//) + assert.match(ready.target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) + + const discovery = await requestBuffer(ready.target.discoveryUrl) + assert.equal(discovery.response.statusCode, 200) + const targets = JSON.parse(discovery.body.toString('utf8')) + assert.ok(targets.some((target) => target.id === ready.target.id)) + + client = await new CdpClient(WebSocket, ready.target.webSocketDebuggerUrl).connect() + assert.deepEqual(await client.command('Network.enable'), {}) + + const requestEventPromise = client.waitForEvent( + 'Network.requestWillBeSent', + (params) => params.request?.url === requestUrl + ) + const requestMessageId = randomUUID() + const resultPromise = waitForMessage( + child, + messages, + (message) => message?.type === 'request-result' && message.id === requestMessageId + ) + await send(child, { type: 'request', id: requestMessageId, url: requestUrl }) + const resultMessage = await resultPromise + assert.equal(resultMessage.error, undefined, resultMessage.error) + assert.equal(resultMessage.result.status, 200) + assert.deepEqual(Buffer.from(resultMessage.result.bodyBase64, 'base64'), expectedBody) + + const requestEvent = await requestEventPromise + const requestId = requestEvent.requestId + const responseEvent = await client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === requestId + ) + const finishedEvent = await client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ) + assert.equal(responseEvent.response.status, 200) + assert.equal(typeof finishedEvent.timestamp, 'number') + + const body = await client.command('Network.getResponseBody', { requestId }) + const observedBody = body.base64Encoded + ? Buffer.from(body.body, 'base64') + : Buffer.from(body.body, 'utf8') + assert.deepEqual(observedBody, expectedBody) + + for (const method of [ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.loadingFinished' + ]) { + assert.equal( + client.events.filter( + (message) => message.method === method && message.params.requestId === requestId + ).length, + 1, + `${method} must be emitted exactly once` + ) + } + + await client.close() + client = undefined + const shutdown = waitForMessage( + child, + messages, + (message) => message?.type === 'shutdown-complete' + ) + await send(child, { type: 'shutdown' }) + await shutdown + await waitForExit(child) + assert.equal(child.exitCode, 0, `stdout:\n${stdout}\nstderr:\n${stderr}`) + + await assert.rejects( + requestBuffer(ready.target.discoveryUrl, 1_000), + 'dispose must close the Legacy discovery endpoint before resolving' + ) + + const finite = await runFinitePreload(installation.packageDirectory) + assert.equal( + finite.code, + 0, + `packed finite preload failed on ${process.version}:\n${finite.stderr}` + ) + assert.equal(finite.signal, null) + assert.doesNotMatch(finite.stderr, /NND_LEGACY_CHILD_START_FAILED/) + assert.equal(finite.stdout.match(/@@NND_PACK_FINITE@@/g)?.length, 1) + const readyPrefix = '[nnd:ready] ' + const readyLines = finite.stderr.split(/\r?\n/).filter((line) => line.includes(readyPrefix)) + assert.equal(readyLines.length, 1, finite.stderr) + const finiteReady = JSON.parse( + readyLines[0].slice(readyLines[0].indexOf(readyPrefix) + readyPrefix.length) + ) + assert.equal(finiteReady.mode, 'legacy') + assert.match(finiteReady.target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) + await waitForEndpointClosed(finiteReady.target.discoveryUrl) + } finally { + await Promise.allSettled([client?.close(), closeServer(origin)]) + if (child && child.exitCode === null && child.signalCode === null) { + child.kill('SIGTERM') + await waitForExit(child, 2_000).catch(() => child.kill('SIGKILL')) + } + await removePackedInstallation(installation) + } + } +) diff --git a/packages/network-debugger/test/e2e/pack/native-runtime-consumer.cjs b/packages/network-debugger/test/e2e/pack/native-runtime-consumer.cjs new file mode 100644 index 0000000..a1dff55 --- /dev/null +++ b/packages/network-debugger/test/e2e/pack/native-runtime-consumer.cjs @@ -0,0 +1,87 @@ +'use strict' + +const http = require('node:http') +const https = require('node:https') +const { register } = require('node-network-devtools') + +if (!process.send) throw new Error('Native runtime consumer requires an IPC channel') + +const originals = { + fetch: globalThis.fetch, + httpRequest: http.request, + httpsRequest: https.request +} + +function send(message) { + return new Promise((resolve, reject) => { + process.send(message, (error) => (error ? reject(error) : resolve())) + }) +} + +function request(url) { + return new Promise((resolve, reject) => { + const outgoing = http.get(url, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + resolve({ + status: response.statusCode, + bodyBase64: Buffer.concat(chunks).toString('base64') + }) + }) + }) + outgoing.once('error', reject) + }) +} + +async function main() { + const registration = register({ + mode: 'native', + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false } + }) + const ready = await registration.ready + await send({ + type: 'ready', + ready, + pid: process.pid, + functionsUnchanged: { + fetch: globalThis.fetch === originals.fetch, + httpRequest: http.request === originals.httpRequest, + httpsRequest: https.request === originals.httpsRequest + } + }) + + process.on('message', async (message) => { + if (message?.type === 'request') { + try { + await send({ type: 'request-result', id: message.id, result: await request(message.url) }) + } catch (error) { + await send({ + type: 'request-result', + id: message.id, + error: error instanceof Error ? error.stack : String(error) + }) + } + return + } + + if (message?.type === 'shutdown') { + await registration.dispose() + await send({ type: 'shutdown-complete' }) + process.removeAllListeners('message') + process.disconnect() + } + }) +} + +main().catch(async (error) => { + console.error(error) + try { + await send({ type: 'fatal', error: error instanceof Error ? error.stack : String(error) }) + } finally { + process.exitCode = 1 + process.disconnect() + } +}) diff --git a/packages/network-debugger/test/e2e/pack/native-runtime.test.mjs b/packages/network-debugger/test/e2e/pack/native-runtime.test.mjs new file mode 100644 index 0000000..3f742ec --- /dev/null +++ b/packages/network-debugger/test/e2e/pack/native-runtime.test.mjs @@ -0,0 +1,379 @@ +import assert from 'node:assert/strict' +import { spawn } from 'node:child_process' +import { randomUUID } from 'node:crypto' +import { copyFile } from 'node:fs/promises' +import http from 'node:http' +import { createRequire } from 'node:module' +import test from 'node:test' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { installPackedPackage, removePackedInstallation } from './packed-package.mjs' + +const TEST_TIMEOUT_MS = 120_000 +const IO_TIMEOUT_MS = 10_000 +const FIXTURE_DIRECTORY = dirname(fileURLToPath(import.meta.url)) + +class CdpClient { + constructor(WebSocket, url) { + this.WebSocket = WebSocket + this.url = url + this.nextId = 0 + this.pending = new Map() + this.events = [] + this.waiters = new Set() + } + + async connect() { + const socket = new this.WebSocket(this.url) + this.socket = socket + await new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + socket.terminate() + reject(new Error(`Timed out connecting to ${this.url}`)) + }, IO_TIMEOUT_MS) + const cleanup = () => { + clearTimeout(timer) + socket.off('open', onOpen) + socket.off('error', onError) + } + const onOpen = () => { + cleanup() + resolve() + } + const onError = (error) => { + cleanup() + reject(error) + } + socket.once('open', onOpen) + socket.once('error', onError) + }) + socket.on('message', (data) => this.onMessage(data)) + socket.on('error', (error) => this.onDisconnect(error)) + socket.on('close', () => this.onDisconnect(new Error('CDP WebSocket closed'))) + return this + } + + command(method, params = {}) { + const id = ++this.nextId + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + this.pending.delete(id) + reject(new Error(`Timed out waiting for ${method} (${id})`)) + }, IO_TIMEOUT_MS) + this.pending.set(id, { + resolve: (message) => { + clearTimeout(timer) + if (message.error) { + reject(new Error(`${method} failed: ${message.error.message}`)) + } else { + resolve(message.result) + } + }, + reject: (error) => { + clearTimeout(timer) + reject(error) + } + }) + this.socket.send(JSON.stringify({ id, method, params }), (error) => { + if (!error) return + const pending = this.pending.get(id) + this.pending.delete(id) + pending?.reject(error) + }) + }) + } + + waitForEvent(method, predicate = () => true) { + const existing = this.events.find( + (message) => message.method === method && predicate(message.params) + ) + if (existing) return Promise.resolve(existing.params) + + return new Promise((resolve, reject) => { + const waiter = { method, predicate, resolve, reject, timer: undefined } + waiter.timer = setTimeout(() => { + this.waiters.delete(waiter) + reject(new Error(`Timed out waiting for ${method}`)) + }, IO_TIMEOUT_MS) + this.waiters.add(waiter) + }) + } + + onMessage(data) { + const message = JSON.parse(data.toString()) + if (message.id !== undefined) { + const pending = this.pending.get(message.id) + if (!pending) return + this.pending.delete(message.id) + pending.resolve(message) + return + } + if (!message.method) return + this.events.push(message) + for (const waiter of [...this.waiters]) { + if (waiter.method !== message.method || !waiter.predicate(message.params)) continue + clearTimeout(waiter.timer) + this.waiters.delete(waiter) + waiter.resolve(message.params) + } + } + + onDisconnect(error) { + for (const pending of this.pending.values()) pending.reject(error) + this.pending.clear() + for (const waiter of this.waiters) { + clearTimeout(waiter.timer) + waiter.reject(error) + } + this.waiters.clear() + } + + async close() { + const socket = this.socket + if (!socket || socket.readyState === this.WebSocket.CLOSED) return + await new Promise((resolve) => { + const timer = setTimeout(() => { + socket.terminate() + resolve() + }, 2_000) + socket.once('close', () => { + clearTimeout(timer) + resolve() + }) + socket.close() + }) + } +} + +function listen(server) { + return new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) +} + +function closeServer(server) { + if (!server?.listening) return Promise.resolve() + return new Promise((resolve, reject) => + server.close((error) => (error ? reject(error) : resolve())) + ) +} + +function requestBuffer(url, timeoutMs = IO_TIMEOUT_MS) { + return new Promise((resolve, reject) => { + const request = http.get(url, { agent: false }, (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => resolve({ response, body: Buffer.concat(chunks) })) + }) + request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) + request.once('error', reject) + }) +} + +function waitForMessage(child, messages, predicate, timeoutMs = IO_TIMEOUT_MS) { + const existing = messages.find(predicate) + if (existing) return Promise.resolve(existing) + if (child.exitCode !== null || child.signalCode !== null) { + return Promise.reject(new Error(`Native consumer already exited with ${child.exitCode}`)) + } + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + cleanup() + reject(new Error('Timed out waiting for Native consumer IPC')) + }, timeoutMs) + const cleanup = () => { + clearTimeout(timer) + child.off('message', onMessage) + child.off('exit', onExit) + } + const onMessage = (message) => { + if (!predicate(message)) return + cleanup() + resolve(message) + } + const onExit = (code, signal) => { + cleanup() + reject(new Error(`Native consumer exited before IPC (code=${code}, signal=${signal})`)) + } + child.on('message', onMessage) + child.once('exit', onExit) + }) +} + +function send(child, message) { + return new Promise((resolve, reject) => + child.send(message, (error) => (error ? reject(error) : resolve())) + ) +} + +function waitForExit(child, timeoutMs = IO_TIMEOUT_MS) { + if (child.exitCode !== null || child.signalCode !== null) return Promise.resolve() + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + child.off('exit', onExit) + reject(new Error('Timed out waiting for Native consumer to exit')) + }, timeoutMs) + const onExit = () => { + clearTimeout(timer) + resolve() + } + child.once('exit', onExit) + }) +} + +test( + 'the packed Native adapter reports a real HTTP lifecycle under this Node runtime', + { timeout: TEST_TIMEOUT_MS }, + async () => { + const installation = await installPackedPackage('nnd-native-runtime-') + const consumerRequire = createRequire(join(installation.root, 'consumer.cjs')) + const WebSocket = consumerRequire('ws') + const fixture = join(installation.root, 'native-runtime-consumer.cjs') + await copyFile(join(FIXTURE_DIRECTORY, 'native-runtime-consumer.cjs'), fixture) + + const token = `${process.platform}-${process.version}-${process.pid}` + const expectedBody = Buffer.from(`native-pack-runtime:${token}`) + const origin = http.createServer((_request, response) => { + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': String(expectedBody.length), + 'x-nnd-pack-token': token + }) + response.end(expectedBody) + }) + const messages = [] + let child + let client + + try { + await listen(origin) + const address = origin.address() + const requestUrl = `http://127.0.0.1:${address.port}/compat?token=${encodeURIComponent(token)}` + + child = spawn(process.execPath, ['--experimental-network-inspection', fixture], { + cwd: installation.root, + env: { ...process.env }, + stdio: ['ignore', 'pipe', 'pipe', 'ipc'] + }) + let stdout = '' + let stderr = '' + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => (stdout += chunk)) + child.stderr.on('data', (chunk) => (stderr += chunk)) + child.on('message', (message) => messages.push(message)) + + const readyMessage = await waitForMessage( + child, + messages, + (message) => message?.type === 'ready' + ) + const ready = readyMessage.ready + assert.equal(ready.mode, 'native') + assert.deepEqual(readyMessage.functionsUnchanged, { + fetch: true, + httpRequest: true, + httpsRequest: true + }) + assert.equal(ready.capabilities.http, true) + const nodeMajor = Number(process.versions.node.split('.')[0]) + assert.equal( + ready.capabilities.responseBody, + nodeMajor >= 24, + 'Node 22 must not advertise cross-transport response bodies; Node 24+ must' + ) + assert.match(ready.target.webSocketDebuggerUrl, /^ws:\/\/127\.0\.0\.1:\d+\//) + assert.match(ready.target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) + + const discovery = await requestBuffer(ready.target.discoveryUrl) + assert.equal(discovery.response.statusCode, 200) + const targets = JSON.parse(discovery.body.toString('utf8')) + assert.ok(targets.some((target) => target.id === ready.target.id)) + + client = await new CdpClient(WebSocket, ready.target.webSocketDebuggerUrl).connect() + assert.deepEqual(await client.command('Network.enable'), {}) + + const requestEventPromise = client.waitForEvent( + 'Network.requestWillBeSent', + (params) => params.request?.url === requestUrl + ) + const requestMessageId = randomUUID() + const resultPromise = waitForMessage( + child, + messages, + (message) => message?.type === 'request-result' && message.id === requestMessageId + ) + await send(child, { type: 'request', id: requestMessageId, url: requestUrl }) + const resultMessage = await resultPromise + assert.equal(resultMessage.error, undefined, resultMessage.error) + assert.equal(resultMessage.result.status, 200) + assert.deepEqual(Buffer.from(resultMessage.result.bodyBase64, 'base64'), expectedBody) + + const requestEvent = await requestEventPromise + const requestId = requestEvent.requestId + const responseEvent = await client.waitForEvent( + 'Network.responseReceived', + (params) => params.requestId === requestId + ) + const finishedEvent = await client.waitForEvent( + 'Network.loadingFinished', + (params) => params.requestId === requestId + ) + assert.equal(responseEvent.response.status, 200) + assert.equal(typeof finishedEvent.timestamp, 'number') + + if (ready.capabilities.responseBody) { + const body = await client.command('Network.getResponseBody', { requestId }) + const observedBody = body.base64Encoded + ? Buffer.from(body.body, 'base64') + : Buffer.from(body.body, 'utf8') + assert.deepEqual(observedBody, expectedBody) + } + + for (const method of [ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.loadingFinished' + ]) { + assert.equal( + client.events.filter( + (message) => message.method === method && message.params.requestId === requestId + ).length, + 1, + `${method} must be emitted exactly once` + ) + } + + await client.close() + client = undefined + const shutdown = waitForMessage( + child, + messages, + (message) => message?.type === 'shutdown-complete' + ) + await send(child, { type: 'shutdown' }) + await shutdown + await waitForExit(child) + assert.equal(child.exitCode, 0, `stdout:\n${stdout}\nstderr:\n${stderr}`) + + await assert.rejects( + requestBuffer(ready.target.discoveryUrl, 1_000), + 'dispose must close the Native discovery endpoint before resolving' + ) + } finally { + await Promise.allSettled([client?.close(), closeServer(origin)]) + if (child && child.exitCode === null && child.signalCode === null) { + child.kill('SIGTERM') + await waitForExit(child, 2_000).catch(() => child.kill('SIGKILL')) + } + await removePackedInstallation(installation) + } + } +) diff --git a/packages/network-debugger/test/e2e/pack/pack-consumer.test.mjs b/packages/network-debugger/test/e2e/pack/pack-consumer.test.mjs new file mode 100644 index 0000000..17b5bc2 --- /dev/null +++ b/packages/network-debugger/test/e2e/pack/pack-consumer.test.mjs @@ -0,0 +1,102 @@ +import assert from 'node:assert/strict' +import { access, readFile, writeFile } from 'node:fs/promises' +import test from 'node:test' +import { join, normalize } from 'node:path' + +import { installPackedPackage, removePackedInstallation, runNode } from './packed-package.mjs' + +function exportedFiles(exports, files = []) { + if (typeof exports === 'string') { + if (exports.startsWith('./')) files.push(exports) + return files + } + if (!exports || typeof exports !== 'object') return files + for (const value of Object.values(exports)) exportedFiles(value, files) + return files +} + +test( + 'the exact npm tarball has complete exports and resolves from CJS and ESM consumers', + { timeout: 120_000 }, + async (t) => { + const installation = await installPackedPackage() + t.after(() => removePackedInstallation(installation)) + + const { root, packageDirectory, manifest } = installation + const publicTargets = new Set([ + ...exportedFiles(manifest.exports), + ...Object.values(manifest.bin ?? {}) + ]) + assert.ok(publicTargets.size > 0, 'package.json must declare public exports or bins') + + for (const relativeTarget of publicTargets) { + assert.ok( + typeof relativeTarget === 'string' && relativeTarget.startsWith('./'), + `public target must be package-relative: ${relativeTarget}` + ) + const normalizedTarget = normalize(relativeTarget).replace(/^(\.\.[/\\])+/, '') + assert.equal( + normalizedTarget, + normalize(relativeTarget), + `public target must not escape the package: ${relativeTarget}` + ) + await access(join(packageDirectory, normalizedTarget)).catch(() => { + assert.fail(`packed package is missing public target ${relativeTarget}`) + }) + } + + const installedManifest = JSON.parse( + await readFile(join(packageDirectory, 'package.json'), 'utf8') + ) + assert.equal(installedManifest.name, 'node-network-devtools') + assert.match(installedManifest.version, /^\d+\.\d+\.\d+(?:[-+].+)?$/) + assert.equal(installedManifest.engines?.node, '>=18.18') + assert.equal(installedManifest.exports?.['./register']?.types, './dist/preload/register.d.ts') + assert.equal(installedManifest.exports?.['./preload']?.types, './dist/preload/register.d.ts') + + const preloadDeclaration = await readFile( + join(packageDirectory, 'dist/preload/register.d.ts'), + 'utf8' + ) + assert.match(preloadDeclaration, /^export \{\};/) + assert.doesNotMatch( + preloadDeclaration, + /declare (?:function|const) (?:preload|getPreloadHandle)/ + ) + + const license = await readFile(join(packageDirectory, 'LICENSE'), 'utf8') + assert.match(license, /^MIT License/) + assert.match(license, /included in all\s+copies or substantial portions/) + + const commonJsEntry = join(root, 'consumer.cjs') + await writeFile( + commonJsEntry, + `'use strict'\n` + + `const assert = require('node:assert/strict')\n` + + `const api = require('node-network-devtools')\n` + + `const config = require('node-network-devtools/config')\n` + + `assert.equal(typeof api.register, 'function')\n` + + `assert.equal(typeof config.defineConfig, 'function')\n` + + `assert.equal(config.defineConfig({ mode: 'legacy' }).mode, 'legacy')\n` + + `process.stdout.write('cjs-consumer-ok\\n')\n`, + 'utf8' + ) + const cjs = await runNode(commonJsEntry, { cwd: root }) + assert.match(cjs.stdout, /cjs-consumer-ok/) + + const esmEntry = join(root, 'consumer.mjs') + await writeFile( + esmEntry, + `import assert from 'node:assert/strict'\n` + + `import { register } from 'node-network-devtools'\n` + + `import { defineConfig } from 'node-network-devtools/config'\n` + + `assert.equal(typeof register, 'function')\n` + + `assert.equal(typeof defineConfig, 'function')\n` + + `assert.equal(defineConfig({ mode: 'legacy' }).mode, 'legacy')\n` + + `process.stdout.write('esm-consumer-ok\\n')\n`, + 'utf8' + ) + const esm = await runNode(esmEntry, { cwd: root }) + assert.match(esm.stdout, /esm-consumer-ok/) + } +) diff --git a/packages/network-debugger/test/e2e/pack/packed-package.mjs b/packages/network-debugger/test/e2e/pack/packed-package.mjs new file mode 100644 index 0000000..d3a5146 --- /dev/null +++ b/packages/network-debugger/test/e2e/pack/packed-package.mjs @@ -0,0 +1,105 @@ +import { execFile } from 'node:child_process' +import { mkdtemp, readFile, readdir, realpath, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { basename, join, resolve } from 'node:path' +import { promisify } from 'node:util' + +const execFileAsync = promisify(execFile) +const PACKAGE_NAME = 'node-network-devtools' + +function npmExecutable() { + return process.platform === 'win32' ? 'npm.cmd' : 'npm' +} + +async function assertTarball(path) { + if (!path.endsWith('.tgz')) { + throw new Error(`Expected an npm .tgz, received: ${path}`) + } + return realpath(path) +} + +/** + * Resolve the one package artifact downloaded by CI. Tests deliberately do not + * fall back to `npm pack` or a repository dist directory: the exact uploaded + * tarball is the release candidate under test. + */ +export async function locatePackedTarball() { + if (process.env.NND_PACK_TARBALL) { + return assertTarball(resolve(process.env.NND_PACK_TARBALL)) + } + + const directory = process.env.NND_PACK_DIR + if (!directory) { + throw new Error('Set NND_PACK_TARBALL or NND_PACK_DIR to the downloaded npm artifact.') + } + + const entries = (await readdir(resolve(directory))).filter((entry) => entry.endsWith('.tgz')) + if (entries.length !== 1) { + throw new Error( + `Expected exactly one .tgz in ${directory}; found ${entries.length}: ${entries.join(', ')}` + ) + } + return assertTarball(join(resolve(directory), entries[0])) +} + +export async function installPackedPackage(prefix = 'node-network-devtools-pack-') { + const tarball = await locatePackedTarball() + const root = await mkdtemp(join(tmpdir(), prefix)) + await writeFile( + join(root, 'package.json'), + JSON.stringify({ name: 'nnd-packed-consumer', version: '0.0.0', private: true }, null, 2), + 'utf8' + ) + + try { + await execFileAsync( + npmExecutable(), + ['install', '--ignore-scripts', '--no-audit', '--no-fund', '--no-package-lock', tarball], + { + cwd: root, + env: { ...process.env, npm_config_update_notifier: 'false' }, + // Windows npm is a .cmd shim and therefore needs cmd.exe; POSIX keeps + // the safer direct execFile path. + shell: process.platform === 'win32', + maxBuffer: 10 * 1024 * 1024 + } + ) + } catch (error) { + await rm(root, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 }) + const output = [error?.stdout, error?.stderr].filter(Boolean).join('\n') + throw new Error(`Could not install ${basename(tarball)} with ${npmExecutable()}:\n${output}`, { + cause: error + }) + } + + const packageDirectory = join(root, 'node_modules', PACKAGE_NAME) + const manifest = JSON.parse(await readFile(join(packageDirectory, 'package.json'), 'utf8')) + if (manifest.name !== PACKAGE_NAME) { + throw new Error(`Installed unexpected package ${manifest.name ?? '(missing name)'}`) + } + + return { root, packageDirectory, manifest, tarball } +} + +export async function removePackedInstallation(installation) { + if (!installation?.root) return + await rm(installation.root, { + recursive: true, + force: true, + maxRetries: process.platform === 'win32' ? 10 : 3, + retryDelay: 100 + }) +} + +export async function runNode(entry, { cwd, env = {}, args = [] } = {}) { + try { + return await execFileAsync(process.execPath, [...args, entry], { + cwd, + env: { ...process.env, ...env }, + maxBuffer: 10 * 1024 * 1024 + }) + } catch (error) { + const output = [error?.stdout, error?.stderr].filter(Boolean).join('\n') + throw new Error(`Packed consumer ${entry} failed:\n${output}`, { cause: error }) + } +} diff --git a/packages/network-debugger/vite.config.ts b/packages/network-debugger/vite.config.ts index 2161f5a..c63659a 100644 --- a/packages/network-debugger/vite.config.ts +++ b/packages/network-debugger/vite.config.ts @@ -9,7 +9,12 @@ export default defineConfig(({ mode }) => ({ sourcemap: mode === 'development', outDir: 'dist', lib: { - entry: [resolve(__dirname, 'src/index.ts'), resolve(__dirname, 'src/fork/fork.ts')] + entry: { + index: resolve(__dirname, 'src/index.ts'), + fork: resolve(__dirname, 'src/fork/fork.ts'), + cli: resolve(__dirname, 'src/cli/bin.ts'), + config: resolve(__dirname, 'src/config/index.ts') + } }, rollupOptions: { external: [ @@ -24,16 +29,23 @@ export default defineConfig(({ mode }) => ({ 'path', 'url', 'node:zlib', + 'node:fs', + 'node:fs/promises', + 'node:module', + 'node:path', + 'node:child_process', 'node:assert', 'node:util', 'node:events', 'node:url', 'node:net', 'node:http', + 'node:https', 'node:tls', 'node:stream', 'node:querystring', 'node:crypto', + 'node:v8', 'node:diagnostics_channel', 'node:async_hooks', 'node:buffer', @@ -70,6 +82,7 @@ export default defineConfig(({ mode }) => ({ 'node:stream': 'node_stream', 'node:querystring': 'node_querystring', 'node:crypto': 'node_crypto', + 'node:v8': 'node_v8', 'node:inspector': 'node_inspector', bufferutil: 'bufferutil' } diff --git a/packages/network-debugger/vite.preload.config.ts b/packages/network-debugger/vite.preload.config.ts new file mode 100644 index 0000000..f7aa4ca --- /dev/null +++ b/packages/network-debugger/vite.preload.config.ts @@ -0,0 +1,34 @@ +import { defineConfig } from 'vite' +import { resolve } from 'path' + +export default defineConfig({ + build: { + target: 'es2022', + outDir: 'dist', + emptyOutDir: false, + lib: { + entry: resolve(__dirname, 'src/preload/register.ts'), + formats: ['es'], + fileName: () => 'register.mjs' + }, + rollupOptions: { + external: [ + 'http', + 'https', + 'child_process', + 'open', + 'ws', + 'iconv-lite', + 'zlib', + 'fs', + 'path', + 'url', + 'stream', + 'net', + 'undici', + 'bufferutil', + /^node:/ + ] + } + } +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a0832c..c0e7a58 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,6 @@ settings: excludeLinksFromLockfile: false importers: - .: devDependencies: '@commitlint/config-conventional': @@ -259,14 +258,14 @@ importers: dependencies: vuepress-theme-hope: specifier: 2.0.0-rc.62 - version: 2.0.0-rc.62(@vuepress/plugin-prismjs@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))))(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + version: 2.0.0-rc.62(@vuepress/plugin-prismjs@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))))(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) devDependencies: '@vuepress/bundler-vite': specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1) + version: 2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1) '@vuepress/theme-default': specifier: 2.0.0-rc.65 - version: 2.0.0-rc.65(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + version: 2.0.0-rc.65(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) sass-embedded: specifier: ^1.82.0 version: 1.82.0 @@ -275,7 +274,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) packages/eslint-config: devDependencies: @@ -309,9 +308,6 @@ importers: iconv-lite: specifier: ^0.7.0 version: 0.7.2 - inspector: - specifier: ^0.5.0 - version: 0.5.0 open: specifier: ^8.4.2 version: 8.4.2 @@ -322,6 +318,9 @@ importers: specifier: ^8.17.1 version: 8.20.0(bufferutil@4.0.9) devDependencies: + '@playwright/test': + specifier: 1.62.1 + version: 1.62.1 '@types/node': specifier: ^20.11.0 version: 20.16.11 @@ -336,7 +335,7 @@ importers: version: 6.21.0(eslint@8.57.1)(typescript@5.6.3) '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1)) + version: 4.0.18(vitest@4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1)) envinfo: specifier: ^7.14.0 version: 7.14.0 @@ -349,6 +348,9 @@ importers: tslib: specifier: 2.6.2 version: 2.6.2 + tsx: + specifier: 4.23.12 + version: 4.23.12 vite: specifier: ^5.2.10 version: 5.4.9(@types/node@20.16.11)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1) @@ -357,17 +359,22 @@ importers: version: 3.9.1(@types/node@20.16.11)(rollup@4.57.0)(typescript@5.6.3)(vite@5.4.9(@types/node@20.16.11)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)) vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1) + version: 4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1) packages: - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + } + engines: { node: '>=6.0.0' } '@angular-devkit/core@16.0.1': - resolution: {integrity: sha512-2uz98IqkKJlgnHbWQ7VeL4pb+snGAZXIama2KXi+k9GsRntdcw+udX8rL3G9SdUGUF+m6+147Y1oRBMHsO/v4w==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + resolution: + { + integrity: sha512-2uz98IqkKJlgnHbWQ7VeL4pb+snGAZXIama2KXi+k9GsRntdcw+udX8rL3G9SdUGUF+m6+147Y1oRBMHsO/v4w== + } + engines: { node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0' } peerDependencies: chokidar: ^3.5.2 peerDependenciesMeta: @@ -375,637 +382,1249 @@ packages: optional: true '@angular-devkit/schematics-cli@16.0.1': - resolution: {integrity: sha512-6KLA125dpgd6oJGtiO2JpZAb92uOG3njQGIt7NFcuQGW/5GO7J41vMXH9cBAfdtbV8SIggSmR/cIEE9ijfj6YQ==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + resolution: + { + integrity: sha512-6KLA125dpgd6oJGtiO2JpZAb92uOG3njQGIt7NFcuQGW/5GO7J41vMXH9cBAfdtbV8SIggSmR/cIEE9ijfj6YQ== + } + engines: { node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0' } hasBin: true '@angular-devkit/schematics@16.0.1': - resolution: {integrity: sha512-A9D0LTYmiqiBa90GKcSuWb7hUouGIbm/AHbJbjL85WLLRbQA2PwKl7P5Mpd6nS/ZC0kfG4VQY3VOaDvb3qpI9g==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + resolution: + { + integrity: sha512-A9D0LTYmiqiBa90GKcSuWb7hUouGIbm/AHbJbjL85WLLRbQA2PwKl7P5Mpd6nS/ZC0kfG4VQY3VOaDvb3qpI9g== + } + engines: { node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0' } '@babel/code-frame@7.25.7': - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== + } + engines: { node: '>=6.9.0' } '@babel/compat-data@7.25.8': - resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA== + } + engines: { node: '>=6.9.0' } '@babel/core@7.25.8': - resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg== + } + engines: { node: '>=6.9.0' } '@babel/eslint-parser@7.25.8': - resolution: {integrity: sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + resolution: + { + integrity: sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg== + } + engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 '@babel/generator@7.25.7': - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== + } + engines: { node: '>=6.9.0' } '@babel/helper-compilation-targets@7.25.7': - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A== + } + engines: { node: '>=6.9.0' } '@babel/helper-module-imports@7.25.7': - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw== + } + engines: { node: '>=6.9.0' } '@babel/helper-module-transforms@7.25.7': - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-plugin-utils@7.25.7': - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== + } + engines: { node: '>=6.9.0' } '@babel/helper-simple-access@7.25.7': - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ== + } + engines: { node: '>=6.9.0' } '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== + } + engines: { node: '>=6.9.0' } '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-option@7.25.7': - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ== + } + engines: { node: '>=6.9.0' } '@babel/helpers@7.25.7': - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA== + } + engines: { node: '>=6.9.0' } '@babel/highlight@7.25.7': - resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== + } + engines: { node: '>=6.9.0' } '@babel/parser@7.25.8': - resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== + } + engines: { node: '>=6.0.0' } hasBin: true '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== + } + engines: { node: '>=6.0.0' } hasBin: true '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + resolution: + { + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + resolution: + { + integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + resolution: + { + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.25.7': - resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + resolution: + { + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + resolution: + { + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.25.7': - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + resolution: + { + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + resolution: + { + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + resolution: + { + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + resolution: + { + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + resolution: + { + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + resolution: + { + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.25.7': - resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g== + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/template@7.25.7': - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== + } + engines: { node: '>=6.9.0' } '@babel/traverse@7.25.7': - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== + } + engines: { node: '>=6.9.0' } '@babel/types@7.25.8': - resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== + } + engines: { node: '>=6.9.0' } '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== + } + engines: { node: '>=6.9.0' } '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + resolution: + { + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + } '@bcoe/v8-coverage@1.0.2': - resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== + } + engines: { node: '>=18' } '@borewit/text-codec@0.2.1': - resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} + resolution: + { + integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw== + } '@bufbuild/protobuf@2.2.2': - resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} + resolution: + { + integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A== + } '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} + resolution: + { + integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + } + engines: { node: '>=0.1.90' } '@commitlint/cli@19.5.0': - resolution: {integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== + } + engines: { node: '>=v18' } hasBin: true '@commitlint/config-conventional@19.5.0': - resolution: {integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== + } + engines: { node: '>=v18' } '@commitlint/config-validator@19.5.0': - resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw== + } + engines: { node: '>=v18' } '@commitlint/ensure@19.5.0': - resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg== + } + engines: { node: '>=v18' } '@commitlint/execute-rule@19.5.0': - resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg== + } + engines: { node: '>=v18' } '@commitlint/format@19.5.0': - resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A== + } + engines: { node: '>=v18' } '@commitlint/is-ignored@19.5.0': - resolution: {integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== + } + engines: { node: '>=v18' } '@commitlint/lint@19.5.0': - resolution: {integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== + } + engines: { node: '>=v18' } '@commitlint/load@19.5.0': - resolution: {integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA== + } + engines: { node: '>=v18' } '@commitlint/message@19.5.0': - resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ== + } + engines: { node: '>=v18' } '@commitlint/parse@19.5.0': - resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw== + } + engines: { node: '>=v18' } '@commitlint/read@19.5.0': - resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ== + } + engines: { node: '>=v18' } '@commitlint/resolve-extends@19.5.0': - resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA== + } + engines: { node: '>=v18' } '@commitlint/rules@19.5.0': - resolution: {integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== + } + engines: { node: '>=v18' } '@commitlint/to-lines@19.5.0': - resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ== + } + engines: { node: '>=v18' } '@commitlint/top-level@19.5.0': - resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng== + } + engines: { node: '>=v18' } '@commitlint/types@19.5.0': - resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg== + } + engines: { node: '>=v18' } '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + } + engines: { node: '>=12' } '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + } + engines: { node: '>=12' } cpu: [ppc64] os: [aix] '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== + } + engines: { node: '>=18' } + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.28.2': + resolution: + { + integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ== + } + engines: { node: '>=18' } cpu: [ppc64] os: [aix] '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + } + engines: { node: '>=12' } cpu: [arm64] os: [android] '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.28.2': + resolution: + { + integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A== + } + engines: { node: '>=18' } cpu: [arm64] os: [android] '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + } + engines: { node: '>=12' } cpu: [arm] os: [android] '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + } + engines: { node: '>=18' } + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.2': + resolution: + { + integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg== + } + engines: { node: '>=18' } cpu: [arm] os: [android] '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + } + engines: { node: '>=12' } cpu: [x64] os: [android] '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== + } + engines: { node: '>=18' } + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.2': + resolution: + { + integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q== + } + engines: { node: '>=18' } cpu: [x64] os: [android] '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + } + engines: { node: '>=12' } cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.28.2': + resolution: + { + integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw== + } + engines: { node: '>=18' } cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + } + engines: { node: '>=12' } cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + } + engines: { node: '>=18' } + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.2': + resolution: + { + integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw== + } + engines: { node: '>=18' } cpu: [x64] os: [darwin] '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + } + engines: { node: '>=12' } cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.28.2': + resolution: + { + integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw== + } + engines: { node: '>=18' } cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + } + engines: { node: '>=12' } cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + } + engines: { node: '>=18' } + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.2': + resolution: + { + integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg== + } + engines: { node: '>=18' } cpu: [x64] os: [freebsd] '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + } + engines: { node: '>=12' } cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.28.2': + resolution: + { + integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug== + } + engines: { node: '>=18' } cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + } + engines: { node: '>=12' } cpu: [arm] os: [linux] '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + } + engines: { node: '>=18' } + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.28.2': + resolution: + { + integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w== + } + engines: { node: '>=18' } cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + } + engines: { node: '>=12' } cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + } + engines: { node: '>=18' } + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.28.2': + resolution: + { + integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ== + } + engines: { node: '>=18' } cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + } + engines: { node: '>=12' } cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + } + engines: { node: '>=18' } + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.28.2': + resolution: + { + integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ== + } + engines: { node: '>=18' } cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + } + engines: { node: '>=12' } cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + } + engines: { node: '>=18' } + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.28.2': + resolution: + { + integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA== + } + engines: { node: '>=18' } cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + } + engines: { node: '>=12' } cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + } + engines: { node: '>=18' } + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.28.2': + resolution: + { + integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ== + } + engines: { node: '>=18' } cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + } + engines: { node: '>=12' } cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + } + engines: { node: '>=18' } + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.2': + resolution: + { + integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA== + } + engines: { node: '>=18' } cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + } + engines: { node: '>=12' } cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + } + engines: { node: '>=18' } + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.28.2': + resolution: + { + integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg== + } + engines: { node: '>=18' } cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + } + engines: { node: '>=12' } cpu: [x64] os: [linux] '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + } + engines: { node: '>=18' } + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.28.2': + resolution: + { + integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ== + } + engines: { node: '>=18' } cpu: [x64] os: [linux] '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.28.2': + resolution: + { + integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw== + } + engines: { node: '>=18' } cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + } + engines: { node: '>=12' } cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + } + engines: { node: '>=18' } + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.2': + resolution: + { + integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw== + } + engines: { node: '>=18' } cpu: [x64] os: [netbsd] '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.28.2': + resolution: + { + integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ== + } + engines: { node: '>=18' } cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + } + engines: { node: '>=12' } cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + } + engines: { node: '>=18' } + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.2': + resolution: + { + integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw== + } + engines: { node: '>=18' } cpu: [x64] os: [openbsd] '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.28.2': + resolution: + { + integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q== + } + engines: { node: '>=18' } cpu: [arm64] os: [openharmony] '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + } + engines: { node: '>=12' } cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + } + engines: { node: '>=18' } + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.28.2': + resolution: + { + integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g== + } + engines: { node: '>=18' } cpu: [x64] os: [sunos] '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + } + engines: { node: '>=12' } cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.28.2': + resolution: + { + integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ== + } + engines: { node: '>=18' } cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + } + engines: { node: '>=12' } cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + } + engines: { node: '>=18' } + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.2': + resolution: + { + integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA== + } + engines: { node: '>=18' } cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + } + engines: { node: '>=12' } cpu: [x64] os: [win32] '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + } + engines: { node: '>=18' } + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.28.2': + resolution: + { + integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g== + } + engines: { node: '>=18' } cpu: [x64] os: [win32] '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + resolution: + { + integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } '@hapi/bourne@3.0.0': - resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} + resolution: + { + integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w== + } '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} + resolution: + { + integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + } + engines: { node: '>=10.10.0' } deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + } + engines: { node: '>=12.22' } '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + resolution: + { + integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + } deprecated: Use @eslint/object-schema instead '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + } + engines: { node: '>=8' } '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + } + engines: { node: '>=8' } '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1013,28 +1632,46 @@ packages: optional: true '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1042,216 +1679,357 @@ packages: optional: true '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + } + engines: { node: '>=6.0.0' } '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + } + engines: { node: '>=6.0.0' } '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + } + engines: { node: '>=6.0.0' } '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + resolution: + { + integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + } '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + resolution: + { + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + } '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + } '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + resolution: + { + integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + } '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + } '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + resolution: + { + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + } '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/base64@17.65.0': - resolution: {integrity: sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/buffers@1.2.1': - resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/buffers@17.65.0': - resolution: {integrity: sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/codegen@1.0.0': - resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/codegen@17.65.0': - resolution: {integrity: sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-core@4.56.10': - resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-fsa@4.56.10': - resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-node-builtins@4.56.10': - resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-node-to-fsa@4.56.10': - resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-node-utils@4.56.10': - resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-node@4.56.10': - resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-print@4.56.10': - resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/fs-snapshot@4.56.10': - resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/json-pack@1.21.0': - resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/json-pack@17.65.0': - resolution: {integrity: sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/json-pointer@1.0.2': - resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/json-pointer@17.65.0': - resolution: {integrity: sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/util@1.9.0': - resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@jsonjoy.com/util@17.65.0': - resolution: {integrity: sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' '@lit-labs/ssr-dom-shim@1.2.1': - resolution: {integrity: sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==} + resolution: + { + integrity: sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ== + } '@lit/reactive-element@2.0.4': - resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + resolution: + { + integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ== + } '@lukeed/csprng@1.1.0': - resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== + } + engines: { node: '>=8' } '@mdit-vue/plugin-component@2.1.3': - resolution: {integrity: sha512-9AG17beCgpEw/4ldo/M6Y/1Rh4E1bqMmr/rCkWKmCAxy9tJz3lzY7HQJanyHMJufwsb3WL5Lp7Om/aPcQTZ9SA==} + resolution: + { + integrity: sha512-9AG17beCgpEw/4ldo/M6Y/1Rh4E1bqMmr/rCkWKmCAxy9tJz3lzY7HQJanyHMJufwsb3WL5Lp7Om/aPcQTZ9SA== + } '@mdit-vue/plugin-frontmatter@2.1.3': - resolution: {integrity: sha512-KxsSCUVBEmn6sJcchSTiI5v9bWaoRxe68RBYRDGcSEY1GTnfQ5gQPMIsM48P4q1luLEIWurVGGrRu7u93//LDQ==} + resolution: + { + integrity: sha512-KxsSCUVBEmn6sJcchSTiI5v9bWaoRxe68RBYRDGcSEY1GTnfQ5gQPMIsM48P4q1luLEIWurVGGrRu7u93//LDQ== + } '@mdit-vue/plugin-headers@2.1.3': - resolution: {integrity: sha512-AcL7a7LHQR3ISINhfjGJNE/bHyM0dcl6MYm1Sr//zF7ZgokPGwD/HhD7TzwmrKA9YNYCcO9P3QmF/RN9XyA6CA==} + resolution: + { + integrity: sha512-AcL7a7LHQR3ISINhfjGJNE/bHyM0dcl6MYm1Sr//zF7ZgokPGwD/HhD7TzwmrKA9YNYCcO9P3QmF/RN9XyA6CA== + } '@mdit-vue/plugin-sfc@2.1.3': - resolution: {integrity: sha512-Ezl0dNvQNS639Yl4siXm+cnWtQvlqHrg+u+lnau/OHpj9Xh3LVap/BSQVugKIV37eR13jXXYf3VaAOP1fXPN+w==} + resolution: + { + integrity: sha512-Ezl0dNvQNS639Yl4siXm+cnWtQvlqHrg+u+lnau/OHpj9Xh3LVap/BSQVugKIV37eR13jXXYf3VaAOP1fXPN+w== + } '@mdit-vue/plugin-title@2.1.3': - resolution: {integrity: sha512-XWVOQoZqczoN97xCDrnQicmXKoqwOjIymIm9HQnRXhHnYKOgJPW1CxSGhkcOGzvDU1v0mD/adojVyyj/s6ggWw==} + resolution: + { + integrity: sha512-XWVOQoZqczoN97xCDrnQicmXKoqwOjIymIm9HQnRXhHnYKOgJPW1CxSGhkcOGzvDU1v0mD/adojVyyj/s6ggWw== + } '@mdit-vue/plugin-toc@2.1.3': - resolution: {integrity: sha512-41Q+iXpLHZt0zJdApVwoVt7WF6za/xUjtjEPf90Z3KLzQO01TXsv48Xp9BsrFHPcPcm8tiZ0+O1/ICJO80V/MQ==} + resolution: + { + integrity: sha512-41Q+iXpLHZt0zJdApVwoVt7WF6za/xUjtjEPf90Z3KLzQO01TXsv48Xp9BsrFHPcPcm8tiZ0+O1/ICJO80V/MQ== + } '@mdit-vue/shared@2.1.3': - resolution: {integrity: sha512-27YI8b0VVZsAlNwaWoaOCWbr4eL8B04HxiYk/y2ktblO/nMcOEOLt4p0RjuobvdyUyjHvGOS09RKhq7qHm1CHQ==} + resolution: + { + integrity: sha512-27YI8b0VVZsAlNwaWoaOCWbr4eL8B04HxiYk/y2ktblO/nMcOEOLt4p0RjuobvdyUyjHvGOS09RKhq7qHm1CHQ== + } '@mdit-vue/types@2.1.0': - resolution: {integrity: sha512-TMBB/BQWVvwtpBdWD75rkZx4ZphQ6MN0O4QB2Bc0oI5PC2uE57QerhNxdRZ7cvBHE2iY2C+BUNUziCfJbjIRRA==} + resolution: + { + integrity: sha512-TMBB/BQWVvwtpBdWD75rkZx4ZphQ6MN0O4QB2Bc0oI5PC2uE57QerhNxdRZ7cvBHE2iY2C+BUNUziCfJbjIRRA== + } '@mdit/helper@0.14.0': - resolution: {integrity: sha512-PNWzB2ZomBfUMF8skqzxbwGvcF5Q6+jkS6iis2nvLDobwV8hMzSWD49Jf++50i1XjHwcrFm0VsHqzsVCSoVAGA==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-PNWzB2ZomBfUMF8skqzxbwGvcF5Q6+jkS6iis2nvLDobwV8hMzSWD49Jf++50i1XjHwcrFm0VsHqzsVCSoVAGA== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1259,7 +2037,10 @@ packages: optional: true '@mdit/plugin-alert@0.14.0': - resolution: {integrity: sha512-a9/E6AZkCdepiseaS7VzjTPzlDVEpDXbgfspT1V0LVJ0xHiOlPNaUhB4vuRavETFyFmbmx8Lq8SvjvN6VdIz7Q==} + resolution: + { + integrity: sha512-a9/E6AZkCdepiseaS7VzjTPzlDVEpDXbgfspT1V0LVJ0xHiOlPNaUhB4vuRavETFyFmbmx8Lq8SvjvN6VdIz7Q== + } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1267,8 +2048,11 @@ packages: optional: true '@mdit/plugin-align@0.14.0': - resolution: {integrity: sha512-lm7epUka2zMHh6DpU1juX7eBAZHaGk+gcMNPknLb9LnP+zgKqEQ6Dl/86z24N9h9biAnp4AoY1uFMQB5mMvPHw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-lm7epUka2zMHh6DpU1juX7eBAZHaGk+gcMNPknLb9LnP+zgKqEQ6Dl/86z24N9h9biAnp4AoY1uFMQB5mMvPHw== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1276,8 +2060,11 @@ packages: optional: true '@mdit/plugin-attrs@0.14.0': - resolution: {integrity: sha512-/SK/mDXF+Zly7HN3ps8RB83CIWKv8r9FPGxmq9DknpXhFFOMlE5UIP9l7E0ysWmlKElfoEq9hYgUY9Ieerphtg==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-/SK/mDXF+Zly7HN3ps8RB83CIWKv8r9FPGxmq9DknpXhFFOMlE5UIP9l7E0ysWmlKElfoEq9hYgUY9Ieerphtg== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1285,8 +2072,11 @@ packages: optional: true '@mdit/plugin-container@0.14.0': - resolution: {integrity: sha512-sYjR9GPPkdItjGXw2m4f2iKAvKK+9egq/3wnzNnsouK1Hz0Qz8rQM1VELQLBK16PJwqStGNfTQC31BeM7gVmIg==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-sYjR9GPPkdItjGXw2m4f2iKAvKK+9egq/3wnzNnsouK1Hz0Qz8rQM1VELQLBK16PJwqStGNfTQC31BeM7gVmIg== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1294,7 +2084,10 @@ packages: optional: true '@mdit/plugin-demo@0.14.0': - resolution: {integrity: sha512-pp5XTESSmvUKpIJMyM1RFCddXjTXhgw8HKDPAMmIc2BpeBzFUBgNBA3JBULE8KiZVPJBdc2HuswQFOYwb6IQ/A==} + resolution: + { + integrity: sha512-pp5XTESSmvUKpIJMyM1RFCddXjTXhgw8HKDPAMmIc2BpeBzFUBgNBA3JBULE8KiZVPJBdc2HuswQFOYwb6IQ/A== + } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1302,8 +2095,11 @@ packages: optional: true '@mdit/plugin-figure@0.14.0': - resolution: {integrity: sha512-3/gyY1XUw5A+ZP/p6t/iQ36hmvHuAwQRBjFHxwEsFVVI7OLfoqaCEEkg/VAUeyNc4DN8vPhueZrbam5EIrBtPA==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-3/gyY1XUw5A+ZP/p6t/iQ36hmvHuAwQRBjFHxwEsFVVI7OLfoqaCEEkg/VAUeyNc4DN8vPhueZrbam5EIrBtPA== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1311,14 +2107,20 @@ packages: optional: true '@mdit/plugin-footnote@0.14.0': - resolution: {integrity: sha512-GaBn/j7TiC3tFwR0iRKyo133FvJtPQ1qo0K3NGKULWD8M4i1K2tEuA6qRKELh3DlsNKxK6G81KnQTl/87gR3rw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-GaBn/j7TiC3tFwR0iRKyo133FvJtPQ1qo0K3NGKULWD8M4i1K2tEuA6qRKELh3DlsNKxK6G81KnQTl/87gR3rw== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 '@mdit/plugin-img-lazyload@0.14.0': - resolution: {integrity: sha512-4ZMKCb0YHlGzdcFGVypFecsn+sA+Fk+mdZ76Gj0OPoRHuwLSmyEN8Y6B3lvZWy1rm4p/Ea71g1nEqPs54qW+yg==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-4ZMKCb0YHlGzdcFGVypFecsn+sA+Fk+mdZ76Gj0OPoRHuwLSmyEN8Y6B3lvZWy1rm4p/Ea71g1nEqPs54qW+yg== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1326,8 +2128,11 @@ packages: optional: true '@mdit/plugin-img-mark@0.14.0': - resolution: {integrity: sha512-wVAtRby7/4/EM+6ipNLqxUo4HGN8QWxBpc8An3QdOgqT6bJsmDiTM461gZIwtbzhBdh9RE9Bg1I5BmedXjTkZQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-wVAtRby7/4/EM+6ipNLqxUo4HGN8QWxBpc8An3QdOgqT6bJsmDiTM461gZIwtbzhBdh9RE9Bg1I5BmedXjTkZQ== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1335,8 +2140,11 @@ packages: optional: true '@mdit/plugin-img-size@0.14.0': - resolution: {integrity: sha512-A+HyWSSTXW318Ly48xOf4XnKW4xTstXewoY87cSXjw0eGO/rR50n4golihEJ9ixxUlJ/E8zpGCu454cOOBriKw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-A+HyWSSTXW318Ly48xOf4XnKW4xTstXewoY87cSXjw0eGO/rR50n4golihEJ9ixxUlJ/E8zpGCu454cOOBriKw== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1344,7 +2152,10 @@ packages: optional: true '@mdit/plugin-include@0.14.0': - resolution: {integrity: sha512-Y4XXGz9lhdSEctqMdmrN4R4nJPfgPSrtTwyptiN5ArT8fx+UIJId8AYBk5ybMZBAYne2QBHI/8+2O0xrUxJzYw==} + resolution: + { + integrity: sha512-Y4XXGz9lhdSEctqMdmrN4R4nJPfgPSrtTwyptiN5ArT8fx+UIJId8AYBk5ybMZBAYne2QBHI/8+2O0xrUxJzYw== + } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1352,8 +2163,11 @@ packages: optional: true '@mdit/plugin-katex-slim@0.14.0': - resolution: {integrity: sha512-GztODGcbbd+Glmwrin8yeR6KDESyFwxKkwe1u40XQ4vAImtOswQbAk5suoFGySiuONzGiu/4RLOKnYv5Unq3jQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-GztODGcbbd+Glmwrin8yeR6KDESyFwxKkwe1u40XQ4vAImtOswQbAk5suoFGySiuONzGiu/4RLOKnYv5Unq3jQ== + } + engines: { node: '>= 18' } peerDependencies: katex: ^0.16.9 markdown-it: ^14.1.0 @@ -1364,8 +2178,11 @@ packages: optional: true '@mdit/plugin-mark@0.14.0': - resolution: {integrity: sha512-NKJB92pJissct4HCDv+GK8dMF/viX5fzf6zrO9zBmgFRfdeo6CqjuVWh+Se/mPtqwhk1f2EX80YlOXorWNjXKQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-NKJB92pJissct4HCDv+GK8dMF/viX5fzf6zrO9zBmgFRfdeo6CqjuVWh+Se/mPtqwhk1f2EX80YlOXorWNjXKQ== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1373,8 +2190,11 @@ packages: optional: true '@mdit/plugin-mathjax-slim@0.14.0': - resolution: {integrity: sha512-AOFHQ5wN8IDV8d96MH3w9irHNguLtWbhYajQcc+O5wGeWxDsd5KMAd4StgERETxo6XgLxr0NRC8HzxSMPrC2aw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-AOFHQ5wN8IDV8d96MH3w9irHNguLtWbhYajQcc+O5wGeWxDsd5KMAd4StgERETxo6XgLxr0NRC8HzxSMPrC2aw== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 mathjax-full: ^3.2.2 @@ -1385,7 +2205,10 @@ packages: optional: true '@mdit/plugin-plantuml@0.14.0': - resolution: {integrity: sha512-AZy/o6Uvjd46GWoisYLQBL37ET0T+XscI+E8nUuZGu/ihAhoZU3jxeE97WFPwBa5T3hrNd9L1XfLXTTDM2ZQWw==} + resolution: + { + integrity: sha512-AZy/o6Uvjd46GWoisYLQBL37ET0T+XscI+E8nUuZGu/ihAhoZU3jxeE97WFPwBa5T3hrNd9L1XfLXTTDM2ZQWw== + } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1393,8 +2216,11 @@ packages: optional: true '@mdit/plugin-spoiler@0.14.0': - resolution: {integrity: sha512-c+tSj35JygQF9gNRAcH3gk68pBpjS7zGiooz/UK+tw8GSqez2c1Z+PWvu1u4xX0O/HO3y+amu7GqTjwkfgLC7g==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-c+tSj35JygQF9gNRAcH3gk68pBpjS7zGiooz/UK+tw8GSqez2c1Z+PWvu1u4xX0O/HO3y+amu7GqTjwkfgLC7g== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1402,8 +2228,11 @@ packages: optional: true '@mdit/plugin-stylize@0.14.0': - resolution: {integrity: sha512-oJFR+6JqWNnEjFsSO8FsMS92MNVzEaI+Re/3MX6OerJ7/ytdU8EkdgU8hcNcAGeT437SIKZsH9pRnxBupx0J7w==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-oJFR+6JqWNnEjFsSO8FsMS92MNVzEaI+Re/3MX6OerJ7/ytdU8EkdgU8hcNcAGeT437SIKZsH9pRnxBupx0J7w== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1411,8 +2240,11 @@ packages: optional: true '@mdit/plugin-sub@0.14.0': - resolution: {integrity: sha512-wva0pmw67t1aNZR7I+1GUyaWigJp+cGcPFvuwYviUuZh9npZXBIAdq1cCvycPaM29OT+LoBj5jdeydA81DKYSg==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-wva0pmw67t1aNZR7I+1GUyaWigJp+cGcPFvuwYviUuZh9npZXBIAdq1cCvycPaM29OT+LoBj5jdeydA81DKYSg== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1420,8 +2252,11 @@ packages: optional: true '@mdit/plugin-sup@0.14.0': - resolution: {integrity: sha512-QUwuCXQHS2atYv4SFfslVsuQLI1epDBie4Sw+E7XDwnbl9/o/vcJGkqdO4HKq8d73efowlWp2tGcpCxH+AeTWA==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-QUwuCXQHS2atYv4SFfslVsuQLI1epDBie4Sw+E7XDwnbl9/o/vcJGkqdO4HKq8d73efowlWp2tGcpCxH+AeTWA== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1429,7 +2264,10 @@ packages: optional: true '@mdit/plugin-tab@0.14.0': - resolution: {integrity: sha512-hY9sFejCGZPfHcEmk4WZ7EuTiw2EclD6zSO5FsuuuD8D5piQzI42UqlG5L+2TUOtC3gkeaNkKOSdLyahzMC6aw==} + resolution: + { + integrity: sha512-hY9sFejCGZPfHcEmk4WZ7EuTiw2EclD6zSO5FsuuuD8D5piQzI42UqlG5L+2TUOtC3gkeaNkKOSdLyahzMC6aw== + } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1437,8 +2275,11 @@ packages: optional: true '@mdit/plugin-tasklist@0.14.0': - resolution: {integrity: sha512-qKXt3td+A4pWbAYChPgOO+Ne9dOkb3SfrbyWE15M0AsIfVDizcq4wwVp8OQ25VAU5e4VisKiZ1XOE6xRoZHCbg==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-qKXt3td+A4pWbAYChPgOO+Ne9dOkb3SfrbyWE15M0AsIfVDizcq4wwVp8OQ25VAU5e4VisKiZ1XOE6xRoZHCbg== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1446,8 +2287,11 @@ packages: optional: true '@mdit/plugin-tex@0.14.0': - resolution: {integrity: sha512-fDigmoJLm3TzcS2nHrgc70EC680QTD9v+PlUDJX8gslE489+o0jRKB6/l6YuzBdpXNRcbrDNeo8q+oODlo/Y2w==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-fDigmoJLm3TzcS2nHrgc70EC680QTD9v+PlUDJX8gslE489+o0jRKB6/l6YuzBdpXNRcbrDNeo8q+oODlo/Y2w== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1455,8 +2299,11 @@ packages: optional: true '@mdit/plugin-uml@0.14.0': - resolution: {integrity: sha512-eIR4CiJfATlVAGuJh5Nd9L23zaN/ZDXc13SI/CaEPD+JG9/0h9XtyuceD5ncZDuEhmLnlxJua50Qek8NaObWDQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-eIR4CiJfATlVAGuJh5Nd9L23zaN/ZDXc13SI/CaEPD+JG9/0h9XtyuceD5ncZDuEhmLnlxJua50Qek8NaObWDQ== + } + engines: { node: '>= 18' } peerDependencies: markdown-it: ^14.1.0 peerDependenciesMeta: @@ -1464,25 +2311,43 @@ packages: optional: true '@microsoft/api-extractor-model@7.28.13': - resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} + resolution: + { + integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw== + } '@microsoft/api-extractor@7.43.0': - resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} + resolution: + { + integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w== + } hasBin: true '@microsoft/tsdoc-config@0.16.2': - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + resolution: + { + integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw== + } '@microsoft/tsdoc@0.14.2': - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + resolution: + { + integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug== + } '@nestjs/cli@9.5.0': - resolution: {integrity: sha512-Z7q+3vNsQSG2d2r2Hl/OOj5EpfjVx3OfnJ9+KuAsOdw1sKLm7+Zc6KbhMFTd/eIvfx82ww3Nk72xdmfPYCulWA==} - engines: {node: '>= 12.9.0'} + resolution: + { + integrity: sha512-Z7q+3vNsQSG2d2r2Hl/OOj5EpfjVx3OfnJ9+KuAsOdw1sKLm7+Zc6KbhMFTd/eIvfx82ww3Nk72xdmfPYCulWA== + } + engines: { node: '>= 12.9.0' } hasBin: true '@nestjs/common@11.1.12': - resolution: {integrity: sha512-v6U3O01YohHO+IE3EIFXuRuu3VJILWzyMmSYZXpyBbnp0hk0mFyHxK2w3dF4I5WnbwiRbWlEXdeXFvPQ7qaZzw==} + resolution: + { + integrity: sha512-v6U3O01YohHO+IE3EIFXuRuu3VJILWzyMmSYZXpyBbnp0hk0mFyHxK2w3dF4I5WnbwiRbWlEXdeXFvPQ7qaZzw== + } peerDependencies: class-transformer: '>=0.4.1' class-validator: '>=0.13.2' @@ -1495,7 +2360,10 @@ packages: optional: true '@nestjs/core@10.4.12': - resolution: {integrity: sha512-2qENES1U0VxCOfW45jVIV7g38edcvuU5aaLpZWOhb3nzehdvmeYoovUe8LTTHFrLWsDVY1v9FPfEhFQGsZfopQ==} + resolution: + { + integrity: sha512-2qENES1U0VxCOfW45jVIV7g38edcvuU5aaLpZWOhb3nzehdvmeYoovUe8LTTHFrLWsDVY1v9FPfEhFQGsZfopQ== + } peerDependencies: '@nestjs/common': ^10.0.0 '@nestjs/microservices': ^10.0.0 @@ -1512,18 +2380,27 @@ packages: optional: true '@nestjs/platform-express@11.1.19': - resolution: {integrity: sha512-Vpdv8jyCQdThfoTx+UTn+DRYr6H6X02YUqcpZ3qP6G3ZUwtVp7eS+hoQPGd4UuCnlnFG8Wqr2J9bGEzQdi1rIg==} + resolution: + { + integrity: sha512-Vpdv8jyCQdThfoTx+UTn+DRYr6H6X02YUqcpZ3qP6G3ZUwtVp7eS+hoQPGd4UuCnlnFG8Wqr2J9bGEzQdi1rIg== + } peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/core': ^11.0.0 '@nestjs/schematics@9.2.0': - resolution: {integrity: sha512-wHpNJDPzM6XtZUOB3gW0J6mkFCSJilzCM3XrHI1o0C8vZmFE1snbmkIXNyoi1eV0Nxh1BMymcgz5vIMJgQtTqw==} + resolution: + { + integrity: sha512-wHpNJDPzM6XtZUOB3gW0J6mkFCSJilzCM3XrHI1o0C8vZmFE1snbmkIXNyoi1eV0Nxh1BMymcgz5vIMJgQtTqw== + } peerDependencies: typescript: '>=4.3.5' '@nestjs/testing@9.4.3': - resolution: {integrity: sha512-LDT8Ai2eKnTzvnPaJwWOK03qTaFap5uHHsJCv6dL0uKWk6hyF9jms8DjyVaGsaujCaXDG8izl1mDEER0OmxaZA==} + resolution: + { + integrity: sha512-LDT8Ai2eKnTzvnPaJwWOK03qTaFap5uHHsJCv6dL0uKWk6hyF9jms8DjyVaGsaujCaXDG8izl1mDEER0OmxaZA== + } peerDependencies: '@nestjs/common': ^9.0.0 '@nestjs/core': ^9.0.0 @@ -1536,112 +2413,183 @@ packages: optional: true '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + resolution: + { + integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + } '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + } + engines: { node: '>= 8' } '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + } + engines: { node: '>= 8' } '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + } + engines: { node: '>= 8' } '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} + resolution: + { + integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + } + engines: { node: '>=12.4.0' } '@nuxtjs/opencollective@0.3.2': - resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} + resolution: + { + integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA== + } + engines: { node: '>=8.0.0', npm: '>=5.0.0' } hasBin: true '@parcel/watcher-android-arm64@2.4.1': - resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== + } + engines: { node: '>= 10.0.0' } cpu: [arm64] os: [android] '@parcel/watcher-darwin-arm64@2.4.1': - resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== + } + engines: { node: '>= 10.0.0' } cpu: [arm64] os: [darwin] '@parcel/watcher-darwin-x64@2.4.1': - resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== + } + engines: { node: '>= 10.0.0' } cpu: [x64] os: [darwin] '@parcel/watcher-freebsd-x64@2.4.1': - resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== + } + engines: { node: '>= 10.0.0' } cpu: [x64] os: [freebsd] '@parcel/watcher-linux-arm-glibc@2.4.1': - resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== + } + engines: { node: '>= 10.0.0' } cpu: [arm] os: [linux] '@parcel/watcher-linux-arm64-glibc@2.4.1': - resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== + } + engines: { node: '>= 10.0.0' } cpu: [arm64] os: [linux] '@parcel/watcher-linux-arm64-musl@2.4.1': - resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== + } + engines: { node: '>= 10.0.0' } cpu: [arm64] os: [linux] '@parcel/watcher-linux-x64-glibc@2.4.1': - resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== + } + engines: { node: '>= 10.0.0' } cpu: [x64] os: [linux] '@parcel/watcher-linux-x64-musl@2.4.1': - resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== + } + engines: { node: '>= 10.0.0' } cpu: [x64] os: [linux] '@parcel/watcher-win32-arm64@2.4.1': - resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== + } + engines: { node: '>= 10.0.0' } cpu: [arm64] os: [win32] '@parcel/watcher-win32-ia32@2.4.1': - resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== + } + engines: { node: '>= 10.0.0' } cpu: [ia32] os: [win32] '@parcel/watcher-win32-x64@2.4.1': - resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== + } + engines: { node: '>= 10.0.0' } cpu: [x64] os: [win32] '@parcel/watcher@2.4.1': - resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== + } + engines: { node: '>= 10.0.0' } '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + + '@playwright/test@1.62.1': + resolution: + { + integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ== + } + engines: { node: '>=20' } + hasBin: true '@rollup/pluginutils@5.1.2': - resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw== + } + engines: { node: '>=14.0.0' } peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -1649,218 +2597,350 @@ packages: optional: true '@rollup/rollup-android-arm-eabi@4.24.0': - resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + resolution: + { + integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA== + } cpu: [arm] os: [android] '@rollup/rollup-android-arm-eabi@4.57.0': - resolution: {integrity: sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==} + resolution: + { + integrity: sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA== + } cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.24.0': - resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + resolution: + { + integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA== + } cpu: [arm64] os: [android] '@rollup/rollup-android-arm64@4.57.0': - resolution: {integrity: sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==} + resolution: + { + integrity: sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg== + } cpu: [arm64] os: [android] '@rollup/rollup-darwin-arm64@4.24.0': - resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + resolution: + { + integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA== + } cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-arm64@4.57.0': - resolution: {integrity: sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==} + resolution: + { + integrity: sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg== + } cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-x64@4.24.0': - resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + resolution: + { + integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== + } cpu: [x64] os: [darwin] '@rollup/rollup-darwin-x64@4.57.0': - resolution: {integrity: sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==} + resolution: + { + integrity: sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA== + } cpu: [x64] os: [darwin] '@rollup/rollup-freebsd-arm64@4.57.0': - resolution: {integrity: sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==} + resolution: + { + integrity: sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g== + } cpu: [arm64] os: [freebsd] '@rollup/rollup-freebsd-x64@4.57.0': - resolution: {integrity: sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==} + resolution: + { + integrity: sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA== + } cpu: [x64] os: [freebsd] '@rollup/rollup-linux-arm-gnueabihf@4.24.0': - resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + resolution: + { + integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA== + } cpu: [arm] os: [linux] '@rollup/rollup-linux-arm-gnueabihf@4.57.0': - resolution: {integrity: sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==} + resolution: + { + integrity: sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q== + } cpu: [arm] os: [linux] '@rollup/rollup-linux-arm-musleabihf@4.24.0': - resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + resolution: + { + integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw== + } cpu: [arm] os: [linux] '@rollup/rollup-linux-arm-musleabihf@4.57.0': - resolution: {integrity: sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==} + resolution: + { + integrity: sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA== + } cpu: [arm] os: [linux] '@rollup/rollup-linux-arm64-gnu@4.24.0': - resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + resolution: + { + integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA== + } cpu: [arm64] os: [linux] '@rollup/rollup-linux-arm64-gnu@4.57.0': - resolution: {integrity: sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==} + resolution: + { + integrity: sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw== + } cpu: [arm64] os: [linux] '@rollup/rollup-linux-arm64-musl@4.24.0': - resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + resolution: + { + integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw== + } cpu: [arm64] os: [linux] '@rollup/rollup-linux-arm64-musl@4.57.0': - resolution: {integrity: sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==} + resolution: + { + integrity: sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw== + } cpu: [arm64] os: [linux] '@rollup/rollup-linux-loong64-gnu@4.57.0': - resolution: {integrity: sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==} + resolution: + { + integrity: sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q== + } cpu: [loong64] os: [linux] '@rollup/rollup-linux-loong64-musl@4.57.0': - resolution: {integrity: sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==} + resolution: + { + integrity: sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ== + } cpu: [loong64] os: [linux] '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': - resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + resolution: + { + integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw== + } cpu: [ppc64] os: [linux] '@rollup/rollup-linux-ppc64-gnu@4.57.0': - resolution: {integrity: sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==} + resolution: + { + integrity: sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ== + } cpu: [ppc64] os: [linux] '@rollup/rollup-linux-ppc64-musl@4.57.0': - resolution: {integrity: sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==} + resolution: + { + integrity: sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA== + } cpu: [ppc64] os: [linux] '@rollup/rollup-linux-riscv64-gnu@4.24.0': - resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + resolution: + { + integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg== + } cpu: [riscv64] os: [linux] '@rollup/rollup-linux-riscv64-gnu@4.57.0': - resolution: {integrity: sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==} + resolution: + { + integrity: sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ== + } cpu: [riscv64] os: [linux] '@rollup/rollup-linux-riscv64-musl@4.57.0': - resolution: {integrity: sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==} + resolution: + { + integrity: sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ== + } cpu: [riscv64] os: [linux] '@rollup/rollup-linux-s390x-gnu@4.24.0': - resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + resolution: + { + integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g== + } cpu: [s390x] os: [linux] '@rollup/rollup-linux-s390x-gnu@4.57.0': - resolution: {integrity: sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==} + resolution: + { + integrity: sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg== + } cpu: [s390x] os: [linux] '@rollup/rollup-linux-x64-gnu@4.24.0': - resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + resolution: + { + integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== + } cpu: [x64] os: [linux] '@rollup/rollup-linux-x64-gnu@4.57.0': - resolution: {integrity: sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==} + resolution: + { + integrity: sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A== + } cpu: [x64] os: [linux] '@rollup/rollup-linux-x64-musl@4.24.0': - resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + resolution: + { + integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ== + } cpu: [x64] os: [linux] '@rollup/rollup-linux-x64-musl@4.57.0': - resolution: {integrity: sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==} + resolution: + { + integrity: sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw== + } cpu: [x64] os: [linux] '@rollup/rollup-openbsd-x64@4.57.0': - resolution: {integrity: sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==} + resolution: + { + integrity: sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw== + } cpu: [x64] os: [openbsd] '@rollup/rollup-openharmony-arm64@4.57.0': - resolution: {integrity: sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==} + resolution: + { + integrity: sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA== + } cpu: [arm64] os: [openharmony] '@rollup/rollup-win32-arm64-msvc@4.24.0': - resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + resolution: + { + integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ== + } cpu: [arm64] os: [win32] '@rollup/rollup-win32-arm64-msvc@4.57.0': - resolution: {integrity: sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==} + resolution: + { + integrity: sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ== + } cpu: [arm64] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.24.0': - resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + resolution: + { + integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ== + } cpu: [ia32] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.57.0': - resolution: {integrity: sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==} + resolution: + { + integrity: sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA== + } cpu: [ia32] os: [win32] '@rollup/rollup-win32-x64-gnu@4.57.0': - resolution: {integrity: sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==} + resolution: + { + integrity: sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA== + } cpu: [x64] os: [win32] '@rollup/rollup-win32-x64-msvc@4.24.0': - resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + resolution: + { + integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== + } cpu: [x64] os: [win32] '@rollup/rollup-win32-x64-msvc@4.57.0': - resolution: {integrity: sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==} + resolution: + { + integrity: sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ== + } cpu: [x64] os: [win32] '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + resolution: + { + integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + } '@rushstack/eslint-patch@1.10.4': - resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + resolution: + { + integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== + } '@rushstack/node-core-library@4.0.2': - resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} + resolution: + { + integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg== + } peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -1868,10 +2948,16 @@ packages: optional: true '@rushstack/rig-package@0.5.2': - resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + resolution: + { + integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA== + } '@rushstack/terminal@0.10.0': - resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} + resolution: + { + integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw== + } peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -1879,295 +2965,580 @@ packages: optional: true '@rushstack/ts-command-line@4.19.1': - resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} + resolution: + { + integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg== + } '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + resolution: + { + integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + } '@shikijs/core@1.24.1': - resolution: {integrity: sha512-3q/9oarMVcLqJ+NQOdKL40dJVq/UKCsiWXz3QRQPBglHqa8dDJ0p6TuMuk2gHphy5FZcvFtg4UHBgpW0JtZ8+A==} + resolution: + { + integrity: sha512-3q/9oarMVcLqJ+NQOdKL40dJVq/UKCsiWXz3QRQPBglHqa8dDJ0p6TuMuk2gHphy5FZcvFtg4UHBgpW0JtZ8+A== + } '@shikijs/engine-javascript@1.24.1': - resolution: {integrity: sha512-lNgUSHYDYaQ6daj4lJJqcY2Ru9LgHwpFoposJkRVRPh21Yg4kaPFRhzaWoSg3PliwcDOpDuMy3xsmQaJp201Fg==} + resolution: + { + integrity: sha512-lNgUSHYDYaQ6daj4lJJqcY2Ru9LgHwpFoposJkRVRPh21Yg4kaPFRhzaWoSg3PliwcDOpDuMy3xsmQaJp201Fg== + } '@shikijs/engine-oniguruma@1.24.1': - resolution: {integrity: sha512-KdrTIBIONWd+Xs61eh8HdIpfigtrseat9dpARvaOe2x0g/FNTbwbkGr3y92VSOVD1XotzEskh3v/nCzyWjkf7g==} + resolution: + { + integrity: sha512-KdrTIBIONWd+Xs61eh8HdIpfigtrseat9dpARvaOe2x0g/FNTbwbkGr3y92VSOVD1XotzEskh3v/nCzyWjkf7g== + } '@shikijs/transformers@1.24.1': - resolution: {integrity: sha512-IQmk8o0RNlaQ3Ig0Urx4bfen/zvS5St6as7o0q+bTDfbuFjqUMNjoMMKMN1Lu66mAh83seURwPLi2EjjLTD6+w==} + resolution: + { + integrity: sha512-IQmk8o0RNlaQ3Ig0Urx4bfen/zvS5St6as7o0q+bTDfbuFjqUMNjoMMKMN1Lu66mAh83seURwPLi2EjjLTD6+w== + } '@shikijs/types@1.24.1': - resolution: {integrity: sha512-ZwZFbShFY/APfKNt3s9Gv8rhTm29GodSKsOW66X6N+HGsZuaHalE1VUEX4fv93UXHTZTLjb3uxn63F96RhGfXw==} + resolution: + { + integrity: sha512-ZwZFbShFY/APfKNt3s9Gv8rhTm29GodSKsOW66X6N+HGsZuaHalE1VUEX4fv93UXHTZTLjb3uxn63F96RhGfXw== + } '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + resolution: + { + integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA== + } '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + } '@sindresorhus/is@7.0.1': - resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ== + } + engines: { node: '>=18' } '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + } + engines: { node: '>=18' } '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + } + engines: { node: '>=18' } '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + resolution: + { + integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + } '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + resolution: + { + integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + } '@stackblitz/sdk@1.11.0': - resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==} + resolution: + { + integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ== + } '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + resolution: + { + integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== + } '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + } + engines: { node: '>=14.16' } '@tokenizer/inflate@0.4.1': - resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA== + } + engines: { node: '>=18' } '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + resolution: + { + integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + } '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + resolution: + { + integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + } '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + resolution: + { + integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + } '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + resolution: + { + integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + } '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + resolution: + { + integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + } '@types/accepts@1.3.7': - resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + resolution: + { + integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ== + } '@types/argparse@1.0.38': - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + resolution: + { + integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== + } '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + resolution: + { + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + } '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + resolution: + { + integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + } '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + resolution: + { + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + } '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + resolution: + { + integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + } '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + resolution: + { + integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + } '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + resolution: + { + integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== + } '@types/co-body@6.1.3': - resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} + resolution: + { + integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA== + } '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + resolution: + { + integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + } '@types/content-disposition@0.5.8': - resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + resolution: + { + integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg== + } '@types/conventional-commits-parser@5.0.0': - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + resolution: + { + integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ== + } '@types/cookiejar@2.1.5': - resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + resolution: + { + integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== + } '@types/cookies@0.9.0': - resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + resolution: + { + integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q== + } '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + resolution: + { + integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + } '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + resolution: + { + integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + } '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + resolution: + { + integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + } '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + resolution: + { + integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + } '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + resolution: + { + integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + } '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + } '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + resolution: + { + integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + } '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + resolution: + { + integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + } '@types/formidable@2.0.6': - resolution: {integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w==} + resolution: + { + integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w== + } '@types/fs-extra@11.0.4': - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + resolution: + { + integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ== + } '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + resolution: + { + integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + } '@types/hash-sum@1.0.2': - resolution: {integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==} + resolution: + { + integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw== + } '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + resolution: + { + integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + } '@types/http-assert@1.5.5': - resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} + resolution: + { + integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g== + } '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + resolution: + { + integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + } '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + resolution: + { + integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + } '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + resolution: + { + integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + } '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + resolution: + { + integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + } '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + resolution: + { + integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + } '@types/jest@29.2.4': - resolution: {integrity: sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==} + resolution: + { + integrity: sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A== + } '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + } '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + resolution: + { + integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + } '@types/jsonfile@6.1.4': - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + resolution: + { + integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ== + } '@types/katex@0.16.7': - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + resolution: + { + integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ== + } '@types/keygrip@1.0.6': - resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + resolution: + { + integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ== + } '@types/koa-compose@3.2.8': - resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + resolution: + { + integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA== + } '@types/koa-router@7.4.8': - resolution: {integrity: sha512-SkWlv4F9f+l3WqYNQHnWjYnyTxYthqt8W9az2RTdQW7Ay8bc00iRZcrb8MC75iEfPqnGcg2csEl8tTG1NQPD4A==} + resolution: + { + integrity: sha512-SkWlv4F9f+l3WqYNQHnWjYnyTxYthqt8W9az2RTdQW7Ay8bc00iRZcrb8MC75iEfPqnGcg2csEl8tTG1NQPD4A== + } '@types/koa@2.15.0': - resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + resolution: + { + integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g== + } '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + resolution: + { + integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== + } '@types/markdown-it-emoji@3.0.1': - resolution: {integrity: sha512-cz1j8R35XivBqq9mwnsrP2fsz2yicLhB8+PDtuVkKOExwEdsVBNI+ROL3sbhtR5occRZ66vT0QnwFZCqdjf3pA==} + resolution: + { + integrity: sha512-cz1j8R35XivBqq9mwnsrP2fsz2yicLhB8+PDtuVkKOExwEdsVBNI+ROL3sbhtR5occRZ66vT0QnwFZCqdjf3pA== + } '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + resolution: + { + integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== + } '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + resolution: + { + integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + } '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + resolution: + { + integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== + } '@types/methods@1.1.4': - resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + resolution: + { + integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ== + } '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + resolution: + { + integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + } '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + resolution: + { + integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + } '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + resolution: + { + integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + } '@types/node@18.11.18': - resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} + resolution: + { + integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + } '@types/node@20.16.11': - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + resolution: + { + integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw== + } '@types/node@22.7.5': - resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + resolution: + { + integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + } '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + resolution: + { + integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + } '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + resolution: + { + integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + } '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + resolution: + { + integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + } '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + resolution: + { + integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + } '@types/sax@1.2.7': - resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + resolution: + { + integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== + } '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + resolution: + { + integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + } '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + resolution: + { + integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + } '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + resolution: + { + integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + } '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + resolution: + { + integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + } '@types/superagent@8.1.9': - resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} + resolution: + { + integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ== + } '@types/supertest@2.0.16': - resolution: {integrity: sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==} + resolution: + { + integrity: sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg== + } '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + resolution: + { + integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + } '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + resolution: + { + integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + } '@types/web-bluetooth@0.0.20': - resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + resolution: + { + integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== + } '@types/ws@8.5.12': - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + resolution: + { + integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + } '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + resolution: + { + integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + } '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + resolution: + { + integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + } '@typescript-eslint/eslint-plugin@5.62.0': - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2177,8 +3548,11 @@ packages: optional: true '@typescript-eslint/eslint-plugin@6.21.0': - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha eslint: ^7.0.0 || ^8.0.0 @@ -2188,8 +3562,11 @@ packages: optional: true '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + } + engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: '@typescript-eslint/parser': ^7.0.0 eslint: ^8.56.0 @@ -2199,8 +3576,11 @@ packages: optional: true '@typescript-eslint/parser@5.62.0': - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' @@ -2209,8 +3589,11 @@ packages: optional: true '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' @@ -2219,8 +3602,11 @@ packages: optional: true '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + } + engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: eslint: ^8.56.0 typescript: '*' @@ -2229,20 +3615,32 @@ packages: optional: true '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + } + engines: { node: ^16.0.0 || >=18.0.0 } '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + } + engines: { node: ^18.18.0 || >=20.0.0 } '@typescript-eslint/type-utils@5.62.0': - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: '*' typescript: '*' @@ -2251,8 +3649,11 @@ packages: optional: true '@typescript-eslint/type-utils@6.21.0': - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' @@ -2261,8 +3662,11 @@ packages: optional: true '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + } + engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: eslint: ^8.56.0 typescript: '*' @@ -2271,20 +3675,32 @@ packages: optional: true '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + } + engines: { node: ^16.0.0 || >=18.0.0 } '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + } + engines: { node: ^18.18.0 || >=20.0.0 } '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2292,8 +3708,11 @@ packages: optional: true '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2301,8 +3720,11 @@ packages: optional: true '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + } + engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2310,41 +3732,66 @@ packages: optional: true '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0 '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + } + engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: eslint: ^8.56.0 '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + } + engines: { node: ^16.0.0 || >=18.0.0 } '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + resolution: + { + integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + } + engines: { node: ^18.18.0 || >=20.0.0 } '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + resolution: + { + integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + } + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@vercel/style-guide@5.2.0': - resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g== + } + engines: { node: '>=16' } peerDependencies: '@next/eslint-plugin-next': '>=12.3.0 <15' eslint: '>=8.48.0 <9' @@ -2361,14 +3808,20 @@ packages: optional: true '@vitejs/plugin-vue@5.1.4': - resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A== + } + engines: { node: ^18.0.0 || >=20.0.0 } peerDependencies: vite: ^5.0.0 vue: ^3.2.25 '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} + resolution: + { + integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg== + } peerDependencies: '@vitest/browser': 4.0.18 vitest: 4.0.18 @@ -2377,16 +3830,28 @@ packages: optional: true '@vitest/expect@1.6.0': - resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + resolution: + { + integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ== + } '@vitest/expect@2.1.4': - resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} + resolution: + { + integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA== + } '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + resolution: + { + integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ== + } '@vitest/mocker@2.1.4': - resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} + resolution: + { + integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ== + } peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -2397,7 +3862,10 @@ packages: optional: true '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + resolution: + { + integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ== + } peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -2408,103 +3876,202 @@ packages: optional: true '@vitest/pretty-format@2.1.4': - resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} + resolution: + { + integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww== + } '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + resolution: + { + integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw== + } '@vitest/runner@1.6.0': - resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + resolution: + { + integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg== + } '@vitest/runner@2.1.4': - resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} + resolution: + { + integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA== + } '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + resolution: + { + integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw== + } '@vitest/snapshot@1.6.0': - resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + resolution: + { + integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ== + } '@vitest/snapshot@2.1.4': - resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} + resolution: + { + integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q== + } '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + resolution: + { + integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA== + } '@vitest/spy@1.6.0': - resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + resolution: + { + integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw== + } '@vitest/spy@2.1.4': - resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} + resolution: + { + integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg== + } '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + resolution: + { + integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw== + } '@vitest/utils@1.6.0': - resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + resolution: + { + integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw== + } '@vitest/utils@2.1.4': - resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + resolution: + { + integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg== + } '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + resolution: + { + integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA== + } '@volar/language-core@1.11.1': - resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + resolution: + { + integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== + } '@volar/source-map@1.11.1': - resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + resolution: + { + integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== + } '@volar/typescript@1.11.1': - resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + resolution: + { + integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== + } '@vue/compiler-core@3.5.12': - resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} + resolution: + { + integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw== + } '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + resolution: + { + integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== + } '@vue/compiler-dom@3.5.12': - resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} + resolution: + { + integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg== + } '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + resolution: + { + integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== + } '@vue/compiler-sfc@3.5.12': - resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} + resolution: + { + integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw== + } '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + resolution: + { + integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== + } '@vue/compiler-ssr@3.5.12': - resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} + resolution: + { + integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA== + } '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + resolution: + { + integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== + } '@vue/devtools-api@6.6.4': - resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + resolution: + { + integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== + } '@vue/devtools-api@7.4.6': - resolution: {integrity: sha512-XipBV5k0/IfTr0sNBDTg7OBUCp51cYMMXyPxLXJZ4K/wmUeMqt8cVdr2ZZGOFq+si/jTyCYnNxeKoyev5DOUUA==} + resolution: + { + integrity: sha512-XipBV5k0/IfTr0sNBDTg7OBUCp51cYMMXyPxLXJZ4K/wmUeMqt8cVdr2ZZGOFq+si/jTyCYnNxeKoyev5DOUUA== + } '@vue/devtools-api@7.6.7': - resolution: {integrity: sha512-PV4I31WaV2rfA8RGauM+69uFEzWkqtP561RiLU2wK+Ce85u3zyKW3aoESlLCNzkc4y0JaJyskH6zAE3xWOP8+Q==} + resolution: + { + integrity: sha512-PV4I31WaV2rfA8RGauM+69uFEzWkqtP561RiLU2wK+Ce85u3zyKW3aoESlLCNzkc4y0JaJyskH6zAE3xWOP8+Q== + } '@vue/devtools-kit@7.4.6': - resolution: {integrity: sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==} + resolution: + { + integrity: sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew== + } '@vue/devtools-kit@7.6.7': - resolution: {integrity: sha512-V8/jrXY/swHgnblABG9U4QCbE60c6RuPasmv2d9FvVqc5d94t1vDiESuvRmdNJBdWz4/D3q6ffgyAfRVjwHYEw==} + resolution: + { + integrity: sha512-V8/jrXY/swHgnblABG9U4QCbE60c6RuPasmv2d9FvVqc5d94t1vDiESuvRmdNJBdWz4/D3q6ffgyAfRVjwHYEw== + } '@vue/devtools-shared@7.4.6': - resolution: {integrity: sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==} + resolution: + { + integrity: sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg== + } '@vue/devtools-shared@7.6.7': - resolution: {integrity: sha512-QggO6SviAsolrePAXZ/sA1dSicSPt4TueZibCvydfhNDieL1lAuyMTgQDGst7TEvMGb4vgYv2I+1sDkO4jWNnw==} + resolution: + { + integrity: sha512-QggO6SviAsolrePAXZ/sA1dSicSPt4TueZibCvydfhNDieL1lAuyMTgQDGst7TEvMGb4vgYv2I+1sDkO4jWNnw== + } '@vue/language-core@1.8.27': - resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + resolution: + { + integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== + } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2512,67 +4079,121 @@ packages: optional: true '@vue/reactivity@3.5.12': - resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} + resolution: + { + integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg== + } '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + resolution: + { + integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== + } '@vue/runtime-core@3.5.12': - resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} + resolution: + { + integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw== + } '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + resolution: + { + integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== + } '@vue/runtime-dom@3.5.12': - resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} + resolution: + { + integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA== + } '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + resolution: + { + integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== + } '@vue/server-renderer@3.5.12': - resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} + resolution: + { + integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg== + } peerDependencies: vue: 3.5.12 '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + resolution: + { + integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== + } peerDependencies: vue: 3.5.13 '@vue/shared@3.5.12': - resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + resolution: + { + integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg== + } '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + resolution: + { + integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== + } '@vuepress/bundler-vite@2.0.0-rc.18': - resolution: {integrity: sha512-Q+OUul4OLIS4OLuKqIlmJKHhW5Edt5i6fVY6infgGhb4tUQt3z37DjCUtvbMikb05Va9YqtTAGt2eCWOk7eGPw==} + resolution: + { + integrity: sha512-Q+OUul4OLIS4OLuKqIlmJKHhW5Edt5i6fVY6infgGhb4tUQt3z37DjCUtvbMikb05Va9YqtTAGt2eCWOk7eGPw== + } '@vuepress/bundlerutils@2.0.0-rc.18': - resolution: {integrity: sha512-GTcdc78cfcKqn/D3xPrxGFeR+WPV2zJE82jpKAnIa4I30aScq/95pYF1FofP0Gdc+0/XQCxFQ8xiT8iYcoQPSw==} + resolution: + { + integrity: sha512-GTcdc78cfcKqn/D3xPrxGFeR+WPV2zJE82jpKAnIa4I30aScq/95pYF1FofP0Gdc+0/XQCxFQ8xiT8iYcoQPSw== + } '@vuepress/cli@2.0.0-rc.18': - resolution: {integrity: sha512-9Oxyb22klpBNzia+2D4NRGv+Jk0+TwHX8Pn25cy9TlyxMeh9+jFioXT0Jc3c9/vOesBaCI6JxSxwPqtgRFr1rQ==} + resolution: + { + integrity: sha512-9Oxyb22klpBNzia+2D4NRGv+Jk0+TwHX8Pn25cy9TlyxMeh9+jFioXT0Jc3c9/vOesBaCI6JxSxwPqtgRFr1rQ== + } hasBin: true '@vuepress/client@2.0.0-rc.18': - resolution: {integrity: sha512-ImeF10uwZvQt3KyYN+fdyPRCZmzEJ2r4sTxC/39ieVA4BzPpTzrJwBNT3KONYkckaoXnBXIoI8d+DWFfq9B9NQ==} + resolution: + { + integrity: sha512-ImeF10uwZvQt3KyYN+fdyPRCZmzEJ2r4sTxC/39ieVA4BzPpTzrJwBNT3KONYkckaoXnBXIoI8d+DWFfq9B9NQ== + } '@vuepress/core@2.0.0-rc.18': - resolution: {integrity: sha512-ikQ5EyA1jZynk1amsihG0cX6kWTgCIsbGCBgPWDVfkSPCrYCxxaIfzvKgyGBiNBFZ7kqoxuMnEn8EaY/fhSL0A==} + resolution: + { + integrity: sha512-ikQ5EyA1jZynk1amsihG0cX6kWTgCIsbGCBgPWDVfkSPCrYCxxaIfzvKgyGBiNBFZ7kqoxuMnEn8EaY/fhSL0A== + } '@vuepress/helper@2.0.0-rc.63': - resolution: {integrity: sha512-42GmRhRttE2sgM4qUUF4PCXMYIxhgXDWrwa+gNbQmvrcs16saeKEQ4iL8lI6JITcy9S7+M6NtndbFkFwRlAscg==} + resolution: + { + integrity: sha512-42GmRhRttE2sgM4qUUF4PCXMYIxhgXDWrwa+gNbQmvrcs16saeKEQ4iL8lI6JITcy9S7+M6NtndbFkFwRlAscg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/helper@2.0.0-rc.65': - resolution: {integrity: sha512-AeUABMaFkkSSVNN+kwaozSYtSpohXc9GLg4792P/C6X+sOow/KauOMP/A4LryuoVFjtEB9rjeQgujnb9Fn2bmQ==} + resolution: + { + integrity: sha512-AeUABMaFkkSSVNN+kwaozSYtSpohXc9GLg4792P/C6X+sOow/KauOMP/A4LryuoVFjtEB9rjeQgujnb9Fn2bmQ== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/highlighter-helper@2.0.0-rc.62': - resolution: {integrity: sha512-tWLz314Dzr8dUDDBDmsjnsWVi6AJwXyWFMo2zsYnZGk5v2ZovQvigrtqjxB7OIw2LlizAWGwx4gv8jt7fsxCdQ==} + resolution: + { + integrity: sha512-tWLz314Dzr8dUDDBDmsjnsWVi6AJwXyWFMo2zsYnZGk5v2ZovQvigrtqjxB7OIw2LlizAWGwx4gv8jt7fsxCdQ== + } peerDependencies: '@vueuse/core': ^12.0.0 vuepress: 2.0.0-rc.18 @@ -2581,30 +4202,48 @@ packages: optional: true '@vuepress/markdown@2.0.0-rc.18': - resolution: {integrity: sha512-RUX7rgjONBwOepWXqB4SzI2Tbm6zEYK2YTHwjexzAIBr+nxgB+B8nizdr+VvuVk7Ehn/CtcyXhBdf1NZh9UgUQ==} + resolution: + { + integrity: sha512-RUX7rgjONBwOepWXqB4SzI2Tbm6zEYK2YTHwjexzAIBr+nxgB+B8nizdr+VvuVk7Ehn/CtcyXhBdf1NZh9UgUQ== + } '@vuepress/plugin-active-header-links@2.0.0-rc.63': - resolution: {integrity: sha512-D2VtuOYmnmWRgaUeFjt09HAEaPWFT8l9tjpF6gX29eJPer0QsPjM5Wau+cTvl3cmVh+dnDUhiYOIc7MwYEU2bQ==} + resolution: + { + integrity: sha512-D2VtuOYmnmWRgaUeFjt09HAEaPWFT8l9tjpF6gX29eJPer0QsPjM5Wau+cTvl3cmVh+dnDUhiYOIc7MwYEU2bQ== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-back-to-top@2.0.0-rc.65': - resolution: {integrity: sha512-+PcmO8JQO8cswCGXOyYQI4MnCT4HwMIAzuVI8nR46Q4Ime+Ye5VsC12aXi479A9npoXhtRwMDkmCFJfCy7I3+Q==} + resolution: + { + integrity: sha512-+PcmO8JQO8cswCGXOyYQI4MnCT4HwMIAzuVI8nR46Q4Ime+Ye5VsC12aXi479A9npoXhtRwMDkmCFJfCy7I3+Q== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-blog@2.0.0-rc.65': - resolution: {integrity: sha512-5ZQZ1bT1zeF9JeqRoIbJQLiIdHI7SMg652Ml880U0u4K3pQsE2MERCKHtDpAh98afG0XvDTXxyS0i53fCpPt6g==} + resolution: + { + integrity: sha512-5ZQZ1bT1zeF9JeqRoIbJQLiIdHI7SMg652Ml880U0u4K3pQsE2MERCKHtDpAh98afG0XvDTXxyS0i53fCpPt6g== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-catalog@2.0.0-rc.65': - resolution: {integrity: sha512-33mTadR0pKi82/mQReYcjxV6uNcC9Fe1kLHBek0VGQEMqRk2rTegc7jjBlEDOQmTAbrraqqiZpnPZ+xVWETxUQ==} + resolution: + { + integrity: sha512-33mTadR0pKi82/mQReYcjxV6uNcC9Fe1kLHBek0VGQEMqRk2rTegc7jjBlEDOQmTAbrraqqiZpnPZ+xVWETxUQ== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-comment@2.0.0-rc.65': - resolution: {integrity: sha512-flsSpYVUNtTvT19lEADfD7102qL8mZMabpLmx6TnYRfFTdRczoirfsLK+DF/7z/ELNQqbyQ8BTwnq3clNOGwSg==} + resolution: + { + integrity: sha512-flsSpYVUNtTvT19lEADfD7102qL8mZMabpLmx6TnYRfFTdRczoirfsLK+DF/7z/ELNQqbyQ8BTwnq3clNOGwSg== + } peerDependencies: '@waline/client': ^3.4.1 artalk: ^2.9.0 @@ -2619,47 +4258,74 @@ packages: optional: true '@vuepress/plugin-copy-code@2.0.0-rc.65': - resolution: {integrity: sha512-3lKa7OIwBC5OcWrR5+cFUmUZz8ESQI+tcfDCt5B3foKOFkAlMcZVLBb4ZJyorQG6UYn9soNuhbzMWtfWDqNIoA==} + resolution: + { + integrity: sha512-3lKa7OIwBC5OcWrR5+cFUmUZz8ESQI+tcfDCt5B3foKOFkAlMcZVLBb4ZJyorQG6UYn9soNuhbzMWtfWDqNIoA== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-copyright@2.0.0-rc.65': - resolution: {integrity: sha512-YQaEL6j5ri+lC48kvKfmLn+KW8PD9cOfGdwlNZijqrBTCt11icb29rv4iNv6yGMn1vdFkPzxOj54/jJzOw9gsg==} + resolution: + { + integrity: sha512-YQaEL6j5ri+lC48kvKfmLn+KW8PD9cOfGdwlNZijqrBTCt11icb29rv4iNv6yGMn1vdFkPzxOj54/jJzOw9gsg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-git@2.0.0-rc.62': - resolution: {integrity: sha512-V1sG1NlrWjDlOJtUoCx2BjVdgokog3A7buJztyOtbNyRLWYY5EALUOgWrF4Ccf3TFVdTxDgV/vm5U23ycsO83w==} + resolution: + { + integrity: sha512-V1sG1NlrWjDlOJtUoCx2BjVdgokog3A7buJztyOtbNyRLWYY5EALUOgWrF4Ccf3TFVdTxDgV/vm5U23ycsO83w== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-links-check@2.0.0-rc.65': - resolution: {integrity: sha512-Z30L24y6Q/EE6VLZo2aiTniAgAtkXXwWcM/Mi1CMCAP0cItCtT4ZF7DWdBi35QhFw4HtdAuq0DSkSK0y22auGg==} + resolution: + { + integrity: sha512-Z30L24y6Q/EE6VLZo2aiTniAgAtkXXwWcM/Mi1CMCAP0cItCtT4ZF7DWdBi35QhFw4HtdAuq0DSkSK0y22auGg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-markdown-ext@2.0.0-rc.65': - resolution: {integrity: sha512-rEb3xD1JTdH34PAPjdtQDIYiaDXNiCAumYUgOIYmDILUYbHE/BmFNejvE8AbPfgtG7UimYOfoa6JGuGbdnVbcw==} + resolution: + { + integrity: sha512-rEb3xD1JTdH34PAPjdtQDIYiaDXNiCAumYUgOIYmDILUYbHE/BmFNejvE8AbPfgtG7UimYOfoa6JGuGbdnVbcw== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-markdown-hint@2.0.0-rc.65': - resolution: {integrity: sha512-OqrcSDJVl5qTsSI450/KlBXqjqxJ2+s8YynjnRwteWj3jtlsOpi66voB49A87gi+vgyjw0B88BBsZrF9mmkQTA==} + resolution: + { + integrity: sha512-OqrcSDJVl5qTsSI450/KlBXqjqxJ2+s8YynjnRwteWj3jtlsOpi66voB49A87gi+vgyjw0B88BBsZrF9mmkQTA== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-markdown-image@2.0.0-rc.65': - resolution: {integrity: sha512-DsY4izZ4dw+BthVHiQr7CknPazUuCJT3Z1+iEF7NtTPI0kfRROABgwcMUybZ8ZO6qyKuDtgxuv2xck8yI/7HXg==} + resolution: + { + integrity: sha512-DsY4izZ4dw+BthVHiQr7CknPazUuCJT3Z1+iEF7NtTPI0kfRROABgwcMUybZ8ZO6qyKuDtgxuv2xck8yI/7HXg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-markdown-include@2.0.0-rc.65': - resolution: {integrity: sha512-UxjMnjSjLcEsB0PKgch7iXkGt0WEltZWFSSeWeSGtlTVwZdMhVYMzxw0R/WOaVs5G+fLTxWPtYaE1v33zgAt/w==} + resolution: + { + integrity: sha512-UxjMnjSjLcEsB0PKgch7iXkGt0WEltZWFSSeWeSGtlTVwZdMhVYMzxw0R/WOaVs5G+fLTxWPtYaE1v33zgAt/w== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-markdown-math@2.0.0-rc.65': - resolution: {integrity: sha512-GL8yhVE3hZQyCOTKxJAvEDzkqrXGrzMJYK3TT6nCOZR1g8JUL/d+J+E5TUPTYQiSxQMH33jNNyoXmTgCPZloqw==} + resolution: + { + integrity: sha512-GL8yhVE3hZQyCOTKxJAvEDzkqrXGrzMJYK3TT6nCOZR1g8JUL/d+J+E5TUPTYQiSxQMH33jNNyoXmTgCPZloqw== + } peerDependencies: katex: ^0.16.10 mathjax-full: ^3.2.2 @@ -2671,63 +4337,99 @@ packages: optional: true '@vuepress/plugin-markdown-stylize@2.0.0-rc.65': - resolution: {integrity: sha512-liFMN6WOjedUaHBXuhS0O78Zj+XJ1bFJAhbtkvFBPCMYIWt3CEKYsOIiCwuAYdQAm06od+mHQuuXMyFEJcnUUQ==} + resolution: + { + integrity: sha512-liFMN6WOjedUaHBXuhS0O78Zj+XJ1bFJAhbtkvFBPCMYIWt3CEKYsOIiCwuAYdQAm06od+mHQuuXMyFEJcnUUQ== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-markdown-tab@2.0.0-rc.65': - resolution: {integrity: sha512-yFkdX3Ifyzo41lhvIuOT5NRTL/NcPYPltJPRsMqMywHHZ7UdM+Ku8iCt+USwWut/0eaoY5bNqu5CugUZphkEHA==} + resolution: + { + integrity: sha512-yFkdX3Ifyzo41lhvIuOT5NRTL/NcPYPltJPRsMqMywHHZ7UdM+Ku8iCt+USwWut/0eaoY5bNqu5CugUZphkEHA== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-medium-zoom@2.0.0-rc.65': - resolution: {integrity: sha512-r8I4Rqtx4ttCXvuPKSrrWxxb5J7PjnCfy6LCErjRGA9o7y3AfTmbyBhvDQTPQLi8Yq1Y96j7XO1EoEtwCAsPfw==} + resolution: + { + integrity: sha512-r8I4Rqtx4ttCXvuPKSrrWxxb5J7PjnCfy6LCErjRGA9o7y3AfTmbyBhvDQTPQLi8Yq1Y96j7XO1EoEtwCAsPfw== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-notice@2.0.0-rc.65': - resolution: {integrity: sha512-BA4bOnR6ynqecayQWU1rH3v0ErZVEiXYU7TugH/OWfrprZV0QTKQmxD9P0qeSft6gfSVe161iWQF+Zxp1GoM8w==} + resolution: + { + integrity: sha512-BA4bOnR6ynqecayQWU1rH3v0ErZVEiXYU7TugH/OWfrprZV0QTKQmxD9P0qeSft6gfSVe161iWQF+Zxp1GoM8w== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-nprogress@2.0.0-rc.65': - resolution: {integrity: sha512-B5mf7Zn7muu3yP9HP6Z/3GuqHPDcfEkHPrhiqPq/5crhot1enON5LkoGmfQ3lAXZQSzvrWL+2Os85adgtOV7mA==} + resolution: + { + integrity: sha512-B5mf7Zn7muu3yP9HP6Z/3GuqHPDcfEkHPrhiqPq/5crhot1enON5LkoGmfQ3lAXZQSzvrWL+2Os85adgtOV7mA== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-palette@2.0.0-rc.65': - resolution: {integrity: sha512-H85TsjdnfxS1dr92ggYKkJFw4S057AKvjQbbXG3BsuAcvtDLAWYhxhs1T+o50bPGnuHZr1W/rSKxYWCYFhJlbQ==} + resolution: + { + integrity: sha512-H85TsjdnfxS1dr92ggYKkJFw4S057AKvjQbbXG3BsuAcvtDLAWYhxhs1T+o50bPGnuHZr1W/rSKxYWCYFhJlbQ== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-photo-swipe@2.0.0-rc.65': - resolution: {integrity: sha512-BnYl+BJ5FZcMFbQTDfnpFf9sNxV0doFgPmOkWuijZ/372dQJoFJmGVWacTiKRkDwJLfZjHXpxgb+4GQqcYsYkg==} + resolution: + { + integrity: sha512-BnYl+BJ5FZcMFbQTDfnpFf9sNxV0doFgPmOkWuijZ/372dQJoFJmGVWacTiKRkDwJLfZjHXpxgb+4GQqcYsYkg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-prismjs@2.0.0-rc.65': - resolution: {integrity: sha512-yJf6NCc2VRJ1rEyTN4b+WBQIRd/eizNusrUHCRECWaeyP4Y2vELBJ8CFXl5pxfyKVzuJYgKOAtpxabzDC6pOHA==} + resolution: + { + integrity: sha512-yJf6NCc2VRJ1rEyTN4b+WBQIRd/eizNusrUHCRECWaeyP4Y2vELBJ8CFXl5pxfyKVzuJYgKOAtpxabzDC6pOHA== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-reading-time@2.0.0-rc.65': - resolution: {integrity: sha512-gEoqdfXQonsx3WHoOITNmCNQiJ8frMbwiMJ+1zMO0UC3touIv8S97wc0lxormI1T03BVFMVwOPMwCjr1NLkqgw==} + resolution: + { + integrity: sha512-gEoqdfXQonsx3WHoOITNmCNQiJ8frMbwiMJ+1zMO0UC3touIv8S97wc0lxormI1T03BVFMVwOPMwCjr1NLkqgw== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-redirect@2.0.0-rc.65': - resolution: {integrity: sha512-m5P02DM5AikRN8kSw1mFt61AG0Uv32z3Imn3dB0EgYi/E7sobegjZ7OnxdqN/gRfjI5QUHd4MBJLAqfPffOdqw==} + resolution: + { + integrity: sha512-m5P02DM5AikRN8kSw1mFt61AG0Uv32z3Imn3dB0EgYi/E7sobegjZ7OnxdqN/gRfjI5QUHd4MBJLAqfPffOdqw== + } hasBin: true peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-rtl@2.0.0-rc.65': - resolution: {integrity: sha512-UfucYEFUboPPt24huks3w8eQ4ihUDWLs8wXeLlxMOT9OaFFf92ZMWJc9xLn/TIv8qFrHZ9AB9/Tg770Y9sqTBw==} + resolution: + { + integrity: sha512-UfucYEFUboPPt24huks3w8eQ4ihUDWLs8wXeLlxMOT9OaFFf92ZMWJc9xLn/TIv8qFrHZ9AB9/Tg770Y9sqTBw== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-sass-palette@2.0.0-rc.63': - resolution: {integrity: sha512-aoOOWP0Of016AnpTDjE6IdtQ1zQtoKfO7ONyij4L9kt0JRUuk0IdEgnv9W1q3f0Hw9RkdhH8labGsapLKYSVFA==} + resolution: + { + integrity: sha512-aoOOWP0Of016AnpTDjE6IdtQ1zQtoKfO7ONyij4L9kt0JRUuk0IdEgnv9W1q3f0Hw9RkdhH8labGsapLKYSVFA== + } peerDependencies: sass: ^1.80.3 sass-embedded: ^1.80.3 @@ -2742,7 +4444,10 @@ packages: optional: true '@vuepress/plugin-sass-palette@2.0.0-rc.65': - resolution: {integrity: sha512-BgHpt2VLnWJbD3tn7b6hlwXsOCGseeKDeeV/tetFxDcnQBv2ajMk+RT9Ps/p6fp98OioMGNMeOF1yX7hj+xHaQ==} + resolution: + { + integrity: sha512-BgHpt2VLnWJbD3tn7b6hlwXsOCGseeKDeeV/tetFxDcnQBv2ajMk+RT9Ps/p6fp98OioMGNMeOF1yX7hj+xHaQ== + } peerDependencies: sass: ^1.80.3 sass-embedded: ^1.80.3 @@ -2757,40 +4462,64 @@ packages: optional: true '@vuepress/plugin-seo@2.0.0-rc.65': - resolution: {integrity: sha512-Jo/5ZFgFN8D8cFROvgveCCpAFgdOQPxoXTAYop/xSVRLxpDPX9tNWBOIO/iGW7pApvowIIO/SLlXmBNfujoDRw==} + resolution: + { + integrity: sha512-Jo/5ZFgFN8D8cFROvgveCCpAFgdOQPxoXTAYop/xSVRLxpDPX9tNWBOIO/iGW7pApvowIIO/SLlXmBNfujoDRw== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-shiki@2.0.0-rc.65': - resolution: {integrity: sha512-YrXUaos0FvoCPtG+25xgmo0PgEuJ/S6ZlTkzike+8BOsReR4K+/OcdqHyXX5eyHj8nZb0r9X1loz3AJJJiVYjg==} + resolution: + { + integrity: sha512-YrXUaos0FvoCPtG+25xgmo0PgEuJ/S6ZlTkzike+8BOsReR4K+/OcdqHyXX5eyHj8nZb0r9X1loz3AJJJiVYjg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-sitemap@2.0.0-rc.65': - resolution: {integrity: sha512-OPON4CeQvjVRkOVc+N3zJQXsRn+GMKv6+Ve57s4iQwtTPW9bYarGUJBZIwl4rUzicXVHIDSMsMd+Sk0mjHyaSw==} + resolution: + { + integrity: sha512-OPON4CeQvjVRkOVc+N3zJQXsRn+GMKv6+Ve57s4iQwtTPW9bYarGUJBZIwl4rUzicXVHIDSMsMd+Sk0mjHyaSw== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-theme-data@2.0.0-rc.63': - resolution: {integrity: sha512-F8QLiwFOgu9yh1YoJvEHL9uNeMx/agpRFyvCgKckKYgV9iyBN5cIts0hPBv4ADpp1yRWNgkEK3jmAtLUKhxE0g==} + resolution: + { + integrity: sha512-F8QLiwFOgu9yh1YoJvEHL9uNeMx/agpRFyvCgKckKYgV9iyBN5cIts0hPBv4ADpp1yRWNgkEK3jmAtLUKhxE0g== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-theme-data@2.0.0-rc.64': - resolution: {integrity: sha512-9L0raY6ckFNuHyUj5XoxLSPsoseq/3h8XjULEKwYs4J7S+2U+ImBL0C7hDPY8lq+sF6cz6V8mhdZ/e5fs6BiBg==} + resolution: + { + integrity: sha512-9L0raY6ckFNuHyUj5XoxLSPsoseq/3h8XjULEKwYs4J7S+2U+ImBL0C7hDPY8lq+sF6cz6V8mhdZ/e5fs6BiBg== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/plugin-watermark@2.0.0-rc.65': - resolution: {integrity: sha512-zRuRItLhzWOajzKR8tW3sWN5zMxITc5jYlFrCqvGeKDctebvhqN43PMdrlXY5axt7BPLtBwgSGPd/OV3pX0otQ==} + resolution: + { + integrity: sha512-zRuRItLhzWOajzKR8tW3sWN5zMxITc5jYlFrCqvGeKDctebvhqN43PMdrlXY5axt7BPLtBwgSGPd/OV3pX0otQ== + } peerDependencies: vuepress: 2.0.0-rc.18 '@vuepress/shared@2.0.0-rc.18': - resolution: {integrity: sha512-um5/ZKGOKgaui5Xo1aRSZ3ko7zVq60k1M8j8ajEOu90LUD1e8glTa7Km9OIBgPcN+yx2OrNwuu8ieEupdNAm4w==} + resolution: + { + integrity: sha512-um5/ZKGOKgaui5Xo1aRSZ3ko7zVq60k1M8j8ajEOu90LUD1e8glTa7Km9OIBgPcN+yx2OrNwuu8ieEupdNAm4w== + } '@vuepress/theme-default@2.0.0-rc.65': - resolution: {integrity: sha512-PGD4zohq70zzN+oqrneZYB9dHmc+IiSEeItaNjvHhJHRlW4Oc2kSjY/Qho7mXT4dBf+K8mKHHUj9nhQpKs8ulA==} + resolution: + { + integrity: sha512-PGD4zohq70zzN+oqrneZYB9dHmc+IiSEeItaNjvHhJHRlW4Oc2kSjY/Qho7mXT4dBf+K8mKHHUj9nhQpKs8ulA== + } peerDependencies: sass: ^1.80.3 sass-embedded: ^1.80.3 @@ -2805,102 +4534,189 @@ packages: optional: true '@vuepress/utils@2.0.0-rc.18': - resolution: {integrity: sha512-0+5vrv3CBycWpAahmutEK2iyuc9oL6JOWMuAdh+cYuuHt1vX+LHfhWGvSep+UT6pOFGOcZfQzXSdlbkv3b4j+Q==} + resolution: + { + integrity: sha512-0+5vrv3CBycWpAahmutEK2iyuc9oL6JOWMuAdh+cYuuHt1vX+LHfhWGvSep+UT6pOFGOcZfQzXSdlbkv3b4j+Q== + } '@vueuse/core@12.0.0': - resolution: {integrity: sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==} + resolution: + { + integrity: sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw== + } '@vueuse/metadata@12.0.0': - resolution: {integrity: sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==} + resolution: + { + integrity: sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ== + } '@vueuse/shared@12.0.0': - resolution: {integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==} + resolution: + { + integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw== + } '@webassemblyjs/ast@1.12.1': - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + resolution: + { + integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== + } '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + resolution: + { + integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + } '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + resolution: + { + integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + } '@webassemblyjs/helper-buffer@1.12.1': - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + resolution: + { + integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== + } '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + resolution: + { + integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + } '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + resolution: + { + integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + } '@webassemblyjs/helper-wasm-section@1.12.1': - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + resolution: + { + integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== + } '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + resolution: + { + integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + } '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + resolution: + { + integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + } '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + resolution: + { + integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + } '@webassemblyjs/wasm-edit@1.12.1': - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + resolution: + { + integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + } '@webassemblyjs/wasm-gen@1.12.1': - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + resolution: + { + integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + } '@webassemblyjs/wasm-opt@1.12.1': - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + resolution: + { + integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + } '@webassemblyjs/wasm-parser@1.12.1': - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + resolution: + { + integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + } '@webassemblyjs/wast-printer@1.12.1': - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + resolution: + { + integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + } '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + resolution: + { + integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + } '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + resolution: + { + integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + } JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + resolution: + { + integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + } hasBin: true accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + } + engines: { node: '>= 0.6' } accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + } + engines: { node: '>= 0.6' } acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + resolution: + { + integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + } deprecated: package has been renamed to acorn-import-attributes peerDependencies: acorn: ^8 acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + } + engines: { node: '>=0.4.0' } acorn@8.13.0: - resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== + } + engines: { node: '>=0.4.0' } hasBin: true ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + resolution: + { + integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + } peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -2908,576 +4724,1023 @@ packages: optional: true ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + resolution: + { + integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + } peerDependencies: ajv: ^6.9.1 ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + } ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + resolution: + { + integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + } ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + resolution: + { + integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + } ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + } + engines: { node: '>=6' } ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + } + engines: { node: '>=8' } ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== + } + engines: { node: '>=18' } ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + } + engines: { node: '>=8' } ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + } + engines: { node: '>=12' } ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + } + engines: { node: '>=4' } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + } + engines: { node: '>=8' } ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + } + engines: { node: '>=10' } ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + } + engines: { node: '>=12' } anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + } + engines: { node: '>= 8' } append-field@1.0.0: - resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + resolution: + { + integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== + } arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + resolution: + { + integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + } arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + resolution: + { + integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + } argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + } aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + resolution: + { + integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + } array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + } + engines: { node: '>= 0.4' } array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + resolution: + { + integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + } array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + } + engines: { node: '>= 0.4' } array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + } + engines: { node: '>=8' } array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + } + engines: { node: '>= 0.4' } array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + } + engines: { node: '>= 0.4' } array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + } + engines: { node: '>= 0.4' } array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + } + engines: { node: '>= 0.4' } array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + } + engines: { node: '>= 0.4' } arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + } + engines: { node: '>= 0.4' } asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + resolution: + { + integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + } assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + resolution: + { + integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + } assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + } + engines: { node: '>=12' } ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + resolution: + { + integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + } ast-v8-to-istanbul@0.3.10: - resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} + resolution: + { + integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ== + } asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + } autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + } + engines: { node: ^10 || ^12 || >=14 } hasBin: true peerDependencies: postcss: ^8.1.0 available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + } + engines: { node: '>= 0.4' } axe-core@4.10.0: - resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== + } + engines: { node: '>=4' } axios@1.15.1: - resolution: {integrity: sha512-WOG+Jj8ZOvR0a3rAn+Tuf1UQJRxw5venr6DgdbJzngJE3qG7X0kL83CZGpdHMxEm+ZK3seAbvFsw4FfOfP9vxg==} + resolution: + { + integrity: sha512-WOG+Jj8ZOvR0a3rAn+Tuf1UQJRxw5venr6DgdbJzngJE3qG7X0kL83CZGpdHMxEm+ZK3seAbvFsw4FfOfP9vxg== + } axios@1.7.7: - resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + resolution: + { + integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + } axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + } + engines: { node: '>= 0.4' } babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@babel/core': ^7.8.0 babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + } + engines: { node: '>=8' } babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + resolution: + { + integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + } peerDependencies: '@babel/core': ^7.0.0 babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@babel/core': ^7.0.0 balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + } balloon-css@1.2.0: - resolution: {integrity: sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==} + resolution: + { + integrity: sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A== + } base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + } bcrypt-ts@5.0.3: - resolution: {integrity: sha512-2FcgD12xPbwCoe5i9/HK0jJ1xA1m+QfC1e6htG9Bl/hNOnLyaFmQSlqLKcfe3QdnoMPKpKEGFCbESBTg+SJNOw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-2FcgD12xPbwCoe5i9/HK0jJ1xA1m+QfC1e6htG9Bl/hNOnLyaFmQSlqLKcfe3QdnoMPKpKEGFCbESBTg+SJNOw== + } + engines: { node: '>=18' } binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - bindings@1.2.1: - resolution: {integrity: sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==} + resolution: + { + integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + } + engines: { node: '>=8' } birpc@0.2.19: - resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + resolution: + { + integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ== + } bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + resolution: + { + integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + } body-parser@2.2.2: - resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA== + } + engines: { node: '>=18' } boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + resolution: + { + integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + } brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + resolution: + { + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + } brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + resolution: + { + integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + } + engines: { node: '>=8' } browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + } + engines: { node: '>= 6' } bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + } buffer-builder@0.2.0: - resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + resolution: + { + integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg== + } buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + } buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - bufferutil@1.1.0: - resolution: {integrity: sha512-bttEVtkre4VYrZH+ciatjApTuac7jLMQXVXzM/ymw82WFREdOrJO496C4Bkh0/FfYoBUSOFaAYF32a5Q8dyiLw==} + resolution: + { + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + } bufferutil@4.0.9: - resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} - engines: {node: '>=6.14.2'} + resolution: + { + integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw== + } + engines: { node: '>=6.14.2' } builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + } + engines: { node: '>=6' } busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + resolution: + { + integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + } + engines: { node: '>=10.16.0' } bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + } + engines: { node: '>= 0.8' } cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + } + engines: { node: '>=8' } cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} + resolution: + { + integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + } + engines: { node: '>= 6.0.0' } cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + } + engines: { node: '>=14.16' } cacheable-request@12.0.1: - resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg== + } + engines: { node: '>=18' } call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + } + engines: { node: '>= 0.4' } call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + } + engines: { node: '>= 0.4' } call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + } + engines: { node: '>= 0.4' } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + } + engines: { node: '>=6' } camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + } + engines: { node: '>=6' } camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + } + engines: { node: '>=10' } caniuse-lite@1.0.30001669: - resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} + resolution: + { + integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w== + } ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + resolution: + { + integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + } chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + } + engines: { node: '>=4' } chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== + } + engines: { node: '>=12' } chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== + } + engines: { node: '>=18' } chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + } + engines: { node: '>=4' } chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + } + engines: { node: '>=10' } chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + resolution: + { + integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + } + engines: { node: '>=10' } character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + resolution: + { + integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + } character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + resolution: + { + integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + } chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + resolution: + { + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + } check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + resolution: + { + integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + } check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} + resolution: + { + integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + } + engines: { node: '>= 16' } cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + resolution: + { + integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + } cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} - engines: {node: '>=18.17'} + resolution: + { + integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww== + } + engines: { node: '>=18.17' } chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + resolution: + { + integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + } + engines: { node: '>= 8.10.0' } chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + resolution: + { + integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + } + engines: { node: '>= 8.10.0' } chokidar@4.0.1: - resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} - engines: {node: '>= 14.16.0'} + resolution: + { + integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + } + engines: { node: '>= 14.16.0' } chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + } + engines: { node: '>=6.0' } ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + } + engines: { node: '>=8' } cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + resolution: + { + integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== + } clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== + } + engines: { node: '>=4' } cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + } + engines: { node: '>=8' } cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + } + engines: { node: '>=18' } cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + } + engines: { node: '>=6' } cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} + resolution: + { + integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + } + engines: { node: 10.* || >= 12.* } cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + } + engines: { node: '>=18' } cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + } + engines: { node: '>= 10' } cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + resolution: + { + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + } cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + } + engines: { node: '>=12' } clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + } + engines: { node: '>=0.8' } co-body@6.2.0: - resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA== + } + engines: { node: '>=8.0.0' } co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + resolution: + { + integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + } + engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + resolution: + { + integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + } color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + } + engines: { node: '>=7.0.0' } color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + } color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + } colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + } colorjs.io@0.5.2: - resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + resolution: + { + integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw== + } combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + } + engines: { node: '>= 0.8' } comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + resolution: + { + integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + } commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + } + engines: { node: '>=18' } commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + resolution: + { + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + } commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + } + engines: { node: '>= 6' } commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} + resolution: + { + integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + } + engines: { node: ^12.20.0 || >=14 } commitlint@19.5.0: - resolution: {integrity: sha512-lCtwxgFulvMnCgBc8MVPlVMf+PNOqQSBhHpEnjV2JjEQEAhxjVDtC7IeuEtR+hHpGvHt6CwlLtm3uZNyEby5dQ==} - engines: {node: '>=v18'} + resolution: + { + integrity: sha512-lCtwxgFulvMnCgBc8MVPlVMf+PNOqQSBhHpEnjV2JjEQEAhxjVDtC7IeuEtR+hHpGvHt6CwlLtm3uZNyEby5dQ== + } + engines: { node: '>=v18' } hasBin: true compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + resolution: + { + integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + } component-emitter@1.3.1: - resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + resolution: + { + integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + } computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + resolution: + { + integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + } concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + } concat-stream@2.0.0: - resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} - engines: {'0': node >= 6.0} + resolution: + { + integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + } + engines: { '0': node >= 6.0 } confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + resolution: + { + integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + } connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + } + engines: { node: '>=0.8' } consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + resolution: + { + integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + } content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + } + engines: { node: '>= 0.6' } content-disposition@1.1.0: - resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g== + } + engines: { node: '>=18' } content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + } + engines: { node: '>= 0.6' } conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + } + engines: { node: '>=16' } conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== + } + engines: { node: '>=16' } conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== + } + engines: { node: '>=16' } hasBin: true convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + } cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} + resolution: + { + integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== + } + engines: { node: '>=6.6.0' } cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + } + engines: { node: '>= 0.6' } cookiejar@2.1.4: - resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + resolution: + { + integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + } cookies@0.9.1: - resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== + } + engines: { node: '>= 0.8' } copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} + resolution: + { + integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + } + engines: { node: '>=12.13' } cors@2.8.6: - resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== + } + engines: { node: '>= 0.10' } cosmiconfig-typescript-loader@5.0.0: - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} + resolution: + { + integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== + } + engines: { node: '>=v16' } peerDependencies: '@types/node': '*' cosmiconfig: '>=8.2' typescript: '>=4' cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + } + engines: { node: '>=10' } cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + } + engines: { node: '>=14' } peerDependencies: typescript: '>=4.9.5' peerDependenciesMeta: @@ -3485,63 +5748,111 @@ packages: optional: true create-codepen@2.0.0: - resolution: {integrity: sha512-ehJ0Zw5RSV2G4+/azUb7vEZWRSA/K9cW7HDock1Y9ViDexkgSJUZJRcObdw/YAWeXKjreEQV9l/igNSsJ1yw5A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-ehJ0Zw5RSV2G4+/azUb7vEZWRSA/K9cW7HDock1Y9ViDexkgSJUZJRcObdw/YAWeXKjreEQV9l/igNSsJ1yw5A== + } + engines: { node: '>=18' } create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + resolution: + { + integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + } cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + resolution: + { + integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + } + engines: { node: '>=10.14', npm: '>=6', yarn: '>=1' } hasBin: true cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + } + engines: { node: '>= 8' } css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + resolution: + { + integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + } css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + } + engines: { node: '>= 6' } csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + } damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + resolution: + { + integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + } dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== + } + engines: { node: '>=12' } data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + } + engines: { node: '>= 0.4' } data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + } + engines: { node: '>= 0.4' } data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + } + engines: { node: '>= 0.4' } dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + resolution: + { + integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + } de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + resolution: + { + integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + } debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + resolution: + { + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -3549,8 +5860,11 @@ packages: optional: true debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + } + engines: { node: '>=6.0' } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -3558,8 +5872,11 @@ packages: optional: true debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + } + engines: { node: '>=6.0' } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -3567,15 +5884,24 @@ packages: optional: true decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + } + engines: { node: '>=0.10.0' } decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + } + engines: { node: '>=10' } dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + resolution: + { + integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + } peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -3583,316 +5909,564 @@ packages: optional: true deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + } + engines: { node: '>=6' } deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== + } + engines: { node: '>=6' } deep-equal@1.0.1: - resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + resolution: + { + integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== + } deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + } + engines: { node: '>= 0.4' } deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + } deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + } + engines: { node: '>=0.10.0' } defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + resolution: + { + integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + } defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + } + engines: { node: '>=10' } define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + } + engines: { node: '>= 0.4' } define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + } + engines: { node: '>=8' } define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + } + engines: { node: '>= 0.4' } delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + } + engines: { node: '>=0.4.0' } delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + resolution: + { + integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + } depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + } + engines: { node: '>= 0.6' } depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + } + engines: { node: '>= 0.8' } dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + } + engines: { node: '>=6' } destr@2.0.3: - resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + resolution: + { + integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== + } destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + resolution: + { + integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + } + engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} + resolution: + { + integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g== + } + engines: { node: '>=12.20' } detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + } + engines: { node: '>=0.10' } hasBin: true detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + } + engines: { node: '>=8' } detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + resolution: + { + integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + } dezalgo@1.0.4: - resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + resolution: + { + integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + } diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + resolution: + { + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + } + engines: { node: '>=0.3.1' } dijkstrajs@1.0.3: - resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + resolution: + { + integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + } dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + } + engines: { node: '>=8' } doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + } + engines: { node: '>=0.10.0' } doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + } + engines: { node: '>=6.0.0' } dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + resolution: + { + integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + } domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + resolution: + { + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + } domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + } + engines: { node: '>= 4' } domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + resolution: + { + integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + } dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + } + engines: { node: '>=8' } dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + } + engines: { node: '>=12' } dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + } + engines: { node: '>= 0.4' } ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + resolution: + { + integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + } electron-to-chromium@1.5.39: - resolution: {integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==} + resolution: + { + integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg== + } emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + } + engines: { node: '>=12' } emoji-regex-xs@1.0.0: - resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + resolution: + { + integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== + } emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + resolution: + { + integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== + } emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + } emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + } encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + } + engines: { node: '>= 0.8' } encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + } + engines: { node: '>= 0.8' } encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + resolution: + { + integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg== + } end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - endpoint@0.4.5: - resolution: {integrity: sha512-oA2ALUF+d4Y0I8/WMV/0BuAZGHxfIdAygr9ZXP4rfzmp5zpYZmYKHKAbqRQnrE1YGdPhVg4D24CQkyx2qYEoHg==} + resolution: + { + integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + } enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + } + engines: { node: '>=10.13.0' } entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + } + engines: { node: '>=0.12' } env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + } + engines: { node: '>=6' } envinfo@7.14.0: - resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== + } + engines: { node: '>=4' } hasBin: true environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + } + engines: { node: '>=18' } error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + } es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + } + engines: { node: '>= 0.4' } es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + } + engines: { node: '>= 0.4' } es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + } + engines: { node: '>= 0.4' } es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + } + engines: { node: '>= 0.4' } es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + resolution: + { + integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + } es-iterator-helpers@1.1.0: - resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw== + } + engines: { node: '>= 0.4' } es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + resolution: + { + integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + } es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + resolution: + { + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + } es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + } + engines: { node: '>= 0.4' } es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + } + engines: { node: '>= 0.4' } es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + } + engines: { node: '>= 0.4' } es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + } + engines: { node: '>= 0.4' } es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + resolution: + { + integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + } es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + } + engines: { node: '>= 0.4' } esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== + } + engines: { node: '>=12' } hasBin: true esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== + } + engines: { node: '>=18' } + hasBin: true + + esbuild@0.28.2: + resolution: + { + integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA== + } + engines: { node: '>=18' } hasBin: true escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + } + engines: { node: '>=6' } escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + resolution: + { + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + } escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + } + engines: { node: '>=0.8.0' } escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + } + engines: { node: '>=8' } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + } + engines: { node: '>=10' } eslint-config-prettier@8.10.0: - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + resolution: + { + integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + } hasBin: true peerDependencies: eslint: '>=7.0.0' eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + resolution: + { + integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + } hasBin: true peerDependencies: eslint: '>=7.0.0' eslint-config-turbo@1.13.4: - resolution: {integrity: sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw==} + resolution: + { + integrity: sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw== + } peerDependencies: eslint: '>6.6.0' eslint-import-resolver-alias@1.1.2: - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== + } + engines: { node: '>= 4' } peerDependencies: eslint-plugin-import: '>=1.4.0' eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + resolution: + { + integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + } eslint-import-resolver-typescript@3.6.3: - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== + } + engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: eslint: '*' eslint-plugin-import: '*' @@ -3904,8 +6478,11 @@ packages: optional: true eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + } + engines: { node: '>=4' } peerDependencies: '@typescript-eslint/parser': '*' eslint: '*' @@ -3925,14 +6502,20 @@ packages: optional: true eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} + resolution: + { + integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + } + engines: { node: '>=6.5.0' } peerDependencies: eslint: '>=4.19.1' eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + } + engines: { node: '>=4' } peerDependencies: '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 @@ -3941,8 +6524,11 @@ packages: optional: true eslint-plugin-jest@27.9.0: - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 eslint: ^7.0.0 || ^8.0.0 @@ -3954,17 +6540,26 @@ packages: optional: true eslint-plugin-jsx-a11y@6.10.0: - resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== + } + engines: { node: '>=4.0' } peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA== + } + engines: { node: '>=6' } eslint-plugin-playwright@0.16.0: - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + resolution: + { + integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw== + } peerDependencies: eslint: '>=7' eslint-plugin-jest: '>=25' @@ -3973,8 +6568,11 @@ packages: optional: true eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + } + engines: { node: '>=12.0.0' } peerDependencies: eslint: '>=7.28.0' eslint-config-prettier: '*' @@ -3984,184 +6582,319 @@ packages: optional: true eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + } + engines: { node: '>=10' } peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 eslint-plugin-react@7.37.1: - resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg== + } + engines: { node: '>=4' } peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-plugin-testing-library@6.3.0: - resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + resolution: + { + integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6' } peerDependencies: eslint: ^7.5.0 || ^8.0.0 eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + resolution: + { + integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA== + } eslint-plugin-turbo@1.13.4: - resolution: {integrity: sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg==} + resolution: + { + integrity: sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg== + } peerDependencies: eslint: '>6.6.0' eslint-plugin-unicorn@48.0.1: - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw== + } + engines: { node: '>=16' } peerDependencies: eslint: '>=8.44.0' eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + } + engines: { node: '>=8.0.0' } eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + } + engines: { node: '>=10' } eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + } + engines: { node: '>=4' } hasBin: true esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + } + engines: { node: '>=0.10' } esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + } + engines: { node: '>=4.0' } estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + } + engines: { node: '>=4.0' } estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + } + engines: { node: '>=4.0' } estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + resolution: + { + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + } estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + } esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + } + engines: { node: '>=0.10.0' } etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + } + engines: { node: '>= 0.6' } eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + } events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} + resolution: + { + integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + } + engines: { node: '>=0.8.x' } execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + } + engines: { node: '>=10' } execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + } + engines: { node: '>=10' } execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + resolution: + { + integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + } + engines: { node: '>=16.17' } execa@9.5.2: - resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} - engines: {node: ^18.19.0 || >=20.5.0} + resolution: + { + integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q== + } + engines: { node: ^18.19.0 || >=20.5.0 } exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + } + engines: { node: '>= 0.8.0' } expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== + } + engines: { node: '>=12.0.0' } expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== + } + engines: { node: '>=12.0.0' } expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } express@5.2.1: - resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== + } + engines: { node: '>= 18' } extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + } + engines: { node: '>=0.10.0' } external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + } + engines: { node: '>=4' } fast-check@4.5.3: - resolution: {integrity: sha512-IE9csY7lnhxBnA8g/WI5eg/hygA6MGWJMSNfFRrBlXUciADEhS1EDB0SIsMSvzubzIlOBbVITSsypCsW717poA==} - engines: {node: '>=12.17.0'} + resolution: + { + integrity: sha512-IE9csY7lnhxBnA8g/WI5eg/hygA6MGWJMSNfFRrBlXUciADEhS1EDB0SIsMSvzubzIlOBbVITSsypCsW717poA== + } + engines: { node: '>=12.17.0' } fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + } fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + resolution: + { + integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + } fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + } + engines: { node: '>=8.6.0' } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + } fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + } fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + resolution: + { + integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + } fast-uri@3.0.3: - resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + resolution: + { + integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + } fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + resolution: + { + integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + } fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + } fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + } + engines: { node: '>=12.0.0' } peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4169,54 +6902,93 @@ packages: optional: true fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + resolution: + { + integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + } figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + } + engines: { node: '>=8' } figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + } + engines: { node: '>=18' } file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + resolution: + { + integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + } + engines: { node: ^10.12.0 || >=12.0.0 } file-type@21.3.0: - resolution: {integrity: sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA== + } + engines: { node: '>=20' } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + } + engines: { node: '>=8' } finalhandler@2.1.1: - resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} - engines: {node: '>= 18.0.0'} + resolution: + { + integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== + } + engines: { node: '>= 18.0.0' } find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + } + engines: { node: '>=8' } find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + } + engines: { node: '>=10' } find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== + } + engines: { node: '>=18' } flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + resolution: + { + integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + } + engines: { node: ^10.12.0 || >=12.0.0 } flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + resolution: + { + integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + } follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + } + engines: { node: '>=4.0' } peerDependencies: debug: '*' peerDependenciesMeta: @@ -4224,8 +6996,11 @@ packages: optional: true follow-redirects@1.16.0: - resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== + } + engines: { node: '>=4.0' } peerDependencies: debug: '*' peerDependenciesMeta: @@ -4233,680 +7008,1210 @@ packages: optional: true for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + resolution: + { + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + } fork-ts-checker-webpack-plugin@8.0.0: - resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + resolution: + { + integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg== + } + engines: { node: '>=12.13.0', yarn: '>=1.0.0' } peerDependencies: typescript: '>3.6.0' webpack: ^5.11.0 form-data-encoder@4.0.2: - resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw== + } + engines: { node: '>= 18' } form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + } + engines: { node: '>= 6' } form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + } + engines: { node: '>= 6' } formidable@2.1.2: - resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + resolution: + { + integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== + } deprecated: 'ACTION REQUIRED: SWITCH TO v3 - v1 and v2 are VULNERABLE! v1 is DEPRECATED FOR OVER 2 YEARS! Use formidable@latest or try formidable-mini for fresh projects' forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + } + engines: { node: '>= 0.6' } fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + resolution: + { + integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + } fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + } + engines: { node: '>= 0.6' } fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + } + engines: { node: '>= 0.8' } fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + } + engines: { node: '>=12' } fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + resolution: + { + integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + } + engines: { node: '>=14.14' } fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + resolution: + { + integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + } + engines: { node: '>=6 <7 || >=8' } fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + resolution: + { + integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + } fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + } + + fsevents@2.3.2: + resolution: + { + integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + } function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + } + engines: { node: '>= 0.4' } functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + } gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + } + engines: { node: '>=6.9.0' } get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + } + engines: { node: 6.* || 8.* || >= 10.* } get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== + } + engines: { node: '>=18' } get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + resolution: + { + integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + } get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + } + engines: { node: '>= 0.4' } get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + } + engines: { node: '>= 0.4' } get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + } + engines: { node: '>=8.0.0' } get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + } + engines: { node: '>= 0.4' } get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + } + engines: { node: '>=12' } get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + } + engines: { node: '>=8' } get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + } + engines: { node: '>=10' } get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + } + engines: { node: '>=16' } get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + } + engines: { node: '>=18' } get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + } + engines: { node: '>= 0.4' } get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + resolution: + { + integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== + } giscus@1.5.0: - resolution: {integrity: sha512-t3LL0qbSO3JXq3uyQeKpF5CegstGfKX/0gI6eDe1cmnI7D56R7j52yLdzw4pdKrg3VnufwCgCM3FDz7G1Qr6lg==} + resolution: + { + integrity: sha512-t3LL0qbSO3JXq3uyQeKpF5CegstGfKX/0gI6eDe1cmnI7D56R7j52yLdzw4pdKrg3VnufwCgCM3FDz7G1Qr6lg== + } git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + resolution: + { + integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA== + } git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} - deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. + resolution: + { + integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== + } + engines: { node: '>=16' } + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + } + engines: { node: '>= 6' } glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + } + engines: { node: '>=10.13.0' } glob-to-regex.js@1.2.0: - resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + resolution: + { + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + } glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + } deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@9.3.5: - resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + } + engines: { node: '>=16 || 14 >=14.17' } deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + } + engines: { node: '>=18' } globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + } + engines: { node: '>=4' } globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + } + engines: { node: '>=8' } globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + } + engines: { node: '>= 0.4' } globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + } + engines: { node: '>=10' } globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw== + } + engines: { node: '>=18' } gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + } gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + } + engines: { node: '>= 0.4' } got@14.4.3: - resolution: {integrity: sha512-iTC0Z87yxSijWTh/IpvGpwOhIQK7+GgWkYrMRoN/hB9qeRj9RPuLGODwevs0p5idUf7nrxCVa5IlOmK3b8z+KA==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-iTC0Z87yxSijWTh/IpvGpwOhIQK7+GgWkYrMRoN/hB9qeRj9RPuLGODwevs0p5idUf7nrxCVa5IlOmK3b8z+KA== + } + engines: { node: '>=20' } graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + } graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + } gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + } + engines: { node: '>=6.0' } has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + resolution: + { + integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + } has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + } + engines: { node: '>=4' } has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + } + engines: { node: '>=8' } has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + } has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + } + engines: { node: '>= 0.4' } has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + } + engines: { node: '>= 0.4' } has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + } + engines: { node: '>= 0.4' } has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + } + engines: { node: '>= 0.4' } hash-sum@2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + resolution: + { + integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + } hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + } + engines: { node: '>= 0.4' } hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + resolution: + { + integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg== + } hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + resolution: + { + integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + } he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + resolution: + { + integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + } hasBin: true hexoid@1.0.0: - resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + } + engines: { node: '>=8' } hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + resolution: + { + integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + } hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + resolution: + { + integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + } html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + } html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + resolution: + { + integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + } htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + resolution: + { + integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== + } http-assert@1.5.0: - resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== + } + engines: { node: '>= 0.8' } http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + resolution: + { + integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + } http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + } + engines: { node: '>= 0.6' } http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + } + engines: { node: '>= 0.8' } http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + } + engines: { node: '>= 0.8' } http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} + resolution: + { + integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + } + engines: { node: '>=10.19.0' } human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} + resolution: + { + integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + } + engines: { node: '>=8.12.0' } human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + resolution: + { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + } + engines: { node: '>=10.17.0' } human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} + resolution: + { + integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + } + engines: { node: '>=16.17.0' } human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} - engines: {node: '>=18.18.0'} + resolution: + { + integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA== + } + engines: { node: '>=18.18.0' } husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== + } + engines: { node: '>=18' } hasBin: true hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} + resolution: + { + integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + } + engines: { node: '>=10.18' } iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + } + engines: { node: '>=0.10.0' } iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + } + engines: { node: '>=0.10.0' } iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + } + engines: { node: '>=0.10.0' } ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + } ignore-by-default@1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + resolution: + { + integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + } + engines: { node: '>= 4' } immutable@4.3.7: - resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + resolution: + { + integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== + } immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + resolution: + { + integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== + } import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + } + engines: { node: '>=6' } import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + } + engines: { node: '>=8' } import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + } + engines: { node: '>=8' } hasBin: true import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + resolution: + { + integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== + } imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + } + engines: { node: '>=0.8.19' } indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + } + engines: { node: '>=8' } inflation@2.1.0: - resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ== + } + engines: { node: '>= 0.8.0' } inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + } deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + } ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + resolution: + { + integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } inquirer@8.2.4: - resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + } + engines: { node: '>=12.0.0' } inquirer@8.2.5: - resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} - engines: {node: '>=12.0.0'} - - inspector@0.5.0: - resolution: {integrity: sha512-qs91uK2uL3Bjcl+zSe088cR2Jh8TWgjifv54jsIvr593q92rUPFaTo+WZGvoyMgsRZWusZQR6JJmNA913QSZ+A==} + resolution: + { + integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + } + engines: { node: '>=12.0.0' } internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + } + engines: { node: '>= 0.4' } interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + } + engines: { node: '>= 0.10' } ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + } + engines: { node: '>= 0.10' } is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + } + engines: { node: '>= 0.4' } is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + } + engines: { node: '>= 0.4' } is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + } is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + } + engines: { node: '>= 0.4' } is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + resolution: + { + integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + } is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + } + engines: { node: '>=8' } is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + } + engines: { node: '>= 0.4' } is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + } + engines: { node: '>=6' } is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + resolution: + { + integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q== + } is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + } + engines: { node: '>= 0.4' } is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + } + engines: { node: '>= 0.4' } is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + } + engines: { node: '>= 0.4' } is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + } + engines: { node: '>= 0.4' } is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + } + engines: { node: '>=8' } hasBin: true is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + } + engines: { node: '>=0.10.0' } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + } + engines: { node: '>=0.10.0' } is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + resolution: + { + integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + } + engines: { node: '>=8' } is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + } + engines: { node: '>=12' } is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + } + engines: { node: '>=18' } is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + } + engines: { node: '>=6' } is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + } + engines: { node: '>= 0.4' } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + } + engines: { node: '>=0.10.0' } is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + } + engines: { node: '>=8' } is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + } + engines: { node: '>=12' } is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + } + engines: { node: '>= 0.4' } is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + } + engines: { node: '>= 0.4' } is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + } + engines: { node: '>= 0.4' } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + } + engines: { node: '>=0.12.0' } is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + } + engines: { node: '>=8' } is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + } + engines: { node: '>=8' } is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + } + engines: { node: '>=12' } is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + resolution: + { + integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + } is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + } + engines: { node: '>= 0.4' } is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + } + engines: { node: '>= 0.4' } is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + } + engines: { node: '>= 0.4' } is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + } + engines: { node: '>=8' } is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + } + engines: { node: '>=18' } is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + } + engines: { node: '>= 0.4' } is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + } + engines: { node: '>= 0.4' } is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + } + engines: { node: '>=8' } is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + } + engines: { node: '>= 0.4' } is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + } + engines: { node: '>=10' } is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + } + engines: { node: '>=12' } is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + } + engines: { node: '>=18' } is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + } + engines: { node: '>= 0.4' } is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + resolution: + { + integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + } is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + } + engines: { node: '>= 0.4' } is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} + resolution: + { + integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + } + engines: { node: '>=12.13' } is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + } + engines: { node: '>=8' } isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + } istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + } + engines: { node: '>=8' } istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + } + engines: { node: '>=8' } istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + } + engines: { node: '>=10' } istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + } + engines: { node: '>=10' } istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + } + engines: { node: '>=10' } istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + } + engines: { node: '>=8' } istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + } + engines: { node: '>=8' } iterare@1.2.1: - resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== + } + engines: { node: '>=6' } iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ== + } + engines: { node: '>= 0.4' } jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -4915,8 +8220,11 @@ packages: optional: true jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -4927,48 +8235,81 @@ packages: optional: true jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + } + engines: { node: '>=6' } peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -4976,52 +8317,88 @@ packages: optional: true jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + resolution: + { + integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + } + engines: { node: '>= 10.13.0' } jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest@29.3.1: - resolution: {integrity: sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -5030,516 +8407,936 @@ packages: optional: true jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + resolution: + { + integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + } hasBin: true jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + resolution: + { + integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== + } js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + } js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + resolution: + { + integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== + } js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + resolution: + { + integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + } js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + resolution: + { + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + } hasBin: true js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + } hasBin: true jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + resolution: + { + integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + } hasBin: true jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + } + engines: { node: '>=6' } hasBin: true json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + } json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + } json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + } json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + } json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + resolution: + { + integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + } hasBin: true json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + } + engines: { node: '>=6' } hasBin: true jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + resolution: + { + integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + } jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + resolution: + { + integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + } jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + resolution: + { + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + } jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} + resolution: + { + integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + } + engines: { '0': node >= 0.2.0 } jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + } + engines: { node: '>=4.0' } keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== + } + engines: { node: '>= 0.6' } keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + } kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + } + engines: { node: '>=0.10.0' } kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + } + engines: { node: '>=6' } koa-body@6.0.1: - resolution: {integrity: sha512-M8ZvMD8r+kPHy28aWP9VxL7kY8oPWA+C7ZgCljrCMeaU7uX6wsIQgDHskyrAr9sw+jqnIXyv4Mlxri5R4InIJg==} + resolution: + { + integrity: sha512-M8ZvMD8r+kPHy28aWP9VxL7kY8oPWA+C7ZgCljrCMeaU7uX6wsIQgDHskyrAr9sw+jqnIXyv4Mlxri5R4InIJg== + } koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + resolution: + { + integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== + } koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== + } + engines: { node: '>= 10' } koa-router@12.0.1: - resolution: {integrity: sha512-gaDdj3GtzoLoeosacd50kBBTnnh3B9AYxDThQUo4sfUyXdOhY6ku1qyZKW88tQCRgc3Sw6ChXYXWZwwgjOxE0w==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-gaDdj3GtzoLoeosacd50kBBTnnh3B9AYxDThQUo4sfUyXdOhY6ku1qyZKW88tQCRgc3Sw6ChXYXWZwwgjOxE0w== + } + engines: { node: '>= 12' } deprecated: 'Please use @koa/router instead, starting from v9! ' koa-router@13.0.1: - resolution: {integrity: sha512-4/sijXdSxocIe2wv7RFFSxvo2ic1pDzPSmy11yCGztng1hx408qfw1wVmN3aqhQaU7U6nJ039JKC8ObE73Ohgw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-4/sijXdSxocIe2wv7RFFSxvo2ic1pDzPSmy11yCGztng1hx408qfw1wVmN3aqhQaU7U6nJ039JKC8ObE73Ohgw== + } + engines: { node: '>= 18' } deprecated: 'Please use @koa/router instead, starting from v9! ' koa@2.16.4: - resolution: {integrity: sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + resolution: + { + integrity: sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw== + } + engines: { node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4 } kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + resolution: + { + integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + } language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + resolution: + { + integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + } language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + } + engines: { node: '>=0.10' } leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + } + engines: { node: '>=6' } levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + } + engines: { node: '>= 0.8.0' } lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== + } + engines: { node: '>=14' } lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + } linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + resolution: + { + integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + } lint-staged@15.2.10: - resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} - engines: {node: '>=18.12.0'} + resolution: + { + integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg== + } + engines: { node: '>=18.12.0' } hasBin: true listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== + } + engines: { node: '>=18.0.0' } lit-element@4.1.1: - resolution: {integrity: sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==} + resolution: + { + integrity: sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew== + } lit-html@3.2.1: - resolution: {integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==} + resolution: + { + integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA== + } lit@3.2.1: - resolution: {integrity: sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==} + resolution: + { + integrity: sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w== + } load-esm@1.0.3: - resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} - engines: {node: '>=13.2.0'} + resolution: + { + integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA== + } + engines: { node: '>=13.2.0' } loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} + resolution: + { + integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + } + engines: { node: '>=6.11.5' } local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + } + engines: { node: '>=14' } locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + } + engines: { node: '>=8' } locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + } + engines: { node: '>=10' } locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + resolution: + { + integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + } lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + resolution: + { + integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + } deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + resolution: + { + integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + } deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + resolution: + { + integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + } lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + resolution: + { + integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + } lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + resolution: + { + integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + } lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + } lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + resolution: + { + integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + } lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + resolution: + { + integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + } lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + resolution: + { + integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + } lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + resolution: + { + integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + } lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + resolution: + { + integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + } lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + } log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + } + engines: { node: '>=10' } log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== + } + engines: { node: '>=18' } log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + } + engines: { node: '>=18' } loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + } hasBin: true loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + resolution: + { + integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + } loupe@3.1.2: - resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + resolution: + { + integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== + } lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + } lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + } lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + } + engines: { node: '>=10' } macos-release@2.5.1: - resolution: {integrity: sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A== + } + engines: { node: '>=6' } magic-string@0.30.0: - resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== + } + engines: { node: '>=12' } magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + resolution: + { + integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== + } magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + } magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + resolution: + { + integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw== + } make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + } + engines: { node: '>=10' } make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + resolution: + { + integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + } makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + resolution: + { + integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + } markdown-it-anchor@9.2.0: - resolution: {integrity: sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==} + resolution: + { + integrity: sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg== + } peerDependencies: '@types/markdown-it': '*' markdown-it: '*' markdown-it-emoji@3.0.0: - resolution: {integrity: sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==} + resolution: + { + integrity: sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg== + } markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + resolution: + { + integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + } hasBin: true math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + } + engines: { node: '>= 0.4' } mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + resolution: + { + integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + } mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + resolution: + { + integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + } media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + } + engines: { node: '>= 0.6' } media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== + } + engines: { node: '>= 0.8' } medium-zoom@1.1.0: - resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} + resolution: + { + integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ== + } memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + resolution: + { + integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== + } + engines: { node: '>= 4.0.0' } memfs@4.56.10: - resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==} + resolution: + { + integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w== + } peerDependencies: tslib: '2' meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} + resolution: + { + integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + } + engines: { node: '>=16.10' } merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== + } + engines: { node: '>=18' } merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + } + engines: { node: '>= 8' } methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + } + engines: { node: '>= 0.6' } micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + resolution: + { + integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== + } micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + resolution: + { + integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== + } micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + resolution: + { + integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== + } micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + resolution: + { + integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== + } micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + resolution: + { + integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== + } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + } + engines: { node: '>=8.6' } mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + } + engines: { node: '>= 0.6' } mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + } + engines: { node: '>= 0.6' } mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + } + engines: { node: '>= 0.6' } mime-types@3.0.2: - resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + } + engines: { node: '>=18' } mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + } + engines: { node: '>=4.0.0' } hasBin: true mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + } + engines: { node: '>=6' } mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + } + engines: { node: '>=12' } mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + } + engines: { node: '>=18' } mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + } + engines: { node: '>=10' } mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + } + engines: { node: '>=4' } minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + resolution: + { + integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + } minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + } minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + } + engines: { node: '>=16 || 14 >=14.17' } minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + } + engines: { node: '>=16 || 14 >=14.17' } minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + } + engines: { node: '>=16 || 14 >=14.17' } minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + } minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + } + engines: { node: '>=8' } minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + } + engines: { node: '>=16 || 14 >=14.17' } mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + resolution: + { + integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + } mlly@1.7.2: - resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + resolution: + { + integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA== + } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + } muggle-string@0.3.1: - resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + resolution: + { + integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== + } multer@2.1.1: - resolution: {integrity: sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A==} - engines: {node: '>= 10.16.0'} + resolution: + { + integrity: sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A== + } + engines: { node: '>= 10.16.0' } mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - - nan@1.8.4: - resolution: {integrity: sha512-609zQ1h3ApgH/94qmbbEklSrjcYYXCHnsWk4MAojq4OUk3tidhDYhPaMasMFKsZPZ96r4eQA1hbR2W4H7/77XA==} + resolution: + { + integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + } nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true nanoid@5.0.9: - resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} - engines: {node: ^18 || >=20} + resolution: + { + integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q== + } + engines: { node: ^18 || >=20 } hasBin: true natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + resolution: + { + integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + } natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + } negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + } + engines: { node: '>= 0.6' } negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + } + engines: { node: '>= 0.6' } neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + resolution: + { + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + } node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + resolution: + { + integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + } node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + resolution: + { + integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + } node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + resolution: + { + integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + } node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + resolution: + { + integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== + } node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + } + engines: { node: 4.x || >=6.0.0 } peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -5547,326 +9344,593 @@ packages: optional: true node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + resolution: + { + integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + } hasBin: true node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + } node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + resolution: + { + integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + } nodemon@3.1.7: - resolution: {integrity: sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ== + } + engines: { node: '>=10' } hasBin: true normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + resolution: + { + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + } normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + } + engines: { node: '>=0.10.0' } normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + } + engines: { node: '>=0.10.0' } normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== + } + engines: { node: '>=14.16' } npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + } + engines: { node: '>=8' } npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + } + engines: { node: '>=18' } nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + resolution: + { + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + } object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + } + engines: { node: '>=0.10.0' } object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + } + engines: { node: '>= 0.4' } object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + } + engines: { node: '>= 0.4' } object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + } + engines: { node: '>= 0.4' } object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + } + engines: { node: '>= 0.4' } object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + } + engines: { node: '>= 0.4' } object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + } + engines: { node: '>= 0.4' } object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + } + engines: { node: '>= 0.4' } object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + } + engines: { node: '>= 0.4' } object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + } + engines: { node: '>= 0.4' } obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + resolution: + { + integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== + } ofetch@1.4.1: - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + resolution: + { + integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== + } on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + } + engines: { node: '>= 0.8' } once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + } onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + } + engines: { node: '>=6' } onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + } + engines: { node: '>=12' } onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + } + engines: { node: '>=18' } oniguruma-to-es@0.7.0: - resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} + resolution: + { + integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg== + } only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + resolution: + { + integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== + } open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + } + engines: { node: '>=12' } optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - options@0.0.6: - resolution: {integrity: sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + } + engines: { node: '>= 0.8.0' } ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + } + engines: { node: '>=10' } ora@8.1.0: - resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ== + } + engines: { node: '>=18' } os-name@4.0.1: - resolution: {integrity: sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw== + } + engines: { node: '>=10' } os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + } + engines: { node: '>=0.10.0' } p-cancelable@4.0.1: - resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg== + } + engines: { node: '>=14.16' } p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + } + engines: { node: '>=6' } p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + } + engines: { node: '>=10' } p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== + } + engines: { node: '>=18' } p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + } + engines: { node: '>=8' } p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + } + engines: { node: '>=10' } p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + } + engines: { node: '>=6' } parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + } + engines: { node: '>=6' } parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + } + engines: { node: '>=8' } parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + } + engines: { node: '>=18' } parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + resolution: + { + integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== + } parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + resolution: + { + integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow== + } parse5@7.2.0: - resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} + resolution: + { + integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA== + } parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + } + engines: { node: '>= 0.8' } path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + resolution: + { + integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + } path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + } + engines: { node: '>=8' } path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + } + engines: { node: '>=0.10.0' } path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + } + engines: { node: '>=8' } path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + } + engines: { node: '>=12' } path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + } path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + resolution: + { + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + } + engines: { node: '>=16 || 14 >=14.18' } path-to-regexp@3.3.0: - resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + resolution: + { + integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== + } path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + resolution: + { + integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + } path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== + } + engines: { node: '>=16' } path-to-regexp@8.4.2: - resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + resolution: + { + integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== + } path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + } + engines: { node: '>=8' } path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + } + engines: { node: '>=12' } pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + resolution: + { + integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + } pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + } pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + resolution: + { + integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + } pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} + resolution: + { + integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + } + engines: { node: '>= 14.16' } perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + resolution: + { + integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== + } photoswipe@5.4.4: - resolution: {integrity: sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA==} - engines: {node: '>= 0.12.0'} + resolution: + { + integrity: sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA== + } + engines: { node: '>= 0.12.0' } picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + resolution: + { + integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== + } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + } + engines: { node: '>=8.6' } picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + } + engines: { node: '>=12' } pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + } + engines: { node: '>=0.10' } hasBin: true pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + } + engines: { node: '>= 6' } pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + } + engines: { node: '>=8' } pkg-types@1.2.1: - resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + resolution: + { + integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw== + } + + playwright-core@1.62.1: + resolution: + { + integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw== + } + engines: { node: '>=20' } + hasBin: true + + playwright@1.62.1: + resolution: + { + integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg== + } + engines: { node: '>=20' } + hasBin: true pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + } + engines: { node: '>=4' } pngjs@5.0.0: - resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + } + engines: { node: '>=10.13.0' } possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + } + engines: { node: '>= 0.4' } postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== + } + engines: { node: '>= 18' } peerDependencies: jiti: '>=1.21.0' postcss: '>=8.0.9' @@ -5883,30 +9947,51 @@ packages: optional: true postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + } postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== + } + engines: { node: ^10 || ^12 || >=14 } postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + } + engines: { node: ^10 || ^12 || >=14 } postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + } + engines: { node: ^10 || ^12 || >=14 } prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + } + engines: { node: '>= 0.8.0' } prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + } + engines: { node: '>=6.0.0' } prettier-plugin-packagejson@2.5.3: - resolution: {integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==} + resolution: + { + integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg== + } peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: @@ -5914,767 +9999,1334 @@ packages: optional: true prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + } + engines: { node: '>=10.13.0' } hasBin: true prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + } + engines: { node: '>=14' } hasBin: true pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } pretty-ms@9.1.0: - resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw== + } + engines: { node: '>=18' } prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + } + engines: { node: '>=6' } prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + } + engines: { node: '>= 6' } prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + resolution: + { + integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + } property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + resolution: + { + integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + } proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + } + engines: { node: '>= 0.10' } proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + } proxy-from-env@2.1.0: - resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== + } + engines: { node: '>=10' } pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + resolution: + { + integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + } pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + resolution: + { + integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + } punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + } + engines: { node: '>=6' } punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + } + engines: { node: '>=6' } pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + resolution: + { + integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + } pure-rand@7.0.1: - resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} + resolution: + { + integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== + } qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== + } + engines: { node: '>=10.13.0' } hasBin: true qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + } + engines: { node: '>=0.6' } qs@6.15.1: - resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== + } + engines: { node: '>=0.6' } queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + } quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + } + engines: { node: '>=10' } randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + resolution: + { + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + } range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + } + engines: { node: '>= 0.6' } raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + } + engines: { node: '>= 0.8' } raw-body@3.0.2: - resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== + } + engines: { node: '>= 0.10' } react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + } react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + resolution: + { + integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + } read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + } + engines: { node: '>=8' } read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + } + engines: { node: '>=8' } readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + } + engines: { node: '>= 6' } readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + } + engines: { node: '>=8.10.0' } readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} + resolution: + { + integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + } + engines: { node: '>= 14.16.0' } rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + } + engines: { node: '>= 0.10' } reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + resolution: + { + integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + } reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + } + engines: { node: '>= 0.4' } regex-recursion@4.3.0: - resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} + resolution: + { + integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A== + } regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + resolution: + { + integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== + } regex@5.0.2: - resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + resolution: + { + integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ== + } regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + resolution: + { + integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + } hasBin: true regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + } + engines: { node: '>= 0.4' } regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + resolution: + { + integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA== + } hasBin: true require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + } + engines: { node: '>=0.10.0' } require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + } + engines: { node: '>=0.10.0' } require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolution: + { + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + } resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolution: + { + integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + } resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + } + engines: { node: '>=8' } resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + } + engines: { node: '>=4' } resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + } + engines: { node: '>=8' } resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + } resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + } + engines: { node: '>=10' } resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + resolution: + { + integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + } resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolution: + { + integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + } hasBin: true resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolution: + { + integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + } hasBin: true responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + } + engines: { node: '>=14.16' } restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + } + engines: { node: '>=8' } restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + } + engines: { node: '>=18' } reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + resolution: + { + integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + } rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + resolution: + { + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + } deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@4.4.1: - resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + } + engines: { node: '>=14' } hasBin: true rollup@4.24.0: - resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + resolution: + { + integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== + } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true rollup@4.57.0: - resolution: {integrity: sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + resolution: + { + integrity: sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA== + } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + } + engines: { node: '>= 18' } run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + } + engines: { node: '>=0.12.0' } run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + } rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + resolution: + { + integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + } safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + resolution: + { + integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + } + engines: { node: '>=0.4' } safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + } safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + } + engines: { node: '>= 0.4' } safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + } sass-embedded-android-arm64@1.82.0: - resolution: {integrity: sha512-bldHMs02QQWXsgHUZRgolNnZdMjN6XHvmUYoRkzmFq7lsvtLU6SJg2S1Wa9IZJs9jRWdTmOgA6YibSf3pROyFQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-bldHMs02QQWXsgHUZRgolNnZdMjN6XHvmUYoRkzmFq7lsvtLU6SJg2S1Wa9IZJs9jRWdTmOgA6YibSf3pROyFQ== + } + engines: { node: '>=14.0.0' } cpu: [arm64] os: [android] sass-embedded-android-arm@1.82.0: - resolution: {integrity: sha512-ttGMvWnA/5TYdZTjr5fWHDbb9nZgKipHKCc9zZQRF5HjUydOYWKNqmAJHQtbFWaq35kd5qn6yiE73IJN6eJ6wA==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-ttGMvWnA/5TYdZTjr5fWHDbb9nZgKipHKCc9zZQRF5HjUydOYWKNqmAJHQtbFWaq35kd5qn6yiE73IJN6eJ6wA== + } + engines: { node: '>=14.0.0' } cpu: [arm] os: [android] sass-embedded-android-ia32@1.82.0: - resolution: {integrity: sha512-FUJOnxw8IYKuYuxxiOkk6QXle8/yQFtKjnuSAJuZ5ZpLVMcSZzLc3SWOtuEXYx5iSAfJCO075o2ZoG/pPrJ9aw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-FUJOnxw8IYKuYuxxiOkk6QXle8/yQFtKjnuSAJuZ5ZpLVMcSZzLc3SWOtuEXYx5iSAfJCO075o2ZoG/pPrJ9aw== + } + engines: { node: '>=14.0.0' } cpu: [ia32] os: [android] sass-embedded-android-riscv64@1.82.0: - resolution: {integrity: sha512-rd+vc+sxJxNnbhaubiIJmnb1b3FvC9wxCIq8spstopbO7o1uufvBBDeRoFSJaN+7oNhamzjlYGdu6aQoQNs3+A==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-rd+vc+sxJxNnbhaubiIJmnb1b3FvC9wxCIq8spstopbO7o1uufvBBDeRoFSJaN+7oNhamzjlYGdu6aQoQNs3+A== + } + engines: { node: '>=14.0.0' } cpu: [riscv64] os: [android] sass-embedded-android-x64@1.82.0: - resolution: {integrity: sha512-EVlybGTgJ8wNLyWj8RUatPXSnmIcvCsx3EfsRfBfhGihLbn4NNpavYO9QsvZzI2XWbJqHLBCd+CvkTcDw/TaSQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-EVlybGTgJ8wNLyWj8RUatPXSnmIcvCsx3EfsRfBfhGihLbn4NNpavYO9QsvZzI2XWbJqHLBCd+CvkTcDw/TaSQ== + } + engines: { node: '>=14.0.0' } cpu: [x64] os: [android] sass-embedded-darwin-arm64@1.82.0: - resolution: {integrity: sha512-LvdJPojjKlNGYOB0nSUR/ZtMDuAF4puspHlwK42aA/qK292bfSkMUKZPPapB2aSRwccc/ieBq5fI7n/WHrOCVw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-LvdJPojjKlNGYOB0nSUR/ZtMDuAF4puspHlwK42aA/qK292bfSkMUKZPPapB2aSRwccc/ieBq5fI7n/WHrOCVw== + } + engines: { node: '>=14.0.0' } cpu: [arm64] os: [darwin] sass-embedded-darwin-x64@1.82.0: - resolution: {integrity: sha512-6LfnD6YmG1aBfd3ReqMOJDb6Pg2Z/hmlJB7nU+Lb3E+hCNjAZAgeUHQxU/Pm1eIqJJTU/h4ib5QP0Pt9O8yVnw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-6LfnD6YmG1aBfd3ReqMOJDb6Pg2Z/hmlJB7nU+Lb3E+hCNjAZAgeUHQxU/Pm1eIqJJTU/h4ib5QP0Pt9O8yVnw== + } + engines: { node: '>=14.0.0' } cpu: [x64] os: [darwin] sass-embedded-linux-arm64@1.82.0: - resolution: {integrity: sha512-590/y0HJr/JiyxaqgR7Xf9P20BIhJ+zhB/afAnVuZe/4lEfCpTyM5xMe2+sKLsqtrVyzs9Zm/M4S4ASUOPCggA==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-590/y0HJr/JiyxaqgR7Xf9P20BIhJ+zhB/afAnVuZe/4lEfCpTyM5xMe2+sKLsqtrVyzs9Zm/M4S4ASUOPCggA== + } + engines: { node: '>=14.0.0' } cpu: [arm64] os: [linux] sass-embedded-linux-arm@1.82.0: - resolution: {integrity: sha512-ozjdC5rWzyi5Vo300I4tVZzneXOTQUiaxOr7DjtN26HuFaGAGCGmvThh2BRV4RvySg++5H9rdFu+VgyUQ5iukw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-ozjdC5rWzyi5Vo300I4tVZzneXOTQUiaxOr7DjtN26HuFaGAGCGmvThh2BRV4RvySg++5H9rdFu+VgyUQ5iukw== + } + engines: { node: '>=14.0.0' } cpu: [arm] os: [linux] sass-embedded-linux-ia32@1.82.0: - resolution: {integrity: sha512-hpc4acZ3UTjjJ3Q/GUXqQOCSml6AFKaku0HMawra9bKyRmOpxn8V5hqgXeOWVjK2oQzCmCnJvwKoQUP+S/SIYQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-hpc4acZ3UTjjJ3Q/GUXqQOCSml6AFKaku0HMawra9bKyRmOpxn8V5hqgXeOWVjK2oQzCmCnJvwKoQUP+S/SIYQ== + } + engines: { node: '>=14.0.0' } cpu: [ia32] os: [linux] sass-embedded-linux-musl-arm64@1.82.0: - resolution: {integrity: sha512-bc2MUSMv/jabnNGEyKP2jQAYZoEzTT/c633W6QoeSEWETGCuTNjaHvWWE6qSI6/UfRg1EpuV1LQA2jPMzZfv/w==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-bc2MUSMv/jabnNGEyKP2jQAYZoEzTT/c633W6QoeSEWETGCuTNjaHvWWE6qSI6/UfRg1EpuV1LQA2jPMzZfv/w== + } + engines: { node: '>=14.0.0' } cpu: [arm64] os: [linux] sass-embedded-linux-musl-arm@1.82.0: - resolution: {integrity: sha512-R5PQmY/I+GSoMtfLo8GgHkvF/q6x6y8VNM7yu/Ac1mJj86n48VFi29W1HfY2496+Q6cpAq7toobDj7YfldIdVA==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-R5PQmY/I+GSoMtfLo8GgHkvF/q6x6y8VNM7yu/Ac1mJj86n48VFi29W1HfY2496+Q6cpAq7toobDj7YfldIdVA== + } + engines: { node: '>=14.0.0' } cpu: [arm] os: [linux] sass-embedded-linux-musl-ia32@1.82.0: - resolution: {integrity: sha512-ZQKCFKm5TBcJ19UG6uUQmIKfVCJIWMb7e1a93lGeujSb9gyKF5Fb6MN3tuExoT7iFK8zU0Z9iyHqh93F58lcCw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-ZQKCFKm5TBcJ19UG6uUQmIKfVCJIWMb7e1a93lGeujSb9gyKF5Fb6MN3tuExoT7iFK8zU0Z9iyHqh93F58lcCw== + } + engines: { node: '>=14.0.0' } cpu: [ia32] os: [linux] sass-embedded-linux-musl-riscv64@1.82.0: - resolution: {integrity: sha512-5meSU8BHFeaT09RWfkuUrikRlC+WZcYb9To7MpfV1d9nlD7CZ2xydPExK+mj3DqRuQvTbvhMPcr7f+pHlgHINQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-5meSU8BHFeaT09RWfkuUrikRlC+WZcYb9To7MpfV1d9nlD7CZ2xydPExK+mj3DqRuQvTbvhMPcr7f+pHlgHINQ== + } + engines: { node: '>=14.0.0' } cpu: [riscv64] os: [linux] sass-embedded-linux-musl-x64@1.82.0: - resolution: {integrity: sha512-ASLAMfjWv7YEPBvEOVlb3zzHq8l4Y9Eh4x3m7B1dNauGVbO11Yng5cPCX/XbwGVf30BtE75pwqvV7oXxBtN15w==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-ASLAMfjWv7YEPBvEOVlb3zzHq8l4Y9Eh4x3m7B1dNauGVbO11Yng5cPCX/XbwGVf30BtE75pwqvV7oXxBtN15w== + } + engines: { node: '>=14.0.0' } cpu: [x64] os: [linux] sass-embedded-linux-riscv64@1.82.0: - resolution: {integrity: sha512-qWvRDXCXH3GzD8OcP0ntd8gBTK3kZyUeyXmxQDZyEtMAM4STC2Tn7+5+2JYYHlppzqWnZPFBNESvpKeOtHaBBw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-qWvRDXCXH3GzD8OcP0ntd8gBTK3kZyUeyXmxQDZyEtMAM4STC2Tn7+5+2JYYHlppzqWnZPFBNESvpKeOtHaBBw== + } + engines: { node: '>=14.0.0' } cpu: [riscv64] os: [linux] sass-embedded-linux-x64@1.82.0: - resolution: {integrity: sha512-AmRaHqShztwfep+M4NagdGaY7fTyWGSOM3k4Z/dd7q4nZclXbALLqNJtKx8xOM7A41LHYJ9zDpIBVRkrh0PzTA==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-AmRaHqShztwfep+M4NagdGaY7fTyWGSOM3k4Z/dd7q4nZclXbALLqNJtKx8xOM7A41LHYJ9zDpIBVRkrh0PzTA== + } + engines: { node: '>=14.0.0' } cpu: [x64] os: [linux] sass-embedded-win32-arm64@1.82.0: - resolution: {integrity: sha512-zL9JDQZHXHSGAZe5DqSrR86wMHbm9QPziU4/3hoIG+99StuS74CuV42+hw/+FXXBkXMWbjKWsyF/HZt+I/wJuw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-zL9JDQZHXHSGAZe5DqSrR86wMHbm9QPziU4/3hoIG+99StuS74CuV42+hw/+FXXBkXMWbjKWsyF/HZt+I/wJuw== + } + engines: { node: '>=14.0.0' } cpu: [arm64] os: [win32] sass-embedded-win32-ia32@1.82.0: - resolution: {integrity: sha512-xE+AzLquCkFPnnpo0NHjQdLRIhG1bVs42xIKx42aUbVLYKkBDvbBGpw6EtTscRMyvcjoOqGH5saRvSFComUQcw==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-xE+AzLquCkFPnnpo0NHjQdLRIhG1bVs42xIKx42aUbVLYKkBDvbBGpw6EtTscRMyvcjoOqGH5saRvSFComUQcw== + } + engines: { node: '>=14.0.0' } cpu: [ia32] os: [win32] sass-embedded-win32-x64@1.82.0: - resolution: {integrity: sha512-cEgfOQG5womOzzk16ReTv2dxPq5BG16LgLUold/LH9IZH86u4E/MN7Fspf4RWeEJ2EcLdew9QYSC2YWs1l98dQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-cEgfOQG5womOzzk16ReTv2dxPq5BG16LgLUold/LH9IZH86u4E/MN7Fspf4RWeEJ2EcLdew9QYSC2YWs1l98dQ== + } + engines: { node: '>=14.0.0' } cpu: [x64] os: [win32] sass-embedded@1.82.0: - resolution: {integrity: sha512-v13sRVVZtWAQLpAGTz5D8hy+oyNKRHao5tKVc/P6AMqSP+jDM8X6GkEpL0jfbu3MaN2/hAQsd4Qx14GG1u0prQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-v13sRVVZtWAQLpAGTz5D8hy+oyNKRHao5tKVc/P6AMqSP+jDM8X6GkEpL0jfbu3MaN2/hAQsd4Qx14GG1u0prQ== + } + engines: { node: '>=16.0.0' } hasBin: true sass@1.79.5: - resolution: {integrity: sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g== + } + engines: { node: '>=14.0.0' } hasBin: true sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + resolution: + { + integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + } schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + resolution: + { + integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + } + engines: { node: '>= 10.13.0' } section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + } + engines: { node: '>=4' } semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + resolution: + { + integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + } hasBin: true semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + } hasBin: true semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + } + engines: { node: '>=10' } hasBin: true semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + } + engines: { node: '>=10' } hasBin: true send@1.2.1: - resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== + } + engines: { node: '>= 18' } serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + resolution: + { + integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + } serve-static@2.2.1: - resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== + } + engines: { node: '>= 18' } set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + resolution: + { + integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + } set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + } + engines: { node: '>= 0.4' } set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + } + engines: { node: '>= 0.4' } setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + resolution: + { + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + } shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + } + engines: { node: '>=8' } shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + } + engines: { node: '>=8' } shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + } + engines: { node: '>=4' } hasBin: true shiki@1.24.1: - resolution: {integrity: sha512-/qByWMg05+POb63c/OvnrU17FcCUa34WU4F6FCrd/mjDPEDPl8YUNRkRMbo8l3iYMLydfCgxi1r37JFoSw8A4A==} + resolution: + { + integrity: sha512-/qByWMg05+POb63c/OvnrU17FcCUa34WU4F6FCrd/mjDPEDPl8YUNRkRMbo8l3iYMLydfCgxi1r37JFoSw8A4A== + } side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== + } + engines: { node: '>= 0.4' } side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + } + engines: { node: '>= 0.4' } side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + } + engines: { node: '>= 0.4' } side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + } + engines: { node: '>= 0.4' } side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + } + engines: { node: '>= 0.4' } siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + } signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + } signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + } + engines: { node: '>=14' } simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + } + engines: { node: '>=10' } sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + } sitemap@8.0.0: - resolution: {integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==} - engines: {node: '>=14.0.0', npm: '>=6.0.0'} + resolution: + { + integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A== + } + engines: { node: '>=14.0.0', npm: '>=6.0.0' } deprecated: 'SECURITY: Multiple vulnerabilities fixed in 8.0.1 (XML injection, path traversal, command injection, protocol injection). Upgrade immediately: npm install sitemap@8.0.1' hasBin: true slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + } + engines: { node: '>=8' } slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + } + engines: { node: '>=12' } slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + } + engines: { node: '>=14.16' } slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + } + engines: { node: '>=12' } slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + } + engines: { node: '>=18' } sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + resolution: + { + integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== + } sort-package-json@2.10.1: - resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + resolution: + { + integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w== + } hasBin: true source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + } + engines: { node: '>=0.10.0' } source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + resolution: + { + integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + } source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + } source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + } + engines: { node: '>=0.10.0' } source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + } + engines: { node: '>= 8' } space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + resolution: + { + integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + } spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + resolution: + { + integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + } spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + resolution: + { + integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + } spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + resolution: + { + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + } spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + resolution: + { + integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + } speakingurl@14.0.1: - resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + } + engines: { node: '>=0.10.0' } split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} + resolution: + { + integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + } + engines: { node: '>= 10.x' } sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + } stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + } + engines: { node: '>=10' } stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + } statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + } + engines: { node: '>= 0.6' } statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + } + engines: { node: '>= 0.8' } statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + } + engines: { node: '>= 0.8' } std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + resolution: + { + integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== + } std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + resolution: + { + integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + } stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== + } + engines: { node: '>=18' } stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + } + engines: { node: '>= 0.4' } streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + } + engines: { node: '>=10.0.0' } string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} + resolution: + { + integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + } + engines: { node: '>=0.6.19' } string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + } + engines: { node: '>=10' } string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + } + engines: { node: '>=8' } string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + } + engines: { node: '>=18' } string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== + } + engines: { node: '>= 0.4' } string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + } + engines: { node: '>= 0.4' } string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + resolution: + { + integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + } string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + } + engines: { node: '>= 0.4' } string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + resolution: + { + integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + } string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + } + engines: { node: '>= 0.4' } string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + resolution: + { + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + } stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + resolution: + { + integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + } strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + } + engines: { node: '>=8' } strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + } + engines: { node: '>=12' } strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + } + engines: { node: '>=0.10.0' } strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + } + engines: { node: '>=4' } strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + } + engines: { node: '>=8' } strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + } + engines: { node: '>=6' } strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + } + engines: { node: '>=12' } strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + } + engines: { node: '>=18' } strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + } + engines: { node: '>=8' } strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + } + engines: { node: '>=8' } strip-literal@2.1.0: - resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + resolution: + { + integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== + } strtok3@10.3.4: - resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg== + } + engines: { node: '>=18' } superagent@8.1.2: - resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} - engines: {node: '>=6.4.0 <13 || >=14'} + resolution: + { + integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== + } + engines: { node: '>=6.4.0 <13 || >=14' } deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net superjson@2.2.1: - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA== + } + engines: { node: '>=16' } supertest@6.3.4: - resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==} - engines: {node: '>=6.4.0'} + resolution: + { + integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw== + } + engines: { node: '>=6.4.0' } deprecated: Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + } + engines: { node: '>=4' } supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + } + engines: { node: '>=8' } supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + } + engines: { node: '>=10' } supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + } + engines: { node: '>= 0.4' } symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + } + engines: { node: '>=0.10' } sync-child-process@1.0.2: - resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA== + } + engines: { node: '>=16.0.0' } sync-message-port@1.1.3: - resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg== + } + engines: { node: '>=16.0.0' } synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== + } + engines: { node: ^14.18.0 || >=16.0.0 } tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + } + engines: { node: '>=6' } terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} + resolution: + { + integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + } + engines: { node: '>= 10.13.0' } peerDependencies: '@swc/core': '*' esbuild: '*' @@ -6689,120 +11341,207 @@ packages: optional: true terser@5.34.1: - resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA== + } + engines: { node: '>=10' } hasBin: true test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + } + engines: { node: '>=8' } text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + } + engines: { node: '>=8' } text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + resolution: + { + integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + } thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} - engines: {node: '>=10.18'} + resolution: + { + integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== + } + engines: { node: '>=10.18' } peerDependencies: tslib: ^2 through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + resolution: + { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + } tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== + } tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + resolution: + { + integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== + } tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + } + engines: { node: '>=18' } tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + } + engines: { node: '>=12.0.0' } tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ== + } + engines: { node: '>=14.0.0' } tinypool@1.0.1: - resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA== + } + engines: { node: ^18.0.0 || >=20.0.0 } tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== + } + engines: { node: '>=14.0.0' } tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q== + } + engines: { node: '>=14.0.0' } tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== + } + engines: { node: '>=14.0.0' } tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== + } + engines: { node: '>=14.0.0' } tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + resolution: + { + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + } + engines: { node: '>=0.6.0' } tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + resolution: + { + integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + } to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + } + engines: { node: '>=4' } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + } + engines: { node: '>=8.0' } toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + } + engines: { node: '>=0.6' } token-types@6.1.2: - resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww== + } + engines: { node: '>=14.16' } touch@3.1.1: - resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + resolution: + { + integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + } hasBin: true tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + } tree-dump@1.1.0: - resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} - engines: {node: '>=10.0'} + resolution: + { + integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== + } + engines: { node: '>=10.0' } peerDependencies: tslib: '2' tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + resolution: + { + integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + } hasBin: true trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + resolution: + { + integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + } ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + } + engines: { node: '>=16' } peerDependencies: typescript: '>=4.2.0' ts-jest@29.0.3: - resolution: {integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ== + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -6822,14 +11561,20 @@ packages: optional: true ts-loader@9.5.1: - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== + } + engines: { node: '>=12.0.0' } peerDependencies: typescript: '*' webpack: ^5.0.0 ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + resolution: + { + integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + } hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -6843,278 +11588,487 @@ packages: optional: true tsconfig-paths-webpack-plugin@4.0.1: - resolution: {integrity: sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw== + } + engines: { node: '>=10.13.0' } tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + resolution: + { + integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + } tsconfig-paths@4.1.1: - resolution: {integrity: sha512-VgPrtLKpRgEAJsMj5Q/I/mXouC6A/7eJ/X4Nuk6o0cRPwBtznYxTCU4FodbexbzH9somBPEXYi0ZkUViUpJ21Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-VgPrtLKpRgEAJsMj5Q/I/mXouC6A/7eJ/X4Nuk6o0cRPwBtznYxTCU4FodbexbzH9somBPEXYi0ZkUViUpJ21Q== + } + engines: { node: '>=6' } tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + } + engines: { node: '>=6' } tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + resolution: + { + integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + } tslib@2.5.3: - resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + resolution: + { + integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + } tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + resolution: + { + integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + } tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + } tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} + resolution: + { + integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== + } + engines: { node: '>=0.6.x' } tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + } + engines: { node: '>= 6' } peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsx@4.23.12: + resolution: + { + integrity: sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q== + } + engines: { node: '>=18.0.0' } + hasBin: true + turbo-darwin-64@1.13.4: - resolution: {integrity: sha512-A0eKd73R7CGnRinTiS7txkMElg+R5rKFp9HV7baDiEL4xTG1FIg/56Vm7A5RVgg8UNgG2qNnrfatJtb+dRmNdw==} + resolution: + { + integrity: sha512-A0eKd73R7CGnRinTiS7txkMElg+R5rKFp9HV7baDiEL4xTG1FIg/56Vm7A5RVgg8UNgG2qNnrfatJtb+dRmNdw== + } cpu: [x64] os: [darwin] turbo-darwin-arm64@1.13.4: - resolution: {integrity: sha512-eG769Q0NF6/Vyjsr3mKCnkG/eW6dKMBZk6dxWOdrHfrg6QgfkBUk0WUUujzdtVPiUIvsh4l46vQrNVd9EOtbyA==} + resolution: + { + integrity: sha512-eG769Q0NF6/Vyjsr3mKCnkG/eW6dKMBZk6dxWOdrHfrg6QgfkBUk0WUUujzdtVPiUIvsh4l46vQrNVd9EOtbyA== + } cpu: [arm64] os: [darwin] turbo-linux-64@1.13.4: - resolution: {integrity: sha512-Bq0JphDeNw3XEi+Xb/e4xoKhs1DHN7OoLVUbTIQz+gazYjigVZvtwCvgrZI7eW9Xo1eOXM2zw2u1DGLLUfmGkQ==} + resolution: + { + integrity: sha512-Bq0JphDeNw3XEi+Xb/e4xoKhs1DHN7OoLVUbTIQz+gazYjigVZvtwCvgrZI7eW9Xo1eOXM2zw2u1DGLLUfmGkQ== + } cpu: [x64] os: [linux] turbo-linux-arm64@1.13.4: - resolution: {integrity: sha512-BJcXw1DDiHO/okYbaNdcWN6szjXyHWx9d460v6fCHY65G8CyqGU3y2uUTPK89o8lq/b2C8NK0yZD+Vp0f9VoIg==} + resolution: + { + integrity: sha512-BJcXw1DDiHO/okYbaNdcWN6szjXyHWx9d460v6fCHY65G8CyqGU3y2uUTPK89o8lq/b2C8NK0yZD+Vp0f9VoIg== + } cpu: [arm64] os: [linux] turbo-windows-64@1.13.4: - resolution: {integrity: sha512-OFFhXHOFLN7A78vD/dlVuuSSVEB3s9ZBj18Tm1hk3aW1HTWTuAw0ReN6ZNlVObZUHvGy8d57OAGGxf2bT3etQw==} + resolution: + { + integrity: sha512-OFFhXHOFLN7A78vD/dlVuuSSVEB3s9ZBj18Tm1hk3aW1HTWTuAw0ReN6ZNlVObZUHvGy8d57OAGGxf2bT3etQw== + } cpu: [x64] os: [win32] turbo-windows-arm64@1.13.4: - resolution: {integrity: sha512-u5A+VOKHswJJmJ8o8rcilBfU5U3Y1TTAfP9wX8bFh8teYF1ghP0EhtMRLjhtp6RPa+XCxHHVA2CiC3gbh5eg5g==} + resolution: + { + integrity: sha512-u5A+VOKHswJJmJ8o8rcilBfU5U3Y1TTAfP9wX8bFh8teYF1ghP0EhtMRLjhtp6RPa+XCxHHVA2CiC3gbh5eg5g== + } cpu: [arm64] os: [win32] turbo@1.13.4: - resolution: {integrity: sha512-1q7+9UJABuBAHrcC4Sxp5lOqYS5mvxRrwa33wpIyM18hlOCpRD/fTJNxZ0vhbMcJmz15o9kkVm743mPn7p6jpQ==} + resolution: + { + integrity: sha512-1q7+9UJABuBAHrcC4Sxp5lOqYS5mvxRrwa33wpIyM18hlOCpRD/fTJNxZ0vhbMcJmz15o9kkVm743mPn7p6jpQ== + } hasBin: true type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + } + engines: { node: '>= 0.8.0' } type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + } + engines: { node: '>=4' } type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + } + engines: { node: '>=4' } type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + } + engines: { node: '>=10' } type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + } + engines: { node: '>=10' } type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + } + engines: { node: '>=8' } type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + } + engines: { node: '>=8' } type-fest@4.26.1: - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== + } + engines: { node: '>=16' } type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + } + engines: { node: '>= 0.6' } type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + } + engines: { node: '>= 0.6' } typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + } + engines: { node: '>= 0.4' } typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + } + engines: { node: '>= 0.4' } typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + } + engines: { node: '>= 0.4' } typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + } + engines: { node: '>= 0.4' } typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + resolution: + { + integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + } typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + resolution: + { + integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + } + engines: { node: '>=4.2.0' } hasBin: true typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== + } + engines: { node: '>=14.17' } hasBin: true typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== + } + engines: { node: '>=14.17' } hasBin: true uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + resolution: + { + integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + } ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + resolution: + { + integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== + } uid@2.0.2: - resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g== + } + engines: { node: '>=8' } uint8array-extras@1.5.0: - resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} - engines: {node: '>=18'} - - ultron@1.0.2: - resolution: {integrity: sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow==} + resolution: + { + integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A== + } + engines: { node: '>=18' } unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + resolution: + { + integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + } undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + resolution: + { + integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + } undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + resolution: + { + integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + } undici@6.20.1: - resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} - engines: {node: '>=18.17'} + resolution: + { + integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA== + } + engines: { node: '>=18.17' } undici@6.25.0: - resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==} - engines: {node: '>=18.17'} + resolution: + { + integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg== + } + engines: { node: '>=18.17' } unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + } + engines: { node: '>=18' } unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + } + engines: { node: '>=18' } unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + resolution: + { + integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + } unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + resolution: + { + integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + } unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + resolution: + { + integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + } unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + resolution: + { + integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + } unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + resolution: + { + integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + } universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} + resolution: + { + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + } + engines: { node: '>= 4.0.0' } universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + } + engines: { node: '>= 10.0.0' } unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + } + engines: { node: '>= 0.8' } upath@2.0.1: - resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + } + engines: { node: '>=4' } update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + resolution: + { + integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + } hasBin: true peerDependencies: browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - utf-8-validate@1.1.0: - resolution: {integrity: sha512-Qsgu1u2akdyOneurUEVf/tXhkqBQMoE3x0GY5+P7ayPHvVzTqOkkgBhtl26wm6ap10Amhwy0jIhPwMGywx76QQ==} + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + } util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + } v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + resolution: + { + integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + } v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} + resolution: + { + integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + } + engines: { node: '>=10.12.0' } validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + resolution: + { + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + } validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + } + engines: { node: '>= 0.10' } varint@6.0.0: - resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + resolution: + { + integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + } vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + } + engines: { node: '>= 0.8' } vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + resolution: + { + integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + } vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + resolution: + { + integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + } vite-node@1.6.0: - resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true vite-node@2.1.4: - resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg== + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true vite-plugin-dts@3.9.1: - resolution: {integrity: sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg== + } + engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: typescript: '*' vite: '*' @@ -7123,8 +12077,11 @@ packages: optional: true vite@5.4.9: - resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg== + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: '@types/node': ^18.0.0 || >=20.0.0 @@ -7154,8 +12111,11 @@ packages: optional: true vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} + resolution: + { + integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA== + } + engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 @@ -7194,8 +12154,11 @@ packages: optional: true vitest@1.6.0: - resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA== + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: '@edge-runtime/vm': '*' @@ -7219,8 +12182,11 @@ packages: optional: true vitest@2.1.4: - resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ== + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: '@edge-runtime/vm': '*' @@ -7244,8 +12210,11 @@ packages: optional: true vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + resolution: + { + integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ== + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } hasBin: true peerDependencies: '@edge-runtime/vm': '*' @@ -7278,21 +12247,33 @@ packages: optional: true vue-router@4.4.5: - resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} + resolution: + { + integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q== + } peerDependencies: vue: ^3.2.0 vue-template-compiler@2.7.16: - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + resolution: + { + integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== + } vue-tsc@1.8.27: - resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + resolution: + { + integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== + } hasBin: true peerDependencies: typescript: '*' vue@3.5.12: - resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} + resolution: + { + integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg== + } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -7300,7 +12281,10 @@ packages: optional: true vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + resolution: + { + integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== + } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -7308,8 +12292,11 @@ packages: optional: true vuepress-plugin-components@2.0.0-rc.62: - resolution: {integrity: sha512-01ZI/xJb20VveFQuTR6mABhWk8onO+LPJvkbtq3sZi2eQkg9E16STf0g40BhX7ak2og9xXmPthGNIZ+raQqhxQ==} - engines: {node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2'} + resolution: + { + integrity: sha512-01ZI/xJb20VveFQuTR6mABhWk8onO+LPJvkbtq3sZi2eQkg9E16STf0g40BhX7ak2og9xXmPthGNIZ+raQqhxQ== + } + engines: { node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2' } peerDependencies: artplayer: ^5.0.0 dashjs: 4.7.4 @@ -7339,8 +12326,11 @@ packages: optional: true vuepress-plugin-md-enhance@2.0.0-rc.62: - resolution: {integrity: sha512-g0ndft7wPkn2NTs5e7WU1+Ed8BoVhHycivmiAa0tPsfHfcUX984T07qpR0Wq8jmULHSfubH2ywCY7Jd85Q66IA==} - engines: {node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2'} + resolution: + { + integrity: sha512-g0ndft7wPkn2NTs5e7WU1+Ed8BoVhHycivmiAa0tPsfHfcUX984T07qpR0Wq8jmULHSfubH2ywCY7Jd85Q66IA== + } + engines: { node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2' } peerDependencies: '@vue/repl': ^4.1.1 chart.js: ^4.0.0 @@ -7385,14 +12375,20 @@ packages: optional: true vuepress-shared@2.0.0-rc.62: - resolution: {integrity: sha512-moG6312I/6YVwyflMsPKJJe6oW3EVjEQe+wNi7NybaRpMV+SAw/5oJS+M95yCDsIt6ppi7stGJJ/CpGWZ1xnbQ==} - engines: {node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2'} + resolution: + { + integrity: sha512-moG6312I/6YVwyflMsPKJJe6oW3EVjEQe+wNi7NybaRpMV+SAw/5oJS+M95yCDsIt6ppi7stGJJ/CpGWZ1xnbQ== + } + engines: { node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2' } peerDependencies: vuepress: 2.0.0-rc.18 vuepress-theme-hope@2.0.0-rc.62: - resolution: {integrity: sha512-D15kVuK/cFvajboWnnhLCcwGg8ioYw3E96vX/Sl2o+ARgdGhz6mEQF17AIRZ+Q45yMH7WL2appw9f5Zfm4i6Fw==} - engines: {node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2'} + resolution: + { + integrity: sha512-D15kVuK/cFvajboWnnhLCcwGg8ioYw3E96vX/Sl2o+ARgdGhz6mEQF17AIRZ+Q45yMH7WL2appw9f5Zfm4i6Fw== + } + engines: { node: '>=18.19.0', npm: '>=8', pnpm: '>=7', yarn: '>=2' } peerDependencies: '@vuepress/plugin-docsearch': 2.0.0-rc.65 '@vuepress/plugin-feed': 2.0.0-rc.65 @@ -7431,8 +12427,11 @@ packages: optional: true vuepress@2.0.0-rc.18: - resolution: {integrity: sha512-TFpePHTIMiUbiJcHTgD4Wc5eBlsxBnhv36F/eM2vbDoeutcS1dGrNtZoKUxrZDXTeZH+q8vrZ3CiBCsHw3K7eA==} - engines: {node: ^18.19.0 || >=20.4.0} + resolution: + { + integrity: sha512-TFpePHTIMiUbiJcHTgD4Wc5eBlsxBnhv36F/eM2vbDoeutcS1dGrNtZoKUxrZDXTeZH+q8vrZ3CiBCsHw3K7eA== + } + engines: { node: ^18.19.0 || >=20.4.0 } hasBin: true peerDependencies: '@vuepress/bundler-vite': 2.0.0-rc.18 @@ -7445,33 +12444,57 @@ packages: optional: true walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + resolution: + { + integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + } watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== + } + engines: { node: '>=10.13.0' } watermark-js-plus@1.5.7: - resolution: {integrity: sha512-KaQEUnvBX5em2hBeuKcpAASpV+sO1j8NbXY7FL7jb0w1TCKmMSyn8nkj2e+KeleuQ1iwyXHEMFdSWXDIQsACYQ==} - engines: {node: '>=20.0.0'} + resolution: + { + integrity: sha512-KaQEUnvBX5em2hBeuKcpAASpV+sO1j8NbXY7FL7jb0w1TCKmMSyn8nkj2e+KeleuQ1iwyXHEMFdSWXDIQsACYQ== + } + engines: { node: '>=20.0.0' } wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + resolution: + { + integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + } webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + } webpack-node-externals@3.0.0: - resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== + } + engines: { node: '>=6' } webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + } + engines: { node: '>=10.13.0' } webpack@5.82.1: - resolution: {integrity: sha512-C6uiGQJ+Gt4RyHXXYt+v9f+SN1v83x68URwgxNQ98cvH8kxiuywWGP4XeNZ1paOzZ63aY3cTciCEQJNFUljlLw==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-C6uiGQJ+Gt4RyHXXYt+v9f+SN1v83x68URwgxNQ98cvH8kxiuywWGP4XeNZ1paOzZ63aY3cTciCEQJNFUljlLw== + } + engines: { node: '>=10.13.0' } hasBin: true peerDependencies: webpack-cli: '*' @@ -7480,86 +12503,143 @@ packages: optional: true whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + } + engines: { node: '>=18' } deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + } + engines: { node: '>=18' } whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + } which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + resolution: + { + integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + } which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + } + engines: { node: '>= 0.4' } which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + resolution: + { + integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + } which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + resolution: + { + integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + } which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + } + engines: { node: '>= 0.4' } which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + } + engines: { node: '>= 0.4' } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + } + engines: { node: '>= 8' } hasBin: true why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + } + engines: { node: '>=8' } hasBin: true why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== + } + engines: { node: '>=8' } hasBin: true windows-release@4.0.0: - resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg== + } + engines: { node: '>=10' } word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + } + engines: { node: '>=0.10.0' } wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + } + engines: { node: '>=8' } wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + } + engines: { node: '>=10' } wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + } + engines: { node: '>=18' } wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + } write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@0.7.2: - resolution: {integrity: sha512-8mJ1Ku743qD/PKmO9Dg+y7BXTwzUgKdXguecfIyOVHFmez4JMqMF+V+M684btmQXHlwzyrJqRl3NYDltGDf6CQ==} + resolution: + { + integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA== + } + engines: { node: '>=10.0.0' } peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -7570,76 +12650,129 @@ packages: optional: true y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + resolution: + { + integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + } y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + } + engines: { node: '>=10' } yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + } yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + resolution: + { + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + } yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + } + engines: { node: '>= 6' } yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== + } + engines: { node: '>= 14' } hasBin: true yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + } + engines: { node: '>=6' } yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + } + engines: { node: '>=12' } yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + } + engines: { node: '>=8' } yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + } + engines: { node: '>=12' } ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} + resolution: + { + integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== + } + engines: { node: '>= 4.0.0' } yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + } + engines: { node: '>=6' } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + } + engines: { node: '>=10' } yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} + resolution: + { + integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + } + engines: { node: '>=12.20' } yoctocolors@2.0.2: - resolution: {integrity: sha512-Ct97huExsu7cWeEjmrXlofevF8CvzUglJ4iGUet5B8xn1oumtAZBpHU4GzYuoE6PVqcZ5hghtBrSlhwHuR1Jmw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Ct97huExsu7cWeEjmrXlofevF8CvzUglJ4iGUet5B8xn1oumtAZBpHU4GzYuoE6PVqcZ5hghtBrSlhwHuR1Jmw== + } + engines: { node: '>=18' } z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q== + } + engines: { node: '>=8.0.0' } hasBin: true zod@3.23.0: - resolution: {integrity: sha512-OFLT+LTocvabn6q76BTwVB0hExEBS0IduTr3cqZyMqEDbOnYmcU+y0tUAYbND4uwclpBGi4I4UUBGzylWpjLGA==} + resolution: + { + integrity: sha512-OFLT+LTocvabn6q76BTwVB0hExEBS0IduTr3cqZyMqEDbOnYmcU+y0tUAYbND4uwclpBGi4I4UUBGzylWpjLGA== + } zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + resolution: + { + integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== + } snapshots: - '@ampproject/remapping@2.2.1': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -8027,147 +13160,225 @@ snapshots: '@esbuild/aix-ppc64@0.27.2': optional: true + '@esbuild/aix-ppc64@0.28.2': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true '@esbuild/android-arm64@0.27.2': optional: true + '@esbuild/android-arm64@0.28.2': + optional: true + '@esbuild/android-arm@0.21.5': optional: true '@esbuild/android-arm@0.27.2': optional: true + '@esbuild/android-arm@0.28.2': + optional: true + '@esbuild/android-x64@0.21.5': optional: true '@esbuild/android-x64@0.27.2': optional: true + '@esbuild/android-x64@0.28.2': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true '@esbuild/darwin-arm64@0.27.2': optional: true + '@esbuild/darwin-arm64@0.28.2': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true '@esbuild/darwin-x64@0.27.2': optional: true + '@esbuild/darwin-x64@0.28.2': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true '@esbuild/freebsd-arm64@0.27.2': optional: true + '@esbuild/freebsd-arm64@0.28.2': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true '@esbuild/freebsd-x64@0.27.2': optional: true + '@esbuild/freebsd-x64@0.28.2': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true '@esbuild/linux-arm64@0.27.2': optional: true + '@esbuild/linux-arm64@0.28.2': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true '@esbuild/linux-arm@0.27.2': optional: true + '@esbuild/linux-arm@0.28.2': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true '@esbuild/linux-ia32@0.27.2': optional: true + '@esbuild/linux-ia32@0.28.2': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true '@esbuild/linux-loong64@0.27.2': optional: true + '@esbuild/linux-loong64@0.28.2': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true '@esbuild/linux-mips64el@0.27.2': optional: true + '@esbuild/linux-mips64el@0.28.2': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true '@esbuild/linux-ppc64@0.27.2': optional: true + '@esbuild/linux-ppc64@0.28.2': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true '@esbuild/linux-riscv64@0.27.2': optional: true + '@esbuild/linux-riscv64@0.28.2': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true '@esbuild/linux-s390x@0.27.2': optional: true + '@esbuild/linux-s390x@0.28.2': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true '@esbuild/linux-x64@0.27.2': optional: true + '@esbuild/linux-x64@0.28.2': + optional: true + '@esbuild/netbsd-arm64@0.27.2': optional: true + '@esbuild/netbsd-arm64@0.28.2': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true '@esbuild/netbsd-x64@0.27.2': optional: true + '@esbuild/netbsd-x64@0.28.2': + optional: true + '@esbuild/openbsd-arm64@0.27.2': optional: true + '@esbuild/openbsd-arm64@0.28.2': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true '@esbuild/openbsd-x64@0.27.2': optional: true + '@esbuild/openbsd-x64@0.28.2': + optional: true + '@esbuild/openharmony-arm64@0.27.2': optional: true + '@esbuild/openharmony-arm64@0.28.2': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true '@esbuild/sunos-x64@0.27.2': optional: true + '@esbuild/sunos-x64@0.28.2': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true '@esbuild/win32-arm64@0.27.2': optional: true + '@esbuild/win32-arm64@0.28.2': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true '@esbuild/win32-ia32@0.27.2': optional: true + '@esbuild/win32-ia32@0.28.2': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true '@esbuild/win32-x64@0.27.2': optional: true + '@esbuild/win32-x64@0.28.2': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -8958,6 +14169,10 @@ snapshots: '@pkgr/core@0.1.1': {} + '@playwright/test@1.62.1': + dependencies: + playwright: 1.62.1 + '@rollup/pluginutils@5.1.2(rollup@4.57.0)': dependencies: '@types/estree': 1.0.6 @@ -9773,7 +14988,7 @@ snapshots: vite: 5.4.9(@types/node@22.7.5)(sass-embedded@1.82.0)(terser@5.34.1) vue: 3.5.12(typescript@5.6.3) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -9785,7 +15000,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1) + vitest: 4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1) '@vitest/expect@1.6.0': dependencies: @@ -9817,13 +15032,13 @@ snapshots: optionalDependencies: vite: 5.4.9(@types/node@20.16.11)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1) + vite: 7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1) '@vitest/pretty-format@2.1.4': dependencies: @@ -10068,7 +15283,7 @@ snapshots: '@vue/shared@3.5.13': {} - '@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1)': + '@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1)': dependencies: '@vitejs/plugin-vue': 5.1.4(vite@5.4.9(@types/node@22.7.5)(sass-embedded@1.82.0)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3)) '@vuepress/bundlerutils': 2.0.0-rc.18(typescript@5.6.3) @@ -10079,7 +15294,7 @@ snapshots: autoprefixer: 10.4.20(postcss@8.4.47) connect-history-api-fallback: 2.0.0 postcss: 8.4.47 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1) + postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.23.12)(yaml@2.5.1) rollup: 4.24.0 vite: 5.4.9(@types/node@22.7.5)(sass-embedded@1.82.0)(terser@5.34.1) vue: 3.5.12(typescript@5.6.3) @@ -10144,7 +15359,7 @@ snapshots: - supports-color - typescript - '@vuepress/helper@2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/helper@2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@vue/shared': 3.5.13 '@vueuse/core': 12.0.0(typescript@5.6.3) @@ -10152,11 +15367,11 @@ snapshots: fflate: 0.8.2 gray-matter: 4.0.3 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/helper@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/helper@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@vue/shared': 3.5.13 '@vueuse/core': 12.0.0(typescript@5.6.3) @@ -10164,13 +15379,13 @@ snapshots: fflate: 0.8.2 gray-matter: 4.0.3 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/highlighter-helper@2.0.0-rc.62(@vueuse/core@12.0.0(typescript@5.6.3))(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/highlighter-helper@2.0.0-rc.62(@vueuse/core@12.0.0(typescript@5.6.3))(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) optionalDependencies: '@vueuse/core': 12.0.0(typescript@5.6.3) @@ -10195,140 +15410,140 @@ snapshots: transitivePeerDependencies: - supports-color - '@vuepress/plugin-active-header-links@2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-active-header-links@2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-back-to-top@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-back-to-top@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-blog@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-blog@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) chokidar: 3.6.0 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-catalog@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-catalog@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-comment@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-comment@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) giscus: 1.5.0 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-copy-code@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-copy-code@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-copyright@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-copyright@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-git@2.0.0-rc.62(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-git@2.0.0-rc.62(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: execa: 9.5.2 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) - '@vuepress/plugin-links-check@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-links-check@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-markdown-ext@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-ext@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-container': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-footnote': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-tasklist': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) js-yaml: 4.1.0 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-hint@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-hint@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-alert': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-container': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-image@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-image@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-figure': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-img-lazyload': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-img-mark': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-img-size': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-include@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-include@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-include': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-math@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-math@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-katex-slim': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-mathjax-slim': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-stylize@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-stylize@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-align': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-attrs': 0.14.0(markdown-it@14.1.0) @@ -10338,172 +15553,172 @@ snapshots: '@mdit/plugin-sub': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-sup': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-tab@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-markdown-tab@2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@mdit/plugin-tab': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-medium-zoom@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-medium-zoom@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) medium-zoom: 1.1.0 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-notice@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-notice@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-nprogress@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-nprogress@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-palette@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-palette@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) chokidar: 4.0.1 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-photo-swipe@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-photo-swipe@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) photoswipe: 5.4.4 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-prismjs@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-prismjs@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/highlighter-helper': 2.0.0-rc.62(@vueuse/core@12.0.0(typescript@5.6.3))(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/highlighter-helper': 2.0.0-rc.62(@vueuse/core@12.0.0(typescript@5.6.3))(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) prismjs: 1.29.0 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vueuse/core' - typescript - '@vuepress/plugin-reading-time@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-reading-time@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-redirect@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-redirect@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) cac: 6.7.14 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-rtl@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-rtl@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-sass-palette@2.0.0-rc.63(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-sass-palette@2.0.0-rc.63(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) chokidar: 4.0.1 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) optionalDependencies: sass-embedded: 1.82.0 transitivePeerDependencies: - typescript - '@vuepress/plugin-sass-palette@2.0.0-rc.65(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-sass-palette@2.0.0-rc.65(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) chokidar: 4.0.1 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) optionalDependencies: sass-embedded: 1.82.0 transitivePeerDependencies: - typescript - '@vuepress/plugin-seo@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-seo@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-shiki@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-shiki@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@shikijs/transformers': 1.24.1 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/highlighter-helper': 2.0.0-rc.62(@vueuse/core@12.0.0(typescript@5.6.3))(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/highlighter-helper': 2.0.0-rc.62(@vueuse/core@12.0.0(typescript@5.6.3))(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) nanoid: 5.0.9 shiki: 1.24.1 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vueuse/core' - typescript - '@vuepress/plugin-sitemap@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-sitemap@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) sitemap: 8.0.0 - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-theme-data@2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-theme-data@2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@vue/devtools-api': 7.6.7 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-theme-data@2.0.0-rc.64(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-theme-data@2.0.0-rc.64(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: '@vue/devtools-api': 7.6.7 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-watermark@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + '@vuepress/plugin-watermark@2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) watermark-js-plus: 1.5.7 transitivePeerDependencies: - typescript @@ -10512,26 +15727,26 @@ snapshots: dependencies: '@mdit-vue/types': 2.1.0 - '@vuepress/theme-default@2.0.0-rc.65(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': - dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-active-header-links': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-back-to-top': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-copy-code': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-git': 2.0.0-rc.62(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-links-check': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-hint': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-tab': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-medium-zoom': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-nprogress': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-palette': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-prismjs': 2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-seo': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-sitemap': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-theme-data': 2.0.0-rc.64(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/theme-default@2.0.0-rc.65(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))': + dependencies: + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-active-header-links': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-back-to-top': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-copy-code': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-git': 2.0.0-rc.62(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-links-check': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-hint': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-tab': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-medium-zoom': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-nprogress': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-palette': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-prismjs': 2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-seo': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-sitemap': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-theme-data': 2.0.0-rc.64(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) optionalDependencies: sass-embedded: 1.82.0 transitivePeerDependencies: @@ -10940,9 +16155,6 @@ snapshots: binary-extensions@2.3.0: {} - bindings@1.2.1: - optional: true - birpc@0.2.19: {} bl@4.1.0: @@ -11004,12 +16216,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bufferutil@1.1.0: - dependencies: - bindings: 1.2.1 - nan: 1.8.4 - optional: true - bufferutil@4.0.9: dependencies: node-gyp-build: 4.8.4 @@ -11623,10 +16829,6 @@ snapshots: dependencies: once: 1.4.0 - endpoint@0.4.5: - dependencies: - inherits: 2.0.4 - enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -11820,6 +17022,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -12415,6 +17646,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -12803,11 +18037,6 @@ snapshots: through: 2.3.8 wrap-ansi: 7.0.0 - inspector@0.5.0: - dependencies: - endpoint: 0.4.5 - ws: 0.7.2 - internal-slot@1.0.7: dependencies: es-errors: 1.3.0 @@ -13891,9 +19120,6 @@ snapshots: mute-stream@0.0.8: {} - nan@1.8.4: - optional: true - nanoid@3.3.11: {} nanoid@3.3.7: {} @@ -14070,8 +19296,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - options@0.0.6: {} - ora@5.4.1: dependencies: bl: 4.1.0 @@ -14228,18 +19452,27 @@ snapshots: mlly: 1.7.2 pathe: 1.1.2 + playwright-core@1.62.1: {} + + playwright@1.62.1: + dependencies: + playwright-core: 1.62.1 + optionalDependencies: + fsevents: 2.3.2 + pluralize@8.0.0: {} pngjs@5.0.0: {} possible-typed-array-names@1.0.0: {} - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.23.12)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.6 postcss: 8.4.47 + tsx: 4.23.12 yaml: 2.5.1 postcss-value-parser@4.2.0: {} @@ -15286,6 +20519,12 @@ snapshots: tslib: 1.14.1 typescript: 5.6.3 + tsx@4.23.12: + dependencies: + esbuild: 0.28.2 + optionalDependencies: + fsevents: 2.3.3 + turbo-darwin-64@1.13.4: optional: true @@ -15392,8 +20631,6 @@ snapshots: uint8array-extras@1.5.0: {} - ultron@1.0.2: {} - unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -15454,12 +20691,6 @@ snapshots: dependencies: punycode: 2.3.1 - utf-8-validate@1.1.0: - dependencies: - bindings: 1.2.1 - nan: 1.8.4 - optional: true - util-deprecate@1.0.2: {} v8-compile-cache-lib@3.0.1: {} @@ -15566,7 +20797,7 @@ snapshots: sass-embedded: 1.82.0 terser: 5.34.1 - vite@7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1): + vite@7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -15581,6 +20812,7 @@ snapshots: sass: 1.79.5 sass-embedded: 1.82.0 terser: 5.34.1 + tsx: 4.23.12 yaml: 2.5.1 vitest@1.6.0(@types/node@20.16.11)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1): @@ -15652,10 +20884,10 @@ snapshots: - supports-color - terser - vitest@4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1): + vitest@4.0.18(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -15672,7 +20904,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(yaml@2.5.1) + vite: 7.3.1(@types/node@20.16.11)(jiti@1.21.6)(sass-embedded@1.82.0)(sass@1.79.5)(terser@5.34.1)(tsx@4.23.12)(yaml@2.5.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.16.11 @@ -15726,96 +20958,96 @@ snapshots: optionalDependencies: typescript: 5.6.3 - vuepress-plugin-components@2.0.0-rc.62(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): + vuepress-plugin-components@2.0.0-rc.62(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): dependencies: '@stackblitz/sdk': 1.11.0 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-sass-palette': 2.0.0-rc.63(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-sass-palette': 2.0.0-rc.63(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) balloon-css: 1.2.0 create-codepen: 2.0.0 qrcode: 1.5.4 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) - vuepress-shared: 2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress-shared: 2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) optionalDependencies: sass-embedded: 1.82.0 transitivePeerDependencies: - typescript - vuepress-plugin-md-enhance@2.0.0-rc.62(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): + vuepress-plugin-md-enhance@2.0.0-rc.62(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): dependencies: '@mdit/plugin-container': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-demo': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-plantuml': 0.14.0(markdown-it@14.1.0) '@mdit/plugin-uml': 0.14.0(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-sass-palette': 2.0.0-rc.65(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-sass-palette': 2.0.0-rc.65(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) balloon-css: 1.2.0 js-yaml: 4.1.0 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) - vuepress-shared: 2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress-shared: 2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) optionalDependencies: sass-embedded: 1.82.0 transitivePeerDependencies: - markdown-it - typescript - vuepress-shared@2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): + vuepress-shared@2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) dayjs: 1.11.13 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - typescript - vuepress-theme-hope@2.0.0-rc.62(@vuepress/plugin-prismjs@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))))(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): - dependencies: - '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-active-header-links': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-back-to-top': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-blog': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-catalog': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-comment': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-copy-code': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-copyright': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-git': 2.0.0-rc.62(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-links-check': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-ext': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-hint': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-image': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-include': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-math': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-stylize': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-markdown-tab': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-notice': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-nprogress': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-photo-swipe': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-reading-time': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-redirect': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-rtl': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-sass-palette': 2.0.0-rc.65(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-seo': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-shiki': 2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-sitemap': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-theme-data': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - '@vuepress/plugin-watermark': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress-theme-hope@2.0.0-rc.62(@vuepress/plugin-prismjs@2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))))(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))): + dependencies: + '@vuepress/helper': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-active-header-links': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-back-to-top': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-blog': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-catalog': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-comment': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-copy-code': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-copyright': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-git': 2.0.0-rc.62(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-links-check': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-ext': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-hint': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-image': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-include': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-math': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-stylize': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-markdown-tab': 2.0.0-rc.65(markdown-it@14.1.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-notice': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-nprogress': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-photo-swipe': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-reading-time': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-redirect': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-rtl': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-sass-palette': 2.0.0-rc.65(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-seo': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-shiki': 2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-sitemap': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-theme-data': 2.0.0-rc.63(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-watermark': 2.0.0-rc.65(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) '@vueuse/core': 12.0.0(typescript@5.6.3) balloon-css: 1.2.0 bcrypt-ts: 5.0.3 chokidar: 3.6.0 vue: 3.5.13(typescript@5.6.3) - vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) - vuepress-plugin-components: 2.0.0-rc.62(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress-plugin-md-enhance: 2.0.0-rc.62(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) - vuepress-shared: 2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + vuepress-plugin-components: 2.0.0-rc.62(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress-plugin-md-enhance: 2.0.0-rc.62(markdown-it@14.1.0)(sass-embedded@1.82.0)(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + vuepress-shared: 2.0.0-rc.62(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) optionalDependencies: - '@vuepress/plugin-prismjs': 2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) + '@vuepress/plugin-prismjs': 2.0.0-rc.65(@vueuse/core@12.0.0(typescript@5.6.3))(typescript@5.6.3)(vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))) sass-embedded: 1.82.0 transitivePeerDependencies: - '@vue/repl' @@ -15841,7 +21073,7 @@ snapshots: - typescript - vidstack - vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)): + vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)): dependencies: '@vuepress/cli': 2.0.0-rc.18(typescript@5.6.3) '@vuepress/client': 2.0.0-rc.18(typescript@5.6.3) @@ -15851,7 +21083,7 @@ snapshots: '@vuepress/utils': 2.0.0-rc.18 vue: 3.5.12(typescript@5.6.3) optionalDependencies: - '@vuepress/bundler-vite': 2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(typescript@5.6.3)(yaml@2.5.1) + '@vuepress/bundler-vite': 2.0.0-rc.18(@types/node@22.7.5)(jiti@1.21.6)(sass-embedded@1.82.0)(terser@5.34.1)(tsx@4.23.12)(typescript@5.6.3)(yaml@2.5.1) transitivePeerDependencies: - supports-color - typescript @@ -16012,14 +21244,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@0.7.2: - dependencies: - options: 0.0.6 - ultron: 1.0.2 - optionalDependencies: - bufferutil: 1.1.0 - utf-8-validate: 1.1.0 - ws@8.20.0(bufferutil@4.0.9): optionalDependencies: bufferutil: 4.0.9 From c4006b9a668810ce59a9de3e3987f3aedd9c2cad Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 14:00:20 +0800 Subject: [PATCH 2/7] fix: stabilize cross-platform quality gates --- .../adapters/node-native/inspector-target.ts | 31 +++++++++---- packages/network-debugger/src/cli/dev.test.ts | 17 +++++++- .../network-debugger/src/cli/main.test.ts | 3 +- .../test/e2e/harness/native-harness.mjs | 43 ++++++++++++++++++- .../test/e2e/native-protocol.test.mjs | 4 ++ .../test/e2e/os-smoke/adapter-smoke.test.mjs | 21 ++++++--- 6 files changed, 100 insertions(+), 19 deletions(-) diff --git a/packages/network-debugger/src/adapters/node-native/inspector-target.ts b/packages/network-debugger/src/adapters/node-native/inspector-target.ts index 4be3e32..814b635 100644 --- a/packages/network-debugger/src/adapters/node-native/inspector-target.ts +++ b/packages/network-debugger/src/adapters/node-native/inspector-target.ts @@ -32,22 +32,37 @@ const DEFAULT_DISCOVERY_OPTIONS: Required = { function requestJson(url: string, timeoutMs: number): Promise { return new Promise((resolve, reject) => { const parsed = new URL(url) - const request = http.get(parsed, (response) => { + // Discovery targets an Inspector server that this process may own. A + // pooled keep-alive socket can outlive the response and make the + // synchronous inspector.close() wait on its own client connection, + // particularly on Windows. Give each probe an isolated, non-reusing + // agent so the response fully releases the target before disposal. + const request = http.get(parsed, { agent: false }, (response) => { const chunks: Buffer[] = [] + const socket = response.socket response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) response.on('end', () => { const statusCode = response.statusCode ?? 0 + let result: unknown + let failure: unknown if (statusCode < 200 || statusCode >= 300) { - reject(new Error(`Inspector discovery returned HTTP ${statusCode}`)) - return + failure = new Error(`Inspector discovery returned HTTP ${statusCode}`) + } else { + try { + result = JSON.parse(Buffer.concat(chunks).toString('utf8')) + } catch (error) { + failure = error + } } - try { - resolve(JSON.parse(Buffer.concat(chunks).toString('utf8'))) - } catch (error) { - reject(error) - } + const settle = () => (failure ? reject(failure) : resolve(result)) + // `end` means the payload is complete, not that the underlying socket + // has left the Inspector server. Wait for actual close before allowing + // an owning adapter to call the synchronous inspector.close(). + if (socket.destroyed) settle() + else socket.once('close', settle) }) }) diff --git a/packages/network-debugger/src/cli/dev.test.ts b/packages/network-debugger/src/cli/dev.test.ts index 6169c74..6925953 100644 --- a/packages/network-debugger/src/cli/dev.test.ts +++ b/packages/network-debugger/src/cli/dev.test.ts @@ -60,6 +60,17 @@ function command(overrides: Partial = {}): DevCommand { } } +const nativeRuntime = { + nodeVersion: '24.7.0', + inspectorAvailable: true, + inspectorNetwork: { + requestWillBeSent: vi.fn(), + responseReceived: vi.fn(), + loadingFinished: vi.fn(), + loadingFailed: vi.fn() + } +} as const + describe('dev command construction', () => { it('injects native flags and the absolute preload URL without changing NODE_OPTIONS', () => { const built = buildDevCommand({ @@ -69,7 +80,8 @@ describe('dev command construction', () => { cwd: '/project', env: { NODE_OPTIONS: '--trace-warnings' }, execPath: '/usr/bin/node', - preloadUrl: 'file:///package/dist/register.mjs' + preloadUrl: 'file:///package/dist/register.mjs', + ...nativeRuntime }) expect(built).toMatchObject({ @@ -98,7 +110,8 @@ describe('dev command construction', () => { buildDevCommand({ entry: 'app.js', config: config({ wait: false }), - preloadUrl: 'file:///register.mjs' + preloadUrl: 'file:///register.mjs', + ...nativeRuntime }).args ).toEqual([ '--experimental-network-inspection', diff --git a/packages/network-debugger/src/cli/main.test.ts b/packages/network-debugger/src/cli/main.test.ts index 491115a..d3d1e0e 100644 --- a/packages/network-debugger/src/cli/main.test.ts +++ b/packages/network-debugger/src/cli/main.test.ts @@ -119,11 +119,12 @@ describe('runCli', () => { }) const stderr = output() const exitCode = await runCli( - ['dev', '--no-wait', '--runner', 'tsx', 'app.ts', '--', '--port', '3'], + ['dev', '--mode', 'native', '--no-wait', '--runner', 'tsx', 'app.ts', '--', '--port', '3'], { cwd: '/project', env: {}, execPath: '/node', + nodeVersion: '24.7.0', preloadUrl: 'file:///dist/register.mjs', spawn, signals: new EventEmitter(), diff --git a/packages/network-debugger/test/e2e/harness/native-harness.mjs b/packages/network-debugger/test/e2e/harness/native-harness.mjs index 3b89455..c76db80 100644 --- a/packages/network-debugger/test/e2e/harness/native-harness.mjs +++ b/packages/network-debugger/test/e2e/harness/native-harness.mjs @@ -1,5 +1,5 @@ import { spawn } from 'node:child_process' -import { access, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' +import { access, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { dirname, join, resolve } from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' @@ -214,6 +214,47 @@ export class NativeE2EHarness { return message.result } + async waitForRecordedRequest(url, { requireBody = true, timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { + if (!this.sessionDirectory) throw new Error('Native Session recording is not enabled') + + const manifestPath = resolve(this.sessionDirectory, 'manifest.json') + const deadline = Date.now() + timeoutMs + let lastManifest + let lastReadError + + while (Date.now() < deadline) { + try { + lastManifest = JSON.parse(await readFile(manifestPath, 'utf8')) + lastReadError = undefined + const request = Object.values(lastManifest.requestIndex ?? {}).find( + (entry) => entry?.request?.url === url + ) + const body = request?.requestId ? lastManifest.bodyIndex?.[request.requestId] : undefined + + if ( + request?.response && + Number.isFinite(request.finishedTimestamp) && + (!requireBody || body) + ) { + return { manifest: lastManifest, request, body } + } + } catch (error) { + lastReadError = error + } + + await new Promise((resolvePromise) => setTimeout(resolvePromise, 25)) + } + + const observed = lastManifest + ? JSON.stringify({ stats: lastManifest.stats, issues: lastManifest.issues }) + : lastReadError instanceof Error + ? lastReadError.message + : 'no readable manifest' + throw new Error( + `Timed out after ${timeoutMs}ms waiting for Session to record ${url}. Observed: ${observed}` + ) + } + waitForTargetMessage(predicate, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) { if (this.child.exitCode !== null || this.child.signalCode !== null) { return Promise.reject( diff --git a/packages/network-debugger/test/e2e/native-protocol.test.mjs b/packages/network-debugger/test/e2e/native-protocol.test.mjs index ebcf468..0dae291 100644 --- a/packages/network-debugger/test/e2e/native-protocol.test.mjs +++ b/packages/network-debugger/test/e2e/native-protocol.test.mjs @@ -228,6 +228,10 @@ test( const scenario = await harness.runScenario('http', { url, token }) assert.deepEqual(scenario, { status: 200, body: `http-response:${token}` }) + // The scenario result arrives over IPC, while Session events arrive over + // a separate Inspector WebSocket. Wait for the real terminal event and + // body capture instead of racing finalization against that second channel. + await harness.waitForRecordedRequest(url) await harness.finalizeSession() const manifest = JSON.parse( await readFile(resolve(harness.sessionDirectory, 'manifest.json'), 'utf8') diff --git a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs index 3ed36cb..fe73eb3 100644 --- a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs +++ b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs @@ -15,19 +15,26 @@ function requestJson(url, timeoutMs = 3_000) { return new Promise((resolve, reject) => { const request = http.get(url, { agent: false }, (response) => { const chunks = [] + const socket = response.socket response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) response.once('error', reject) response.once('end', () => { const text = Buffer.concat(chunks).toString('utf8') + let result + let failure if (response.statusCode !== 200) { - reject(new Error(`${url} returned HTTP ${response.statusCode}: ${text}`)) - return - } - try { - resolve(JSON.parse(text)) - } catch (error) { - reject(new Error(`${url} returned invalid JSON: ${text}`, { cause: error })) + failure = new Error(`${url} returned HTTP ${response.statusCode}: ${text}`) + } else { + try { + result = JSON.parse(text) + } catch (error) { + failure = new Error(`${url} returned invalid JSON: ${text}`, { cause: error }) + } } + + const settle = () => (failure ? reject(failure) : resolve(result)) + if (socket.destroyed) settle() + else socket.once('close', settle) }) }) request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) From 3a0a67a1d6809fb9342ba98251cb7ce871b72dc1 Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 14:05:37 +0800 Subject: [PATCH 3/7] fix: make clean CI fixtures and inspector teardown deterministic --- .../adapters/node-native/inspector-target.ts | 8 +++++-- .../cli/fixtures/nest-app/dist/app.module.cjs | 9 ++++++++ .../e2e/cli/fixtures/nest-app/dist/main.cjs | 20 ++++++++++++++++ .../fixtures/nest-app/dist/nest-factory.cjs | 23 +++++++++++++++++++ .../test/e2e/os-smoke/adapter-smoke.test.mjs | 8 +++++-- 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/app.module.cjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/main.cjs create mode 100644 packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/nest-factory.cjs diff --git a/packages/network-debugger/src/adapters/node-native/inspector-target.ts b/packages/network-debugger/src/adapters/node-native/inspector-target.ts index 814b635..cea700d 100644 --- a/packages/network-debugger/src/adapters/node-native/inspector-target.ts +++ b/packages/network-debugger/src/adapters/node-native/inspector-target.ts @@ -61,8 +61,12 @@ function requestJson(url: string, timeoutMs: number): Promise { // `end` means the payload is complete, not that the underlying socket // has left the Inspector server. Wait for actual close before allowing // an owning adapter to call the synchronous inspector.close(). - if (socket.destroyed) settle() - else socket.once('close', settle) + if (socket.destroyed) { + settle() + } else { + socket.once('close', settle) + socket.destroy() + } }) }) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/app.module.cjs b/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/app.module.cjs new file mode 100644 index 0000000..39494d7 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/app.module.cjs @@ -0,0 +1,9 @@ +'use strict' + +// This is deliberately shaped like emitted TypeScript from a Nest application: +// the CLI must preload instrumentation into compiled output without source edits. +Object.defineProperty(exports, '__esModule', { value: true }) +exports.AppModule = void 0 + +class AppModule {} +exports.AppModule = AppModule diff --git a/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/main.cjs b/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/main.cjs new file mode 100644 index 0000000..1a13131 --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/main.cjs @@ -0,0 +1,20 @@ +'use strict' + +Object.defineProperty(exports, '__esModule', { value: true }) + +const { AppModule } = require('./app.module.cjs') +const { NestFactory } = require('./nest-factory.cjs') +const { fail, reportReady } = require('../../probe-core.cjs') + +async function bootstrap() { + const app = await NestFactory.create(AppModule) + const address = await app.listen(0, '127.0.0.1') + await reportReady('nest-compiled', { + framework: 'nest-style', + module: AppModule.name, + listenHost: address.address, + listenPort: address.port + }) +} + +void bootstrap().catch(fail) diff --git a/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/nest-factory.cjs b/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/nest-factory.cjs new file mode 100644 index 0000000..b5878ff --- /dev/null +++ b/packages/network-debugger/test/e2e/cli/fixtures/nest-app/dist/nest-factory.cjs @@ -0,0 +1,23 @@ +'use strict' + +const http = require('node:http') + +exports.NestFactory = { + async create(AppModule) { + const module = new AppModule() + const server = http.createServer((_request, response) => { + response.writeHead(200, { 'content-type': 'application/json' }) + response.end(JSON.stringify({ framework: 'nest-style', module: module.constructor.name })) + }) + + return { + async listen(port, host) { + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(port, host, resolve) + }) + return server.address() + } + } + } +} diff --git a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs index fe73eb3..1c1edfd 100644 --- a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs +++ b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs @@ -33,8 +33,12 @@ function requestJson(url, timeoutMs = 3_000) { } const settle = () => (failure ? reject(failure) : resolve(result)) - if (socket.destroyed) settle() - else socket.once('close', settle) + if (socket.destroyed) { + settle() + } else { + socket.once('close', settle) + socket.destroy() + } }) }) request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) From 231bcae02a9f05763a24c01d064127a71301895a Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 14:20:00 +0800 Subject: [PATCH 4/7] fix: isolate packed smoke cleanup on Windows --- .github/workflows/reusable-quality.yml | 4 +- .../e2e/os-smoke/adapter-smoke-controller.mjs | 144 ++++++++++++++++ .../test/e2e/os-smoke/adapter-smoke.test.mjs | 163 +++++++----------- 3 files changed, 209 insertions(+), 102 deletions(-) create mode 100644 packages/network-debugger/test/e2e/os-smoke/adapter-smoke-controller.mjs diff --git a/.github/workflows/reusable-quality.yml b/.github/workflows/reusable-quality.yml index 1725058..fb2ed22 100644 --- a/.github/workflows/reusable-quality.yml +++ b/.github/workflows/reusable-quality.yml @@ -244,7 +244,7 @@ jobs: with: name: ${{ needs.package.outputs.artifact_name }} path: ${{ runner.temp }}/npm-package - - name: Run Native and Legacy 20 times in one controller process + - name: Run isolated Native and Legacy controller for 20 rounds each env: NND_PACK_DIR: ${{ runner.temp }}/npm-package NND_OS_SMOKE_ROUNDS: 20 @@ -253,7 +253,7 @@ jobs: ALL_PROXY: '' NO_PROXY: 127.0.0.1,localhost run: >- - node --experimental-network-inspection --test --test-concurrency=1 + node --test --test-concurrency=1 packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs frontend: diff --git a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke-controller.mjs b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke-controller.mjs new file mode 100644 index 0000000..c81aa3f --- /dev/null +++ b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke-controller.mjs @@ -0,0 +1,144 @@ +import assert from 'node:assert/strict' +import { readFile, realpath } from 'node:fs/promises' +import http from 'node:http' +import { createRequire } from 'node:module' +import { isAbsolute, join, relative } from 'node:path' + +const PACKAGE_NAME = 'node-network-devtools' +const RESULT_PREFIX = 'NND_OS_SMOKE_RESULT ' +const ROUNDS = Number(process.env.NND_OS_SMOKE_ROUNDS ?? 20) +const installationRoot = process.env.NND_OS_SMOKE_INSTALL_ROOT + +assert.ok(Number.isInteger(ROUNDS) && ROUNDS >= 20, 'OS smoke must run at least 20 rounds') +assert.ok(installationRoot, 'NND_OS_SMOKE_INSTALL_ROOT is required') +assert.ok( + process.execArgv.some((argument) => argument.startsWith('--experimental-network-inspection')), + 'the isolated controller requires --experimental-network-inspection' +) + +function requestJson(url, timeoutMs = 3_000) { + return new Promise((resolve, reject) => { + const request = http.get(url, { agent: false }, (response) => { + const chunks = [] + const socket = response.socket + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + const text = Buffer.concat(chunks).toString('utf8') + let result + let failure + + if (response.statusCode !== 200) { + failure = new Error(`${url} returned HTTP ${response.statusCode}: ${text}`) + } else { + try { + result = JSON.parse(text) + } catch (error) { + failure = new Error(`${url} returned invalid JSON: ${text}`, { cause: error }) + } + } + + // inspector.close() is synchronous. Do not call it while the discovery + // socket is still live; this is especially important on Windows. + const settle = () => (failure ? reject(failure) : resolve(result)) + if (socket.destroyed) { + settle() + } else { + socket.once('close', settle) + socket.destroy() + } + }) + }) + request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) + request.once('error', reject) + }) +} + +async function assertEndpointClosed(url) { + let lastResponse + for (let attempt = 0; attempt < 10; attempt += 1) { + try { + lastResponse = await requestJson(url, 500) + } catch { + return + } + await new Promise((resolve) => setTimeout(resolve, 50)) + } + assert.fail( + `target endpoint remained open after dispose: ${url}\n${JSON.stringify(lastResponse)}` + ) +} + +async function runRounds(register, mode) { + const result = { rounds: 0, targetsDiscovered: 0, endpointsClosed: 0 } + + for (let round = 1; round <= ROUNDS; round += 1) { + let registration + let target + try { + registration = register({ + mode, + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false }, + legacy: { serverPort: 0 } + }) + const ready = await registration.ready + target = ready.target + + assert.equal(ready.mode, mode, `${mode} round ${round} selected another adapter`) + assert.equal(registration.status().state, 'ready') + assert.match(target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) + assert.match(target.webSocketDebuggerUrl, /^ws:\/\/127\.0\.0\.1:\d+\//) + + const targets = await requestJson(target.discoveryUrl) + assert.ok(Array.isArray(targets), `${mode} round ${round} discovery must be an array`) + assert.ok( + targets.some((candidate) => candidate.id === target.id), + `${mode} round ${round} target is absent from discovery` + ) + result.targetsDiscovered += 1 + } finally { + await registration?.dispose() + } + + assert.ok(registration, `${mode} round ${round} did not create a registration`) + assert.ok(target, `${mode} round ${round} did not expose a target`) + assert.equal(registration.status().state, 'disposed') + await assertEndpointClosed(target.discoveryUrl) + result.endpointsClosed += 1 + result.rounds += 1 + } + + return result +} + +const consumerRequire = createRequire(join(installationRoot, 'consumer.cjs')) +const packageDirectory = await realpath(join(installationRoot, 'node_modules', PACKAGE_NAME)) +const resolvedEntry = await realpath(consumerRequire.resolve(PACKAGE_NAME)) +const entryRelativeToPackage = relative(packageDirectory, resolvedEntry) +assert.ok( + entryRelativeToPackage && + !entryRelativeToPackage.startsWith('..') && + !isAbsolute(entryRelativeToPackage), + `resolved entry is outside the exact packed installation: ${resolvedEntry}` +) + +const manifest = JSON.parse(await readFile(join(packageDirectory, 'package.json'), 'utf8')) +assert.equal(manifest.name, PACKAGE_NAME) +const { register } = consumerRequire(PACKAGE_NAME) +assert.equal(typeof register, 'function') + +const adapters = { + native: await runRounds(register, 'native'), + legacy: await runRounds(register, 'legacy') +} + +console.log( + `${RESULT_PREFIX}${JSON.stringify({ + schemaVersion: 1, + controllerPid: process.pid, + package: { name: manifest.name, version: manifest.version }, + rounds: ROUNDS, + adapters + })}` +) diff --git a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs index 1c1edfd..cd32ccc 100644 --- a/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs +++ b/packages/network-debugger/test/e2e/os-smoke/adapter-smoke.test.mjs @@ -1,121 +1,84 @@ import assert from 'node:assert/strict' -import http from 'node:http' -import { createRequire } from 'node:module' +import { execFile } from 'node:child_process' import test from 'node:test' -import { join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { promisify } from 'node:util' import { installPackedPackage, removePackedInstallation } from '../pack/packed-package.mjs' +const execFileAsync = promisify(execFile) const ROUNDS = Number(process.env.NND_OS_SMOKE_ROUNDS ?? 20) -const TEST_TIMEOUT_MS = 240_000 +const CHILD_TIMEOUT_MS = 240_000 +const TEST_TIMEOUT_MS = 300_000 +const RESULT_PREFIX = 'NND_OS_SMOKE_RESULT ' +const CONTROLLER_PATH = fileURLToPath(new URL('./adapter-smoke-controller.mjs', import.meta.url)) assert.ok(Number.isInteger(ROUNDS) && ROUNDS >= 20, 'OS smoke must run at least 20 rounds') -function requestJson(url, timeoutMs = 3_000) { - return new Promise((resolve, reject) => { - const request = http.get(url, { agent: false }, (response) => { - const chunks = [] - const socket = response.socket - response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) - response.once('error', reject) - response.once('end', () => { - const text = Buffer.concat(chunks).toString('utf8') - let result - let failure - if (response.statusCode !== 200) { - failure = new Error(`${url} returned HTTP ${response.statusCode}: ${text}`) - } else { - try { - result = JSON.parse(text) - } catch (error) { - failure = new Error(`${url} returned invalid JSON: ${text}`, { cause: error }) - } - } - - const settle = () => (failure ? reject(failure) : resolve(result)) - if (socket.destroyed) { - settle() - } else { - socket.once('close', settle) - socket.destroy() - } - }) - }) - request.setTimeout(timeoutMs, () => request.destroy(new Error(`Timed out requesting ${url}`))) - request.once('error', reject) - }) -} - -async function assertEndpointClosed(url) { - let lastResponse - for (let attempt = 0; attempt < 10; attempt += 1) { - try { - lastResponse = await requestJson(url, 500) - } catch { - return - } - await new Promise((resolve) => setTimeout(resolve, 50)) +async function runIsolatedController(installation) { + try { + return await execFileAsync( + process.execPath, + ['--experimental-network-inspection', CONTROLLER_PATH], + { + cwd: installation.root, + env: { + ...process.env, + NND_OS_SMOKE_INSTALL_ROOT: installation.root, + NND_OS_SMOKE_ROUNDS: String(ROUNDS) + }, + timeout: CHILD_TIMEOUT_MS, + killSignal: 'SIGKILL', + windowsHide: true, + maxBuffer: 10 * 1024 * 1024 + } + ) + } catch (error) { + const output = [error?.stdout, error?.stderr].filter(Boolean).join('\n') + throw new Error(`Isolated OS smoke controller failed:\n${output}`, { cause: error }) } - assert.fail( - `target endpoint remained open after dispose: ${url}\n${JSON.stringify(lastResponse)}` - ) } -async function runRounds(register, mode) { - const controllerPid = process.pid - for (let round = 1; round <= ROUNDS; round += 1) { - let registration - let target - try { - registration = register({ - mode, - inspector: { host: '127.0.0.1', port: 0 }, - devtools: { open: false }, - legacy: { serverPort: 0 } - }) - const ready = await registration.ready - target = ready.target - assert.equal(process.pid, controllerPid, `${mode} round ${round} changed controller process`) - assert.equal(ready.mode, mode, `${mode} round ${round} selected another adapter`) - assert.equal(registration.status().state, 'ready') - assert.match(target.discoveryUrl, /^http:\/\/127\.0\.0\.1:\d+\/json\/list$/) - assert.match(target.webSocketDebuggerUrl, /^ws:\/\/127\.0\.0\.1:\d+\//) - - const targets = await requestJson(target.discoveryUrl) - assert.ok(Array.isArray(targets), `${mode} round ${round} discovery must be an array`) - assert.ok( - targets.some((candidate) => candidate.id === target.id), - `${mode} round ${round} target is absent from discovery` - ) - } finally { - await registration?.dispose() - } +function parseResult(stdout) { + const resultLines = stdout.split(/\r?\n/).filter((line) => line.startsWith(RESULT_PREFIX)) - assert.equal(registration.status().state, 'disposed') - await assertEndpointClosed(target.discoveryUrl) - } + assert.equal( + resultLines.length, + 1, + `expected one structured OS smoke result, received ${resultLines.length}:\n${stdout}` + ) + return JSON.parse(resultLines[0].slice(RESULT_PREFIX.length)) } test( - 'packed Native and Legacy adapters each survive 20 rounds in one process', + 'an isolated packed-package controller survives 20 Native and Legacy rounds', { timeout: TEST_TIMEOUT_MS }, - async (t) => { - assert.ok( - process.execArgv.some((argument) => argument.startsWith('--experimental-network-inspection')), - 'start this controller with --experimental-network-inspection' - ) - + async () => { const installation = await installPackedPackage('nnd-os-smoke-') - t.after(() => removePackedInstallation(installation)) - const consumerRequire = createRequire(join(installation.root, 'consumer.cjs')) - const { register } = consumerRequire('node-network-devtools') - assert.equal(typeof register, 'function') - await t.test(`Native adapter: ${ROUNDS} consecutive rounds`, () => - runRounds(register, 'native') - ) - await t.test(`Legacy adapter: ${ROUNDS} consecutive rounds`, () => - runRounds(register, 'legacy') - ) + try { + // Only the child loads the installed package. Waiting for execFile to + // close before cleanup avoids Windows file locks from loaded modules. + const { stdout } = await runIsolatedController(installation) + const result = parseResult(stdout) + + assert.equal(result.schemaVersion, 1) + assert.notEqual(result.controllerPid, process.pid) + assert.deepEqual(result.package, { + name: installation.manifest.name, + version: installation.manifest.version + }) + assert.equal(result.rounds, ROUNDS) + + for (const mode of ['native', 'legacy']) { + assert.deepEqual(result.adapters[mode], { + rounds: ROUNDS, + targetsDiscovered: ROUNDS, + endpointsClosed: ROUNDS + }) + } + } finally { + await removePackedInstallation(installation) + } } ) From b989d643265846890fce31e2bac053593ec5cca2 Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 14:23:25 +0800 Subject: [PATCH 5/7] docs: record completed v2 acceptance audit --- docs/v2-implementation-plan.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/docs/v2-implementation-plan.md b/docs/v2-implementation-plan.md index 0d82ffb..64aa5a1 100644 --- a/docs/v2-implementation-plan.md +++ b/docs/v2-implementation-plan.md @@ -308,9 +308,9 @@ checkbox above and additionally prove: `Network.*` event used as product evidence. - [x] Both protocol suites pass 50 consecutive runs without a failure or leaked process. -- [ ] Windows and macOS smoke suites pass 20 consecutive runs. +- [x] Windows and macOS smoke suites pass 20 consecutive runs. - [x] Frontend smoke passes 10 consecutive runs. -- [ ] Pull requests and publishing are blocked by the verified quality workflow. +- [x] Pull requests and publishing are blocked by the verified quality workflow. - [x] Documentation describes actual current capabilities, not intended ones. - [x] Every planned artifact exists in the packed npm output when required. @@ -391,7 +391,21 @@ checkbox above and additionally prove: remained. The current exact `node-network-devtools-2.0.0.tgz` installs in CJS and ESM consumers, passes packed Native/Legacy runtime tests plus publish dry-run, contains 190 files including LICENSE, and has SHA-256 - `df5e666727df06563e20194d0f777c2b17cb18942c28eba4be22a9316e8f9df0`. - Windows 20-round evidence and the active required `Quality Gate` repository - ruleset remain deliberately unchecked until the pushed branch succeeds in - GitHub Actions. + `dbd24df4d1ff4dda6ac545df0ef95c1287f0cace81d1e26fca08caa5667fce84`. +- 2026-08-28: Final remote audit passed at commit + `231bcae02a9f05763a24c01d064127a71301895a`. GitHub Actions run + [33147572570](https://github.com/GrinZero/node-network-devtools/actions/runs/33147572570) + completed all 18 reusable-workflow jobs plus the top-level `Quality Gate` + successfully. The exact uploaded artifact + `node-network-devtools-tgz-33147572570-1` contains 190 files and has the same + SHA-256 recorded above. Its isolated packed-package controller passed 20 + Native and 20 Legacy rounds on both `windows-latest` and `macos-latest`, with + discovery, target, disposal, and closed-endpoint assertions preserved. Active + repository ruleset + [21711512](https://github.com/GrinZero/node-network-devtools/rules/21711512) + targets `refs/heads/main`, strictly requires `Quality Gate` from GitHub Actions + integration `15368`, and has no bypass actors (`current_user_can_bypass` is + `never`). The release workflow cannot reach `publish` until the same reusable + quality workflow succeeds; it then downloads that workflow's sole artifact and + verifies its SHA-256 and release tag before publishing. No real npm publish was + performed as part of this implementation. From 449d47db89109e826eb0e7e0584777365eac3f9b Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 15:22:55 +0800 Subject: [PATCH 6/7] fix: make native HTTP/2 capability conservative --- README-zh_CN.md | 23 ++++++++------ README.md | 25 +++++++++------ docs/v2-migration.md | 8 +++-- packages/network-debugger/README.md | 31 ++++++++++++------- .../adapters/node-native/capability.test.ts | 16 +++++++++- .../src/adapters/node-native/capability.ts | 8 +++-- 6 files changed, 75 insertions(+), 36 deletions(-) diff --git a/README-zh_CN.md b/README-zh_CN.md index 3a12a51..5910798 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -50,19 +50,24 @@ unregister()`。 ## 能力概览 -| 能力 | Native | Legacy | -| ----------------------------- | ---------------- | ------ | -| HTTP / HTTPS / Fetch 生命周期 | 取决于 Node 版本 | 支持 | -| HTTP/2 | 取决于 Node 版本 | 不支持 | -| 响应 Body | 取决于 Node 版本 | 支持 | -| 请求 Body | 不声明支持 | 支持 | -| WebSocket 生命周期 / 帧 | 仅生命周期 | 支持 | -| SSE 消息 | 不支持 | 支持 | -| 请求/响应 Mock | 不支持 | 支持 | +| 能力 | Native | Legacy | +| ----------------------------- | ---------------------- | ------ | +| HTTP / HTTPS / Fetch 生命周期 | 取决于 Node 版本 | 支持 | +| HTTP/2 | 仅 Node 22.20+(22.x) | 不支持 | +| 响应 Body | 取决于 Node 版本 | 支持 | +| 请求 Body | 不声明支持 | 支持 | +| WebSocket 生命周期 / 帧 | 仅生命周期 | 支持 | +| SSE 消息 | 不支持 | 支持 | +| 请求/响应 Mock | 不支持 | 支持 | Native 能力根据实际 Node 版本和 Inspector 方法探测。强制 Native 时缺少能力会直接 失败;Auto 改用 Legacy 时会返回结构化原因,不会静默降级。 +Native HTTP/2 采用保守白名单:仅 Node 22.20+ 的 22.x 版本声明支持。Node 22.22.3 +已通过非空 h2c 生命周期实测;Node 24.16.0 与 26.8.1 在通过 `setEncoding()` 消费 +非空响应时,会触发上游实验性 Inspector 的 `Missing dataLength` 崩溃。其他及未来 +大版本在独立验证前一律报告为不支持;Legacy 也不捕获 HTTP/2。 + ## Session、HAR 与 Replay 两个后端都可以持久化 Network Session、外置保存响应 Body、导出 HAR 1.2、关联已有 diff --git a/README.md b/README.md index 483146d..c5d4b54 100644 --- a/README.md +++ b/README.md @@ -53,20 +53,27 @@ register(); unregister()`. ## Capability summary -| Capability | Native | Legacy | -| ------------------------------ | ----------------- | ------ | -| HTTP / HTTPS / Fetch lifecycle | Runtime-dependent | Yes | -| HTTP/2 | Runtime-dependent | No | -| Response bodies | Runtime-dependent | Yes | -| Request bodies | Not advertised | Yes | -| WebSocket lifecycle / frames | Lifecycle only | Yes | -| SSE messages | No | Yes | -| Request/response Mock | No | Yes | +| Capability | Native | Legacy | +| ------------------------------ | ----------------------- | ------ | +| HTTP / HTTPS / Fetch lifecycle | Runtime-dependent | Yes | +| HTTP/2 | Node 22.20+ (22.x only) | No | +| Response bodies | Runtime-dependent | Yes | +| Request bodies | Not advertised | Yes | +| WebSocket lifecycle / frames | Lifecycle only | Yes | +| SSE messages | No | Yes | +| Request/response Mock | No | Yes | Native values are probed from the running Node version and Inspector methods. Forced Native fails if requirements are missing; Auto returns a structured reason whenever it uses Legacy. +Native HTTP/2 is conservatively allowlisted only for Node 22.20+ releases in +the 22.x line. A non-empty h2c lifecycle passed on Node 22.22.3, while consuming +a non-empty response with `setEncoding()` crashes the upstream experimental +Inspector on Node 24.16.0 and 26.8.1 with `Missing dataLength`. Other and future +majors remain reported as unsupported until independently verified; Legacy does +not capture HTTP/2. + ## Session workflow Both backends support persistent Network sessions, external response bodies, diff --git a/docs/v2-migration.md b/docs/v2-migration.md index 1b46028..c37204a 100644 --- a/docs/v2-migration.md +++ b/docs/v2-migration.md @@ -79,8 +79,12 @@ Notable verified boundaries: - Native network inspection first appears behind the experimental flag in Node 20.18 and 22.6. - Auto's proven Native baseline is Node 24.7 and newer. -- Native HTTP/2 capture requires the later runtime implementations (for example, - Node 24.8+). +- Native HTTP/2 is explicitly allowlisted only on Node 22.20+ within the 22.x + line. A non-empty h2c lifecycle passed on Node 22.22.3, but consuming a + non-empty response with `setEncoding()` crashes the upstream experimental + Inspector on Node 24.16.0 and 26.8.1 with `Missing dataLength`. Other and + future majors remain false until independently verified; Legacy HTTP/2 is + also unsupported. - Node 22.22 can retrieve Native HTTP response bodies, but Fetch `Network.getResponseBody` returns an empty body in the package E2E. Because the public `responseBody` capability spans transports, v2 conservatively reports diff --git a/packages/network-debugger/README.md b/packages/network-debugger/README.md index a5bfdf9..6d6c971 100644 --- a/packages/network-debugger/README.md +++ b/packages/network-debugger/README.md @@ -77,18 +77,18 @@ registration fails with `NND_ALREADY_REGISTERED`. ## Backend capabilities -| Capability | Native | Legacy | -| ---------------------- | ----------------- | ------ | -| HTTP / HTTPS lifecycle | Yes | Yes | -| Fetch lifecycle | Runtime-dependent | Yes | -| HTTP/2 | Runtime-dependent | No | -| Response bodies | Runtime-dependent | Yes | -| Request bodies | Not advertised | Yes | -| WebSocket lifecycle | Runtime-dependent | Yes | -| WebSocket frames | No | Yes | -| SSE messages | No | Yes | -| Initiator stack | Yes | Yes | -| Request/response Mock | No | Yes | +| Capability | Native | Legacy | +| ---------------------- | ----------------------- | ------ | +| HTTP / HTTPS lifecycle | Yes | Yes | +| Fetch lifecycle | Runtime-dependent | Yes | +| HTTP/2 | Node 22.20+ (22.x only) | No | +| Response bodies | Runtime-dependent | Yes | +| Request bodies | Not advertised | Yes | +| WebSocket lifecycle | Runtime-dependent | Yes | +| WebSocket frames | No | Yes | +| SSE messages | No | Yes | +| Initiator stack | Yes | Yes | +| Request/response Mock | No | Yes | Native capabilities are probed from the running Node version and Inspector API; the package does not pretend missing upstream features exist. Forced Native @@ -100,6 +100,13 @@ body. Because `responseBody` covers all advertised transports, the package conservatively reports that capability as false on Node 22 and enables it only on the verified Node 24+ baseline. +Native HTTP/2 is conservatively allowlisted only for Node 22.20+ releases in +the 22.x line. A non-empty h2c lifecycle passed on Node 22.22.3, while consuming +a non-empty response with `setEncoding()` crashes the upstream experimental +Inspector on Node 24.16.0 and 26.8.1 with `Missing dataLength`. Other and future +majors remain reported as unsupported until independently verified. Legacy does +not capture HTTP/2. + Legacy interception can be narrowed: ```ts diff --git a/packages/network-debugger/src/adapters/node-native/capability.test.ts b/packages/network-debugger/src/adapters/node-native/capability.test.ts index cf28982..28cb693 100644 --- a/packages/network-debugger/src/adapters/node-native/capability.test.ts +++ b/packages/network-debugger/src/adapters/node-native/capability.test.ts @@ -79,7 +79,7 @@ describe('native capability detection', () => { http: true, https: true, fetch: true, - http2: true, + http2: false, responseBody: true, requestBody: false, websocketLifecycle: true, @@ -89,6 +89,20 @@ describe('native capability detection', () => { }) }) + test.each([ + ['22.19.0', false], + ['22.20.0', true], + ['22.22.3', true], + ['23.11.1', false], + ['24.16.0', false], + ['25.7.0', false], + ['26.8.1', false], + ['99.0.0', false] + ])('uses the explicit Native HTTP/2 allowlist for Node %s', (text, expected) => { + const capabilities = getNativeCapabilities(parseNodeVersion(text), lifecycleNetwork()) + expect(capabilities.http2).toBe(expected) + }) + test('does not infer HTTP request-body support from dataSent', () => { const capabilities = getNativeCapabilities(parseNodeVersion('26.1.0'), { ...lifecycleNetwork(), diff --git a/packages/network-debugger/src/adapters/node-native/capability.ts b/packages/network-debugger/src/adapters/node-native/capability.ts index 18fba63..bd94bfa 100644 --- a/packages/network-debugger/src/adapters/node-native/capability.ts +++ b/packages/network-debugger/src/adapters/node-native/capability.ts @@ -96,9 +96,11 @@ function supportsNativeFetch(version: NodeVersion | null) { function supportsNativeHttp2(version: NodeVersion | null) { if (!version) return false - if (version.major === 22) return atLeast(version, 22, 20) - if (version.major === 24) return atLeast(version, 24, 8) - return version.major >= 25 + + // Keep this as an explicit allowlist. A non-empty h2c lifecycle is verified on + // Node 22.20+, while newer majors have regressed in the experimental Inspector. + // Future majors must be verified independently instead of inheriting support. + return version.major === 22 && atLeast(version, 22, 20) } /** From af095e1ce57a91f38469e8b882c37cf301a0ff09 Mon Sep 17 00:00:00 2001 From: bugyaluwang Date: Fri, 28 Aug 2026 16:09:22 +0800 Subject: [PATCH 7/7] test: add PR 64 manual acceptance evidence --- .gitignore | 3 +- docs/test-evidence/v2/pr-64/README.md | 186 +++ docs/v2-implementation-plan.md | 20 +- output/playwright/pr-64/.gitignore | 16 + .../pr-64/artifacts/cli-manual-results.json | 291 +++++ .../pr-64/artifacts/cli-replay-fixture.har | 63 + .../artifacts/legacy-dispose-summary.json | 5 + .../pr-64/artifacts/legacy-events.ndjson | 54 + .../artifacts/legacy-finalize-summary.json | 90 ++ .../pr-64/artifacts/legacy-replayable.har | 458 +++++++ .../pr-64/artifacts/legacy-runtime.json | 80 ++ .../artifacts/legacy-session-manifest.json | 518 ++++++++ .../pr-64/artifacts/legacy-session.har | 832 +++++++++++++ .../artifacts/native-dispose-summary.json | 5 + .../pr-64/artifacts/native-events.ndjson | 24 + .../artifacts/native-finalize-summary.json | 90 ++ .../pr-64/artifacts/native-http2-probe.json | 50 + .../pr-64/artifacts/native-replayable.har | 440 +++++++ .../pr-64/artifacts/native-runtime.json | 76 ++ .../artifacts/native-session-manifest.json | 354 ++++++ .../pr-64/artifacts/native-session.har | 691 +++++++++++ output/playwright/pr-64/checksums.sha256 | 51 + output/playwright/pr-64/manifest.json | 193 +++ output/playwright/pr-64/manual-cli-case.sh | 17 + .../pr-64/manual-cli-evidence-server.mjs | 456 +++++++ .../pr-64/manual-evidence-server.mjs | 1063 +++++++++++++++++ .../pr-64/manual-localhost-cert.pem | 19 + .../playwright/pr-64/manual-localhost-key.pem | 28 + .../pr-64/manual-native-http2-probe.mjs | 84 ++ .../pr-64/manual-native-mock-conflict.mjs | 30 + .../MT-01-cli-version-doctor-native.png | Bin 0 -> 43022 bytes .../MT-02-cli-zero-code-and-conflict.png | Bin 0 -> 455810 bytes .../MT-03-native-runtime-and-capabilities.png | Bin 0 -> 250362 bytes .../screenshots/MT-04-native-version.png | Bin 0 -> 11638 bytes .../MT-05-native-devtools-network-list.png | Bin 0 -> 88062 bytes .../MT-05-native-fetch-headers.png | Bin 0 -> 106947 bytes .../MT-05-native-fetch-response.png | Bin 0 -> 64610 bytes ...MT-06-native-devtools-reload-reconnect.png | Bin 0 -> 50184 bytes .../MT-07-legacy-runtime-and-capabilities.png | Bin 0 -> 263381 bytes .../screenshots/MT-08-legacy-version.png | Bin 0 -> 23295 bytes .../MT-09-legacy-devtools-network-list.png | Bin 0 -> 111092 bytes .../MT-09-legacy-fetch-payload.png | Bin 0 -> 78173 bytes .../MT-09-legacy-fetch-response.png | Bin 0 -> 71124 bytes .../MT-10-legacy-mock-fetch-response.png | Bin 0 -> 68320 bytes .../MT-10-legacy-mock-http-response.png | Bin 0 -> 68046 bytes .../MT-11-legacy-sse-eventstream.png | Bin 0 -> 77655 bytes .../MT-11-legacy-websocket-messages.png | Bin 0 -> 89107 bytes .../MT-11-native-websocket-lifecycle.png | Bin 0 -> 84413 bytes .../MT-12-legacy-session-har-replay-trace.png | Bin 0 -> 305845 bytes .../MT-12-native-session-har-replay-trace.png | Bin 0 -> 291186 bytes .../MT-13-legacy-boundary-assertions.png | Bin 0 -> 42708 bytes .../MT-13-legacy-failed-request.png | Bin 0 -> 78938 bytes .../MT-13-native-boundary-assertions.png | Bin 0 -> 42470 bytes .../MT-13-native-failed-request.png | Bin 0 -> 60655 bytes .../MT-14-legacy-dispose-cleanup.png | Bin 0 -> 268044 bytes .../MT-14-native-dispose-cleanup.png | Bin 0 -> 254229 bytes 56 files changed, 6285 insertions(+), 2 deletions(-) create mode 100644 docs/test-evidence/v2/pr-64/README.md create mode 100644 output/playwright/pr-64/.gitignore create mode 100644 output/playwright/pr-64/artifacts/cli-manual-results.json create mode 100644 output/playwright/pr-64/artifacts/cli-replay-fixture.har create mode 100644 output/playwright/pr-64/artifacts/legacy-dispose-summary.json create mode 100644 output/playwright/pr-64/artifacts/legacy-events.ndjson create mode 100644 output/playwright/pr-64/artifacts/legacy-finalize-summary.json create mode 100644 output/playwright/pr-64/artifacts/legacy-replayable.har create mode 100644 output/playwright/pr-64/artifacts/legacy-runtime.json create mode 100644 output/playwright/pr-64/artifacts/legacy-session-manifest.json create mode 100644 output/playwright/pr-64/artifacts/legacy-session.har create mode 100644 output/playwright/pr-64/artifacts/native-dispose-summary.json create mode 100644 output/playwright/pr-64/artifacts/native-events.ndjson create mode 100644 output/playwright/pr-64/artifacts/native-finalize-summary.json create mode 100644 output/playwright/pr-64/artifacts/native-http2-probe.json create mode 100644 output/playwright/pr-64/artifacts/native-replayable.har create mode 100644 output/playwright/pr-64/artifacts/native-runtime.json create mode 100644 output/playwright/pr-64/artifacts/native-session-manifest.json create mode 100644 output/playwright/pr-64/artifacts/native-session.har create mode 100644 output/playwright/pr-64/checksums.sha256 create mode 100644 output/playwright/pr-64/manifest.json create mode 100644 output/playwright/pr-64/manual-cli-case.sh create mode 100644 output/playwright/pr-64/manual-cli-evidence-server.mjs create mode 100644 output/playwright/pr-64/manual-evidence-server.mjs create mode 100644 output/playwright/pr-64/manual-localhost-cert.pem create mode 100644 output/playwright/pr-64/manual-localhost-key.pem create mode 100644 output/playwright/pr-64/manual-native-http2-probe.mjs create mode 100644 output/playwright/pr-64/manual-native-mock-conflict.mjs create mode 100644 output/playwright/pr-64/screenshots/MT-01-cli-version-doctor-native.png create mode 100644 output/playwright/pr-64/screenshots/MT-02-cli-zero-code-and-conflict.png create mode 100644 output/playwright/pr-64/screenshots/MT-03-native-runtime-and-capabilities.png create mode 100644 output/playwright/pr-64/screenshots/MT-04-native-version.png create mode 100644 output/playwright/pr-64/screenshots/MT-05-native-devtools-network-list.png create mode 100644 output/playwright/pr-64/screenshots/MT-05-native-fetch-headers.png create mode 100644 output/playwright/pr-64/screenshots/MT-05-native-fetch-response.png create mode 100644 output/playwright/pr-64/screenshots/MT-06-native-devtools-reload-reconnect.png create mode 100644 output/playwright/pr-64/screenshots/MT-07-legacy-runtime-and-capabilities.png create mode 100644 output/playwright/pr-64/screenshots/MT-08-legacy-version.png create mode 100644 output/playwright/pr-64/screenshots/MT-09-legacy-devtools-network-list.png create mode 100644 output/playwright/pr-64/screenshots/MT-09-legacy-fetch-payload.png create mode 100644 output/playwright/pr-64/screenshots/MT-09-legacy-fetch-response.png create mode 100644 output/playwright/pr-64/screenshots/MT-10-legacy-mock-fetch-response.png create mode 100644 output/playwright/pr-64/screenshots/MT-10-legacy-mock-http-response.png create mode 100644 output/playwright/pr-64/screenshots/MT-11-legacy-sse-eventstream.png create mode 100644 output/playwright/pr-64/screenshots/MT-11-legacy-websocket-messages.png create mode 100644 output/playwright/pr-64/screenshots/MT-11-native-websocket-lifecycle.png create mode 100644 output/playwright/pr-64/screenshots/MT-12-legacy-session-har-replay-trace.png create mode 100644 output/playwright/pr-64/screenshots/MT-12-native-session-har-replay-trace.png create mode 100644 output/playwright/pr-64/screenshots/MT-13-legacy-boundary-assertions.png create mode 100644 output/playwright/pr-64/screenshots/MT-13-legacy-failed-request.png create mode 100644 output/playwright/pr-64/screenshots/MT-13-native-boundary-assertions.png create mode 100644 output/playwright/pr-64/screenshots/MT-13-native-failed-request.png create mode 100644 output/playwright/pr-64/screenshots/MT-14-legacy-dispose-cleanup.png create mode 100644 output/playwright/pr-64/screenshots/MT-14-native-dispose-cleanup.png diff --git a/.gitignore b/.gitignore index 41d41e8..055b4de 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ node_modules # Testing coverage +.playwright-cli/ # Turbo .turbo @@ -43,4 +44,4 @@ yarn-error.log* # GitHub App credentials -gha-creds-*.json \ No newline at end of file +gha-creds-*.json diff --git a/docs/test-evidence/v2/pr-64/README.md b/docs/test-evidence/v2/pr-64/README.md new file mode 100644 index 0000000..a74f1ba --- /dev/null +++ b/docs/test-evidence/v2/pr-64/README.md @@ -0,0 +1,186 @@ +# PR #64 manual acceptance evidence + +Result: **14/14 manual test cases passed**. + +This is the human-observable acceptance layer for the automated v2 suite. The +run used the exact packed package from the tested product commit, an isolated +consumer, real loopback traffic, the public CLI/runtime APIs, standard CDP +discovery, and the official Chromium DevTools Network panel. The evidence set +contains 26 privacy-reviewed screenshots, 17 structured artifacts, five +reproduction harnesses, two test-only localhost certificate inputs, and a +checksum manifest. + +## Evidence identity + +| Field | Value | +| --------------------- | ------------------------------------------------------------------ | +| Pull request | [#64](https://github.com/GrinZero/node-network-devtools/pull/64) | +| Tested product commit | `449d47db89109e826eb0e7e0584777365eac3f9b` | +| Installed package | `node-network-devtools@2.0.0` | +| Packed files | 190 | +| Tarball SHA-256 | `e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac` | +| Harness SHA-256 | `46f81eb2930040a31f402cf4cb113758628eb72c9db27617babba1d3df31af27` | +| Primary runtime | Node.js `v24.16.0`, `darwin-arm64` | +| Compatibility probe | Node.js `v22.22.3`, `v24.16.0`, and `v26.8.1` | +| Browser | Chrome for Testing `151.0.7922.34` | +| Browser automation | `@playwright/cli 0.1.18`, engine `1.63.0-alpha-2026-08-05` | +| Test date | 2026-08-28 (Asia/Shanghai) | + +The package was built and packed at the tested product commit, hashed, and +installed into an otherwise empty consumer. The harness imports only the public +exports from that installed tarball. The package identity is repeated in the +[Native runtime artifact](../../../../output/playwright/pr-64/artifacts/native-runtime.json), +[Legacy runtime artifact](../../../../output/playwright/pr-64/artifacts/legacy-runtime.json), +and [manifest](../../../../output/playwright/pr-64/manifest.json). + +## Method and trust boundary + +- Playwright operated visible scenario controls and the official Chromium + DevTools frontend. Every click caused the isolated consumer process to issue + real outbound traffic; the screenshots are not a mock DevTools UI. +- Computer Use was used for the exploratory integrated-terminal CLI pass. The + final repeatable CLI proof was rerun through a Playwright control page and + persisted as both a screenshot and structured JSON. +- HTTP, HTTPS, Fetch, SSE, WebSocket, failed requests, mocks, and replay all used + local loopback servers. HTTPS used the retained test-only localhost + certificate; its client explicitly disabled trust verification for that + fixture only. +- The harness fetched and asserted the complete `/json/list`, `/json/version`, + and `/json/protocol` contracts, including the Network domain. Raw discovery + screenshots containing a local file URL were deliberately excluded; the + privacy-safe capability page, version page, and structured response retain + the same protocol assertions. +- Session manifests, raw CDP events, HAR files, replay summaries, CLI results, + capability-boundary assertions, and disposal probes are committed alongside + the screenshots. Only local filesystem prefixes were redacted; protocol + methods, statuses, bodies, counters, and lifecycle semantics were preserved. +- [`checksums.sha256`](../../../../output/playwright/pr-64/checksums.sha256) + covers all 51 retained files in the evidence bundle other than + `.gitignore` and the checksum file itself. Screenshots satisfy the requested + visual-evidence option; no video is committed. + +## Test cases + +| ID | Manual action | Expected result | Observed result and evidence | Status | +| ----- | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | +| MT-01 | Run `nnd --version`, then run `nnd doctor --json` with Node network inspection enabled. | Version is `2.0.0`; doctor is healthy, has no missing requirement, and selects Native. | `version=2.0.0`, `ok=true`, `experimentalFlag=true`, `missingRequired=[]`, `selected=native`. [Screenshot](../../../../output/playwright/pr-64/screenshots/MT-01-cli-version-doctor-native.png) · [CLI JSON](../../../../output/playwright/pr-64/artifacts/cli-manual-results.json) | **PASS** | +| MT-02 | Run public `nnd dev` in Native and Legacy modes, force Native with a mock rule, and run `nnd dev --open`. | Both modes inject the preload and expose a target; invalid Native + Mock fails; `--open` launches exactly the advertised target. | Six visible CLI cases passed. Native received inspection/import flags; Legacy received the import; conflict returned `NND_NATIVE_MOCK_CONFLICT`; the OS launch was redirected to an exact-target CDP verifier and occurred once. [Screenshot](../../../../output/playwright/pr-64/screenshots/MT-02-cli-zero-code-and-conflict.png) · [CLI JSON](../../../../output/playwright/pr-64/artifacts/cli-manual-results.json) | **PASS** | +| MT-03 | Register the exact package in Native mode and inspect identity, public references, target, and capabilities. | Native is ready without fallback; public networking functions remain unpatched; only verified capabilities are advertised. | Native selected; original `fetch`, `http.request`, and `https.request` references were preserved. Node 24 correctly reports `http2=false`, `requestBody=false`, `websocketFrames=false`, and `sseMessages=false`. [Screenshot](../../../../output/playwright/pr-64/screenshots/MT-03-native-runtime-and-capabilities.png) · [Runtime JSON](../../../../output/playwright/pr-64/artifacts/native-runtime.json) | **PASS** | +| MT-04 | Fetch the Native target's `/json/list`, `/json/version`, and `/json/protocol` endpoints. | One matching Node target is discoverable; version metadata is valid; the protocol exposes the Network domain. | Target count `1`, matching id, browser `node.js/v24.16.0`, protocol `1.1`, Network domain present with 6 commands and 8 events. [Capability/discovery screenshot](../../../../output/playwright/pr-64/screenshots/MT-03-native-runtime-and-capabilities.png) · [Version screenshot](../../../../output/playwright/pr-64/screenshots/MT-04-native-version.png) · [Structured contract/runtime JSON](../../../../output/playwright/pr-64/artifacts/native-runtime.json) | **PASS** | +| MT-05 | Open official DevTools and trigger real HTTP GET, HTTPS GET, and Fetch POST requests; inspect list, headers, and response. | Each request appears once with correct status and metadata; response bodies are readable. | Requests returned `200`, `200`, and `201`; the Fetch headers carry the correlation token and its response echoes the manual value. Native does not claim request-body retrieval. [List](../../../../output/playwright/pr-64/screenshots/MT-05-native-devtools-network-list.png) · [Headers](../../../../output/playwright/pr-64/screenshots/MT-05-native-fetch-headers.png) · [Response](../../../../output/playwright/pr-64/screenshots/MT-05-native-fetch-response.png) · [Events](../../../../output/playwright/pr-64/artifacts/native-events.ndjson) | **PASS** | +| MT-06 | Reload official Native DevTools, reconnect to the same target, and trigger another GET. | The frontend reconnects and captures post-reload traffic without replaying old rows as new requests. | A new `native-http-get-08` request appears with status `200` after reload/reconnect. [Screenshot](../../../../output/playwright/pr-64/screenshots/MT-06-native-devtools-reload-reconnect.png) · [Session manifest](../../../../output/playwright/pr-64/artifacts/native-session-manifest.json) | **PASS** | +| MT-07 | Register in Auto mode with Legacy mock rules and inspect backend selection and capabilities. | Auto selects Legacy with an explicit reason and exposes its larger detail-level capability set. | Backend `legacy`; reason `NND_AUTO_LEGACY_MOCK_REQUIRED`; request-body, WebSocket-frame, and SSE-message capture enabled. [Screenshot](../../../../output/playwright/pr-64/screenshots/MT-07-legacy-runtime-and-capabilities.png) · [Runtime JSON](../../../../output/playwright/pr-64/artifacts/legacy-runtime.json) | **PASS** | +| MT-08 | Fetch the Legacy target's `/json/list`, `/json/version`, and `/json/protocol` endpoints. | One matching project-owned CDP target is discoverable on loopback and the protocol exposes Network. | Target count `1`, matching id, browser `node-network-devtools/2`, protocol `1.3`, Network domain present with 7 commands and 12 events. [Capability/discovery screenshot](../../../../output/playwright/pr-64/screenshots/MT-07-legacy-runtime-and-capabilities.png) · [Version screenshot](../../../../output/playwright/pr-64/screenshots/MT-08-legacy-version.png) · [Structured contract/runtime JSON](../../../../output/playwright/pr-64/artifacts/legacy-runtime.json) | **PASS** | +| MT-09 | In official DevTools, trigger Legacy HTTP GET, HTTPS GET, and Fetch POST; inspect list, Payload, and Response. | Statuses are correct and both POST request body and response body are available. | Fetch is `201`; Payload contains `manual-request-body:legacy-fetch-post-03`; Response contains the matching echo. [List](../../../../output/playwright/pr-64/screenshots/MT-09-legacy-devtools-network-list.png) · [Payload](../../../../output/playwright/pr-64/screenshots/MT-09-legacy-fetch-payload.png) · [Response](../../../../output/playwright/pr-64/screenshots/MT-09-legacy-fetch-response.png) · [Events](../../../../output/playwright/pr-64/artifacts/legacy-events.ndjson) | **PASS** | +| MT-10 | Trigger matching Legacy mock rules through `http.request` and Fetch; inspect status, body, headers, and origin counter. | HTTP returns `207`, Fetch returns `202`, and neither request reaches the origin server. | Both responses traverse the normal Network path; mock bodies/headers are visible and `originLeakCount=0`. [HTTP](../../../../output/playwright/pr-64/screenshots/MT-10-legacy-mock-http-response.png) · [Fetch](../../../../output/playwright/pr-64/screenshots/MT-10-legacy-mock-fetch-response.png) · [Summary](../../../../output/playwright/pr-64/artifacts/legacy-finalize-summary.json) | **PASS** | +| MT-11 | Trigger SSE and WebSocket exchanges on both backends and inspect the visible detail tabs and protocol counters. | Native reports only what upstream provides; Legacy exposes SSE messages and sent/received WebSocket frames. | Native: one create/close pair, zero frames, SSE request visible with zero message events. Legacy: two SSE messages plus 2 sent and 2 received frames. [Native lifecycle](../../../../output/playwright/pr-64/screenshots/MT-11-native-websocket-lifecycle.png) · [Legacy SSE](../../../../output/playwright/pr-64/screenshots/MT-11-legacy-sse-eventstream.png) · [Legacy WebSocket](../../../../output/playwright/pr-64/screenshots/MT-11-legacy-websocket-messages.png) · [Native assertion](../../../../output/playwright/pr-64/artifacts/native-finalize-summary.json) · [Legacy assertion](../../../../output/playwright/pr-64/artifacts/legacy-finalize-summary.json) | **PASS** | +| MT-12 | Finalize both recordings; inspect Session, HAR, trace correlation, library replay, and public CLI replay in dry/real modes. | Manifests complete without body errors; HAR is coherent; explicit trace context survives; dry and real replay both pass. | Native replay `5/5 + 5/5`; Legacy replay `6/6 + 6/6`; public CLI replay `2/2 + 2/2` and preserved the POST body; trace headers were preserved only on the explicitly traced request. [Native](../../../../output/playwright/pr-64/screenshots/MT-12-native-session-har-replay-trace.png) · [Legacy](../../../../output/playwright/pr-64/screenshots/MT-12-legacy-session-har-replay-trace.png) · [CLI](../../../../output/playwright/pr-64/artifacts/cli-manual-results.json) · [Native summary](../../../../output/playwright/pr-64/artifacts/native-finalize-summary.json) · [Legacy summary](../../../../output/playwright/pr-64/artifacts/legacy-finalize-summary.json) | **PASS** | +| MT-13 | Trigger a connection-reset failure on both backends and probe Native HTTP/2 on Node 22, 24, and 26. | Failed requests emit exactly one terminal failure; HTTP/2 is advertised only where its complete lifecycle is verified. | Both backends emitted one `requestWillBeSent` and one `loadingFailed`, with no response/finished event. Node 22.22.3 completed HTTP/2 with body `h2-ok`; Node 24.16/26.8 reproduced the upstream Inspector `Missing dataLength` crash and correctly advertised `http2=false`. [Native failure](../../../../output/playwright/pr-64/screenshots/MT-13-native-failed-request.png) · [Legacy failure](../../../../output/playwright/pr-64/screenshots/MT-13-legacy-failed-request.png) · [Native boundary](../../../../output/playwright/pr-64/screenshots/MT-13-native-boundary-assertions.png) · [Legacy boundary](../../../../output/playwright/pr-64/screenshots/MT-13-legacy-boundary-assertions.png) · [HTTP/2 probe](../../../../output/playwright/pr-64/artifacts/native-http2-probe.json) | **PASS** | +| MT-14 | Dispose each registration, then probe discovery HTTP and the target WebSocket. | State becomes disposed and both endpoints reject new connections. | Both summaries report `registrationState=disposed`, `discoveryClosed=true`, and `targetSocketClosed=true`. [Native](../../../../output/playwright/pr-64/screenshots/MT-14-native-dispose-cleanup.png) · [Legacy](../../../../output/playwright/pr-64/screenshots/MT-14-legacy-dispose-cleanup.png) · [Native JSON](../../../../output/playwright/pr-64/artifacts/native-dispose-summary.json) · [Legacy JSON](../../../../output/playwright/pr-64/artifacts/legacy-dispose-summary.json) | **PASS** | + +## Representative visual evidence + +
+CLI, runtime selection, and discovery + +![CLI version and doctor](../../../../output/playwright/pr-64/screenshots/MT-01-cli-version-doctor-native.png) + +![Six exact-package CLI cases](../../../../output/playwright/pr-64/screenshots/MT-02-cli-zero-code-and-conflict.png) + +![Native runtime identity and capabilities](../../../../output/playwright/pr-64/screenshots/MT-03-native-runtime-and-capabilities.png) + +![Legacy runtime identity and capabilities](../../../../output/playwright/pr-64/screenshots/MT-07-legacy-runtime-and-capabilities.png) + +
+ +
+Official DevTools request details + +![Native DevTools Network list](../../../../output/playwright/pr-64/screenshots/MT-05-native-devtools-network-list.png) + +![Native Fetch response](../../../../output/playwright/pr-64/screenshots/MT-05-native-fetch-response.png) + +![Legacy Fetch payload](../../../../output/playwright/pr-64/screenshots/MT-09-legacy-fetch-payload.png) + +![Legacy Fetch response](../../../../output/playwright/pr-64/screenshots/MT-09-legacy-fetch-response.png) + +![Legacy mock HTTP response](../../../../output/playwright/pr-64/screenshots/MT-10-legacy-mock-http-response.png) + +![Legacy SSE messages](../../../../output/playwright/pr-64/screenshots/MT-11-legacy-sse-eventstream.png) + +![Legacy WebSocket messages](../../../../output/playwright/pr-64/screenshots/MT-11-legacy-websocket-messages.png) + +
+ +
+Recording, boundaries, failure, and cleanup + +![Native Session, HAR, Replay, and Trace](../../../../output/playwright/pr-64/screenshots/MT-12-native-session-har-replay-trace.png) + +![Legacy Session, HAR, Replay, and Trace](../../../../output/playwright/pr-64/screenshots/MT-12-legacy-session-har-replay-trace.png) + +![Native capability boundary assertions](../../../../output/playwright/pr-64/screenshots/MT-13-native-boundary-assertions.png) + +![Legacy failed-request lifecycle](../../../../output/playwright/pr-64/screenshots/MT-13-legacy-failed-request.png) + +![Native disposal and closed endpoints](../../../../output/playwright/pr-64/screenshots/MT-14-native-dispose-cleanup.png) + +![Legacy disposal and closed endpoints](../../../../output/playwright/pr-64/screenshots/MT-14-legacy-dispose-cleanup.png) + +
+ +## Structured evidence summary + +| Backend | Requests | Events | Bodies | Failed/body errors | HAR statuses | Replay dry/real | Dispose | +| ------- | -------: | -----: | -----: | -----------------: | --------------------------------------------- | --------------- | ------------------------- | +| Native | 9 | 24 | 6 | 1 / 0 | `200,200,201,200,0,200,0,0,200` | 5/5, 5/5 | discovery + socket closed | +| Legacy | 12 | 54 | 10 | 1 / 0 | `200,200,200,200,200,201,200,0,200,0,207,202` | 6/6, 6/6 | discovery + socket closed | + +The zero-status HAR entries are intentionally incomplete SSE, WebSocket, or +failed-request lifecycles. Their exact terminal-event assertions are recorded in +the finalize summaries. There were no response-body retrieval errors and no +mock-origin leaks. + +The HTTP/2 compatibility probe deserves separate emphasis. A non-empty h2c +response completed `requestWillBeSent -> responseReceived -> loadingFinished` +on Node 22.22.3. The same exact package and request reproduced an upstream +`node:internal/inspector/network_http2` crash on Node 24.16.0 and 26.8.1. +Consequently, commit `449d47d` changed the public capability matrix from an +open-ended minimum-version claim to the verified Node 22.20+ 22.x line. This is +consistent with Node's still-open +[network-inspection stabilization tracker](https://github.com/nodejs/node/issues/53946) +and avoids promising behavior that the runtime cannot safely deliver. + +## Reproduction + +The retained harnesses are +[`manual-evidence-server.mjs`](../../../../output/playwright/pr-64/manual-evidence-server.mjs), +[`manual-cli-evidence-server.mjs`](../../../../output/playwright/pr-64/manual-cli-evidence-server.mjs), +[`manual-cli-case.sh`](../../../../output/playwright/pr-64/manual-cli-case.sh), +[`manual-native-mock-conflict.mjs`](../../../../output/playwright/pr-64/manual-native-mock-conflict.mjs), +and +[`manual-native-http2-probe.mjs`](../../../../output/playwright/pr-64/manual-native-http2-probe.mjs). + +To reproduce: + +1. Check out product commit `449d47db89109e826eb0e7e0584777365eac3f9b`, + install from the lockfile, build, and pack `packages/network-debugger`. +2. Verify the tarball SHA-256 above, then install it into an empty consumer. +3. Set `NND_MANUAL_CONSUMER_ROOT`, `NND_MANUAL_PRODUCT_COMMIT`, and + `NND_MANUAL_TARBALL_SHA256`. Start the Native harness with + `--experimental-network-inspection`, or start the Legacy harness normally. +4. Open the printed control URL. Click one scenario at a time and inspect the + printed official DevTools URL. +5. Run the CLI evidence server's six visible cases and the three-version HTTP/2 + probe. Compare all retained files with `checksums.sha256`. + +## Scope + +- All business traffic was loopback-only. Public-network and production + endpoints were intentionally out of scope. +- Native limitations are visible results, not simulated features. On the + primary Node 24 run, request bodies, WebSocket frames, SSE messages, and + HTTP/2 are not advertised. Those detail-level claims are tested on Legacy or + on the verified Node 22 HTTP/2 runtime. +- This manual run covers macOS arm64. The PR quality workflow remains responsible + for the repeatable Linux, macOS, Windows, and supported-Node automation. diff --git a/docs/v2-implementation-plan.md b/docs/v2-implementation-plan.md index 64aa5a1..0605822 100644 --- a/docs/v2-implementation-plan.md +++ b/docs/v2-implementation-plan.md @@ -1,6 +1,6 @@ # Node Network Devtools v2 implementation plan -Status: in progress +Status: complete Started: 2026-08-28 @@ -409,3 +409,21 @@ checkbox above and additionally prove: quality workflow succeeds; it then downloads that workflow's sole artifact and verifies its SHA-256 and release tag before publishing. No real npm publish was performed as part of this implementation. +- 2026-08-28: PR #64 manual acceptance audit passed 14/14 cases against exact + packed product commit `449d47db89109e826eb0e7e0584777365eac3f9b` and tarball + SHA-256 + `e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac`. + Computer Use and Playwright exercised six public CLI cases, Native and Legacy + runtime selection, full standard discovery, official Chromium DevTools + request details, reload/reconnect, HTTPS, failed requests, Legacy mocks, SSE, + WebSocket lifecycle/frames, Session/HAR/Replay/Trace, capability boundaries, + and closed-endpoint disposal. The audit discovered that a non-empty HTTP/2 + response crashes Node 24.16 and 26.8 inside + `node:internal/inspector/network_http2`; commit `449d47d` therefore replaced + the open-ended Native capability claim with the verified Node 22.20+ 22.x + range. The exact-package probe proves a complete lifecycle and body on Node + 22.22.3 while the affected/future majors correctly withhold the capability. + The reviewable matrix, 26 privacy-reviewed screenshots, 17 structured + artifacts, five reproduction harnesses, test TLS inputs, and SHA-256 manifest + are retained in the + [PR #64 manual evidence report](test-evidence/v2/pr-64/README.md). diff --git a/output/playwright/pr-64/.gitignore b/output/playwright/pr-64/.gitignore new file mode 100644 index 0000000..9a42538 --- /dev/null +++ b/output/playwright/pr-64/.gitignore @@ -0,0 +1,16 @@ +.runtime/ +.playwright/ +.playwright-cli/ +consumer/ +package/ +videos/ +*.log +screenshots/MT-02-zero-code-native.png +screenshots/MT-04-native-standard-discovery.png +screenshots/MT-07-legacy-fallback-and-capabilities.png +screenshots/MT-08-legacy-standard-discovery.png +screenshots/MT-10-legacy-mock-fetch-no-origin-leak.png +screenshots/MT-10-legacy-mock-http-no-origin-leak.png +screenshots/MT-11-legacy-websocket-frames.png +!manual-localhost-cert.pem +!manual-localhost-key.pem diff --git a/output/playwright/pr-64/artifacts/cli-manual-results.json b/output/playwright/pr-64/artifacts/cli-manual-results.json new file mode 100644 index 0000000..2031f80 --- /dev/null +++ b/output/playwright/pr-64/artifacts/cli-manual-results.json @@ -0,0 +1,291 @@ +{ + "schemaVersion": 1, + "productCommit": "449d47db89109e826eb0e7e0584777365eac3f9b", + "tarballSha256": "e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac", + "cases": [ + { + "id": "doctor", + "title": "CLI version + Native doctor", + "status": "PASS", + "command": "nnd --version && node --experimental-network-inspection /node_modules/.bin/nnd doctor --json", + "actual": { + "version": "2.0.0", + "schemaVersion": 1, + "ok": true, + "nodeVersion": "24.16.0", + "packageVersion": "2.0.0", + "experimentalFlag": true, + "missingRequired": [], + "selection": { + "requested": "auto", + "selected": "native" + }, + "capabilities": { + "http": true, + "https": true, + "fetch": true, + "http2": false, + "responseBody": true, + "requestBody": false, + "websocketLifecycle": true, + "websocketFrames": false, + "sseMessages": false, + "initiator": true + } + } + }, + { + "id": "native", + "title": "Zero-code nnd dev · NATIVE", + "status": "PASS", + "command": "nnd dev --no-wait --mode native /packages/network-debugger/test/e2e/cli/fixtures/probe.mjs", + "actual": { + "type": "fixture-ready", + "preloadInjected": true, + "mode": "native", + "execArgv": [ + "--experimental-network-inspection", + "--inspect=127.0.0.1:0", + "--import=file:///node_modules/node-network-devtools/dist/register.mjs" + ], + "target": { + "id": "1c0c8e41-a808-4721-8aa6-6834bba2c010", + "type": "node", + "discoveryUrl": "http://127.0.0.1:60423/json/list", + "webSocketDebuggerUrl": "ws://127.0.0.1:60423/1c0c8e41-a808-4721-8aa6-6834bba2c010" + }, + "capabilities": { + "http": true, + "https": true, + "fetch": true, + "http2": false, + "responseBody": true, + "requestBody": false, + "websocketLifecycle": true, + "websocketFrames": false, + "sseMessages": false, + "initiator": true + } + } + }, + { + "id": "legacy", + "title": "Zero-code nnd dev · LEGACY", + "status": "PASS", + "command": "nnd dev --no-wait --mode legacy /packages/network-debugger/test/e2e/cli/fixtures/probe.mjs", + "actual": { + "type": "fixture-ready", + "preloadInjected": true, + "mode": "legacy", + "execArgv": [ + "--import=file:///node_modules/node-network-devtools/dist/register.mjs" + ], + "target": { + "id": "node-network-devtools-a426be27-20c0-4b1a-b552-be1414423c06", + "type": "node", + "discoveryUrl": "http://127.0.0.1:60436/json/list", + "webSocketDebuggerUrl": "ws://127.0.0.1:60436/devtools/page/node-network-devtools-a426be27-20c0-4b1a-b552-be1414423c06" + }, + "capabilities": { + "http": true, + "https": true, + "fetch": true, + "http2": false, + "responseBody": true, + "requestBody": true, + "websocketLifecycle": true, + "websocketFrames": true, + "sseMessages": true, + "initiator": true + } + } + }, + { + "id": "conflict", + "title": "Forced Native + Mock conflict", + "status": "PASS", + "command": "node /manual-native-mock-conflict.mjs", + "actual": { + "name": "RuntimeRegistrationError", + "code": "NND_NATIVE_MOCK_CONFLICT", + "message": "Request/response mocking is available only with the Legacy backend.", + "details": { + "mode": "native", + "mockRuleCount": 1, + "hint": "Use mode: \"legacy\" or mode: \"auto\" when legacy.mock rules are configured." + } + } + }, + { + "id": "replay", + "title": "Public nnd replay · dry + real", + "status": "PASS", + "command": "nnd replay --dry-run --json /artifacts/cli-replay-fixture.har && nnd replay --json /artifacts/cli-replay-fixture.har", + "actual": { + "dryRun": { + "dryRun": true, + "startedAt": "2026-08-28T08:00:40.372Z", + "completedAt": "2026-08-28T08:00:40.374Z", + "requests": [ + { + "index": 0, + "requestId": "cli-replay-get", + "method": "GET", + "url": "http://127.0.0.1:60344/replay-get?case=cli-public-replay", + "headers": {} + }, + { + "index": 1, + "requestId": "cli-replay-post", + "method": "POST", + "url": "http://127.0.0.1:60344/replay-post?case=cli-public-replay", + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "body": "cli-replay-request-body" + } + ], + "results": [ + { + "request": { + "index": 0, + "requestId": "cli-replay-get", + "method": "GET", + "url": "http://127.0.0.1:60344/replay-get?case=cli-public-replay", + "headers": {} + }, + "dryRun": true, + "ok": true, + "durationMs": 0 + }, + { + "request": { + "index": 1, + "requestId": "cli-replay-post", + "method": "POST", + "url": "http://127.0.0.1:60344/replay-post?case=cli-public-replay", + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "body": "cli-replay-request-body" + }, + "dryRun": true, + "ok": true, + "durationMs": 0 + } + ], + "succeeded": 2, + "failed": 0 + }, + "real": { + "dryRun": false, + "startedAt": "2026-08-28T08:00:40.450Z", + "completedAt": "2026-08-28T08:00:40.463Z", + "requests": [ + { + "index": 0, + "requestId": "cli-replay-get", + "method": "GET", + "url": "http://127.0.0.1:60344/replay-get?case=cli-public-replay", + "headers": {} + }, + { + "index": 1, + "requestId": "cli-replay-post", + "method": "POST", + "url": "http://127.0.0.1:60344/replay-post?case=cli-public-replay", + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "body": "cli-replay-request-body" + } + ], + "results": [ + { + "request": { + "index": 0, + "requestId": "cli-replay-get", + "method": "GET", + "url": "http://127.0.0.1:60344/replay-get?case=cli-public-replay", + "headers": {} + }, + "dryRun": false, + "ok": true, + "status": 200, + "statusText": "OK", + "responseHeaders": { + "connection": "keep-alive", + "content-type": "text/plain; charset=utf-8", + "date": "Fri, 28 Aug 2026 08:00:40 GMT", + "keep-alive": "timeout=5", + "transfer-encoding": "chunked" + }, + "durationMs": 8.241875000000007 + }, + { + "request": { + "index": 1, + "requestId": "cli-replay-post", + "method": "POST", + "url": "http://127.0.0.1:60344/replay-post?case=cli-public-replay", + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "body": "cli-replay-request-body" + }, + "dryRun": false, + "ok": true, + "status": 201, + "statusText": "Created", + "responseHeaders": { + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 28 Aug 2026 08:00:40 GMT", + "keep-alive": "timeout=5", + "transfer-encoding": "chunked" + }, + "durationMs": 3.082583999999997 + } + ], + "succeeded": 2, + "failed": 0 + }, + "originRequests": [ + { + "method": "GET", + "url": "/replay-get?case=cli-public-replay", + "body": "" + }, + { + "method": "POST", + "url": "/replay-post?case=cli-public-replay", + "body": "cli-replay-request-body" + } + ] + } + }, + { + "id": "open", + "title": "nnd dev --open · authoritative target", + "status": "PASS", + "command": "nnd dev --open --mode native /packages/network-debugger/test/e2e/cli/fixtures/probe.mjs", + "actual": { + "preloadInjected": true, + "mode": "native", + "inspectWait": "--inspect-wait=127.0.0.1:0", + "target": { + "id": "7e52e8aa-c81d-45c8-ad04-26d18b69cbca", + "type": "node", + "discoveryUrl": "http://127.0.0.1:60572/json/list", + "webSocketDebuggerUrl": "ws://127.0.0.1:60572/7e52e8aa-c81d-45c8-ad04-26d18b69cbca" + }, + "openedExactlyOnce": true, + "openedFrontend": { + "frontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:60572/7e52e8aa-c81d-45c8-ad04-26d18b69cbca", + "webSocketDebuggerUrl": "ws://127.0.0.1:60572/7e52e8aa-c81d-45c8-ad04-26d18b69cbca" + }, + "launcherVerification": "OS browser spawn redirected to an exact-target CDP verifier" + } + } + ] +} diff --git a/output/playwright/pr-64/artifacts/cli-replay-fixture.har b/output/playwright/pr-64/artifacts/cli-replay-fixture.har new file mode 100644 index 0000000..9b9b088 --- /dev/null +++ b/output/playwright/pr-64/artifacts/cli-replay-fixture.har @@ -0,0 +1,63 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "PR #64 manual evidence", + "version": "1" + }, + "pages": [], + "entries": [ + { + "request": { + "method": "GET", + "url": "http://127.0.0.1:60344/replay-get?case=cli-public-replay", + "httpVersion": "HTTP/1.1", + "headers": [], + "queryString": [ + { + "name": "case", + "value": "cli-public-replay" + } + ], + "cookies": [], + "headersSize": -1, + "bodySize": 0 + }, + "response": {}, + "cache": {}, + "timings": {}, + "_requestId": "cli-replay-get" + }, + { + "request": { + "method": "POST", + "url": "http://127.0.0.1:60344/replay-post?case=cli-public-replay", + "httpVersion": "HTTP/1.1", + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + } + ], + "queryString": [ + { + "name": "case", + "value": "cli-public-replay" + } + ], + "cookies": [], + "headersSize": -1, + "bodySize": 22, + "postData": { + "mimeType": "text/plain; charset=utf-8", + "text": "cli-replay-request-body" + } + }, + "response": {}, + "cache": {}, + "timings": {}, + "_requestId": "cli-replay-post" + } + ] + } +} diff --git a/output/playwright/pr-64/artifacts/legacy-dispose-summary.json b/output/playwright/pr-64/artifacts/legacy-dispose-summary.json new file mode 100644 index 0000000..7f17c58 --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-dispose-summary.json @@ -0,0 +1,5 @@ +{ + "registrationState": "disposed", + "discoveryClosed": true, + "targetSocketClosed": true +} diff --git a/output/playwright/pr-64/artifacts/legacy-events.ndjson b/output/playwright/pr-64/artifacts/legacy-events.ndjson new file mode 100644 index 0000000..ffec96f --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-events.ndjson @@ -0,0 +1,54 @@ +{"schemaVersion":1,"sequence":1,"recordedAt":"2026-08-28T07:50:35.526Z","method":"Debugger.scriptParsed","params":{"url":"file:///manual-evidence-server.mjs","scriptLanguage":"JavaScript","embedderName":"file:///manual-evidence-server.mjs","scriptId":"1","sourceMapURL":"","hasSourceURL":false}} +{"schemaVersion":1,"sequence":2,"recordedAt":"2026-08-28T07:50:35.528Z","method":"Network.requestWillBeSent","params":{"requestId":"0cc5f65a-40ac-4130-9be9-3f41d81ff929","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59430/json/list","request":{"url":"http://127.0.0.1:59430/json/list","method":"GET","headers":{},"initialPriority":"High","mixedContentType":"none"},"timestamp":0.009,"wallTime":1787903435.508,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":3,"functionName":"","lineNumber":391,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":5,"functionName":"process.processTicksAndRejections","lineNumber":104,"url":"node:internal/process/task_queues"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":3,"recordedAt":"2026-08-28T07:50:35.529Z","method":"Network.requestWillBeSent","params":{"requestId":"9405f647-edce-4fb1-a015-9e7b89878de5","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59430/json/version","request":{"url":"http://127.0.0.1:59430/json/version","method":"GET","headers":{},"initialPriority":"High","mixedContentType":"none"},"timestamp":0.011,"wallTime":1787903435.512,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":3,"functionName":"","lineNumber":392,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":5,"functionName":"process.processTicksAndRejections","lineNumber":104,"url":"node:internal/process/task_queues"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":4,"recordedAt":"2026-08-28T07:50:35.530Z","method":"Network.requestWillBeSent","params":{"requestId":"9e61ccb6-be11-43f9-8355-2d64a4cb6e60","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59430/json/protocol","request":{"url":"http://127.0.0.1:59430/json/protocol","method":"GET","headers":{},"initialPriority":"High","mixedContentType":"none"},"timestamp":0.011,"wallTime":1787903435.512,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":3,"functionName":"","lineNumber":393,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":5,"functionName":"process.processTicksAndRejections","lineNumber":104,"url":"node:internal/process/task_queues"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":5,"recordedAt":"2026-08-28T07:50:35.530Z","method":"Network.responseReceived","params":{"requestId":"0cc5f65a-40ac-4130-9be9-3f41d81ff929","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":0.017,"type":"Other","response":{"url":"http://127.0.0.1:59430/json/list","status":200,"statusText":"OK","headers":{"access-control-allow-origin":"*","cache-control":"no-store","connection":"keep-alive","content-type":"application/json; charset=utf-8","date":"Fri, 28 Aug 2026 07:50:35 GMT","keep-alive":"timeout=5","transfer-encoding":"chunked"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":6,"recordedAt":"2026-08-28T07:50:35.530Z","method":"Network.dataReceived","params":{"requestId":"0cc5f65a-40ac-4130-9be9-3f41d81ff929","timestamp":0.018,"dataLength":821,"encodedDataLength":821}} +{"schemaVersion":1,"sequence":7,"recordedAt":"2026-08-28T07:50:35.531Z","method":"Network.loadingFinished","params":{"requestId":"0cc5f65a-40ac-4130-9be9-3f41d81ff929","timestamp":0.018,"encodedDataLength":821}} +{"schemaVersion":1,"sequence":8,"recordedAt":"2026-08-28T07:50:35.536Z","method":"Network.responseReceived","params":{"requestId":"9405f647-edce-4fb1-a015-9e7b89878de5","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":0.019,"type":"Other","response":{"url":"http://127.0.0.1:59430/json/version","status":200,"statusText":"OK","headers":{"access-control-allow-origin":"*","cache-control":"no-store","connection":"keep-alive","content-type":"application/json; charset=utf-8","date":"Fri, 28 Aug 2026 07:50:35 GMT","keep-alive":"timeout=5","transfer-encoding":"chunked"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":9,"recordedAt":"2026-08-28T07:50:35.537Z","method":"Network.dataReceived","params":{"requestId":"9405f647-edce-4fb1-a015-9e7b89878de5","timestamp":0.019,"dataLength":248,"encodedDataLength":248}} +{"schemaVersion":1,"sequence":10,"recordedAt":"2026-08-28T07:50:35.537Z","method":"Network.loadingFinished","params":{"requestId":"9405f647-edce-4fb1-a015-9e7b89878de5","timestamp":0.019,"encodedDataLength":248}} +{"schemaVersion":1,"sequence":11,"recordedAt":"2026-08-28T07:50:35.538Z","method":"Network.responseReceived","params":{"requestId":"9e61ccb6-be11-43f9-8355-2d64a4cb6e60","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":0.019,"type":"Other","response":{"url":"http://127.0.0.1:59430/json/protocol","status":200,"statusText":"OK","headers":{"access-control-allow-origin":"*","cache-control":"no-store","connection":"keep-alive","content-type":"application/json; charset=utf-8","date":"Fri, 28 Aug 2026 07:50:35 GMT","keep-alive":"timeout=5","transfer-encoding":"chunked"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":12,"recordedAt":"2026-08-28T07:50:35.539Z","method":"Network.dataReceived","params":{"requestId":"9e61ccb6-be11-43f9-8355-2d64a4cb6e60","timestamp":0.019,"dataLength":1323,"encodedDataLength":1323}} +{"schemaVersion":1,"sequence":13,"recordedAt":"2026-08-28T07:50:35.539Z","method":"Network.loadingFinished","params":{"requestId":"9e61ccb6-be11-43f9-8355-2d64a4cb6e60","timestamp":0.019,"encodedDataLength":1323}} +{"schemaVersion":1,"sequence":14,"recordedAt":"2026-08-28T07:51:15.497Z","method":"Debugger.scriptParsed","params":{"url":"file:///manual-evidence-server.mjs","scriptLanguage":"JavaScript","embedderName":"file:///manual-evidence-server.mjs","scriptId":"1","sourceMapURL":"","hasSourceURL":false}} +{"schemaVersion":1,"sequence":15,"recordedAt":"2026-08-28T07:51:54.793Z","method":"Network.requestWillBeSent","params":{"requestId":"58134218-34a0-4b54-a2ab-e1fd65450177","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/get?token=legacy-http-get-01","request":{"url":"http://127.0.0.1:59428/get?token=legacy-http-get-01","method":"GET","headers":{"host":"127.0.0.1:59428"},"initialPriority":"High","mixedContentType":"none"},"timestamp":79.291,"wallTime":1787903514.791,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":45,"functionName":"","lineNumber":114,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":0,"functionName":"new Promise","lineNumber":0,"url":""},{"columnNumber":10,"functionName":"httpRequest","lineNumber":112,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":22,"functionName":"runScenario","lineNumber":494,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":16,"recordedAt":"2026-08-28T07:51:54.796Z","method":"Network.responseReceived","params":{"requestId":"58134218-34a0-4b54-a2ab-e1fd65450177","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":79.292,"type":"Other","response":{"url":"http://127.0.0.1:59428/get?token=legacy-http-get-01","status":200,"statusText":"OK","headers":{"content-type":"text/plain; charset=utf-8","content-length":"38","x-manual-case":"legacy-http-get-01","date":"Fri, 28 Aug 2026 07:51:54 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"text/plain"}}} +{"schemaVersion":1,"sequence":17,"recordedAt":"2026-08-28T07:51:54.797Z","method":"Network.dataReceived","params":{"requestId":"58134218-34a0-4b54-a2ab-e1fd65450177","timestamp":79.293,"dataLength":38,"encodedDataLength":38}} +{"schemaVersion":1,"sequence":18,"recordedAt":"2026-08-28T07:51:54.798Z","method":"Network.loadingFinished","params":{"requestId":"58134218-34a0-4b54-a2ab-e1fd65450177","timestamp":79.293,"encodedDataLength":38}} +{"schemaVersion":1,"sequence":19,"recordedAt":"2026-08-28T07:51:58.752Z","method":"Network.requestWillBeSent","params":{"requestId":"679ed0e5-ef59-4d2e-89ab-391343c82c31","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"https://127.0.0.1:59429/secure-get?token=legacy-https-get-02","request":{"url":"https://127.0.0.1:59429/secure-get?token=legacy-https-get-02","method":"GET","headers":{"host":"127.0.0.1:59429"},"initialPriority":"High","mixedContentType":"none"},"timestamp":83.251,"wallTime":1787903518.749,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":45,"functionName":"","lineNumber":114,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":0,"functionName":"new Promise","lineNumber":0,"url":""},{"columnNumber":10,"functionName":"httpRequest","lineNumber":112,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":22,"functionName":"runScenario","lineNumber":497,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":20,"recordedAt":"2026-08-28T07:51:58.760Z","method":"Network.responseReceived","params":{"requestId":"679ed0e5-ef59-4d2e-89ab-391343c82c31","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":83.257,"type":"Other","response":{"url":"https://127.0.0.1:59429/secure-get?token=legacy-https-get-02","status":200,"statusText":"OK","headers":{"content-type":"text/plain; charset=utf-8","content-length":"41","x-manual-case":"legacy-https-get-02","date":"Fri, 28 Aug 2026 07:51:58 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"text/plain"}}} +{"schemaVersion":1,"sequence":21,"recordedAt":"2026-08-28T07:51:58.762Z","method":"Network.dataReceived","params":{"requestId":"679ed0e5-ef59-4d2e-89ab-391343c82c31","timestamp":83.257,"dataLength":41,"encodedDataLength":41}} +{"schemaVersion":1,"sequence":22,"recordedAt":"2026-08-28T07:51:58.763Z","method":"Network.loadingFinished","params":{"requestId":"679ed0e5-ef59-4d2e-89ab-391343c82c31","timestamp":83.257,"encodedDataLength":41}} +{"schemaVersion":1,"sequence":23,"recordedAt":"2026-08-28T07:52:02.894Z","method":"Network.requestWillBeSent","params":{"requestId":"3e47e0b7-987b-463c-aa0e-9765fc6d7e11","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/post?token=legacy-fetch-post-03","request":{"url":"http://127.0.0.1:59428/post?token=legacy-fetch-post-03","method":"POST","headers":{"content-type":"text/plain; charset=utf-8","x-manual-case":"legacy-fetch-post-03"},"initialPriority":"High","mixedContentType":"none","postData":"manual-request-body:legacy-fetch-post-03","hasPostData":true},"timestamp":87.391,"wallTime":1787903522.892,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":30,"functionName":"runScenario","lineNumber":502,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":24,"recordedAt":"2026-08-28T07:52:02.900Z","method":"Network.responseReceived","params":{"requestId":"3e47e0b7-987b-463c-aa0e-9765fc6d7e11","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":87.396,"type":"Other","response":{"url":"http://127.0.0.1:59428/post?token=legacy-fetch-post-03","status":201,"statusText":"Created","headers":{"connection":"keep-alive","content-length":"89","content-type":"application/json; charset=utf-8","date":"Fri, 28 Aug 2026 07:52:02 GMT","keep-alive":"timeout=5","x-manual-case":"legacy-fetch-post-03"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":25,"recordedAt":"2026-08-28T07:52:02.901Z","method":"Network.dataReceived","params":{"requestId":"3e47e0b7-987b-463c-aa0e-9765fc6d7e11","timestamp":87.396,"dataLength":89,"encodedDataLength":89}} +{"schemaVersion":1,"sequence":26,"recordedAt":"2026-08-28T07:52:02.902Z","method":"Network.loadingFinished","params":{"requestId":"3e47e0b7-987b-463c-aa0e-9765fc6d7e11","timestamp":87.397,"encodedDataLength":89}} +{"schemaVersion":1,"sequence":27,"recordedAt":"2026-08-28T07:52:06.968Z","method":"Network.requestWillBeSent","params":{"requestId":"1b1612b8-6e03-4483-8d4f-74c232a36835","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/trace?token=legacy-trace-04","request":{"url":"http://127.0.0.1:59428/trace?token=legacy-trace-04","method":"GET","headers":{"traceparent":"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01","tracestate":"vendor=manual-pr64","host":"127.0.0.1:59428"},"initialPriority":"High","mixedContentType":"none"},"timestamp":91.466,"wallTime":1787903526.966,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":45,"functionName":"","lineNumber":114,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":0,"functionName":"new Promise","lineNumber":0,"url":""},{"columnNumber":10,"functionName":"httpRequest","lineNumber":112,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":22,"functionName":"runScenario","lineNumber":538,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":28,"recordedAt":"2026-08-28T07:52:06.971Z","method":"Network.responseReceived","params":{"requestId":"1b1612b8-6e03-4483-8d4f-74c232a36835","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":91.468,"type":"Other","response":{"url":"http://127.0.0.1:59428/trace?token=legacy-trace-04","status":200,"statusText":"OK","headers":{"content-type":"application/json; charset=utf-8","content-length":"133","date":"Fri, 28 Aug 2026 07:52:06 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":29,"recordedAt":"2026-08-28T07:52:06.971Z","method":"Network.dataReceived","params":{"requestId":"1b1612b8-6e03-4483-8d4f-74c232a36835","timestamp":91.468,"dataLength":133,"encodedDataLength":133}} +{"schemaVersion":1,"sequence":30,"recordedAt":"2026-08-28T07:52:06.972Z","method":"Network.loadingFinished","params":{"requestId":"1b1612b8-6e03-4483-8d4f-74c232a36835","timestamp":91.468,"encodedDataLength":133}} +{"schemaVersion":1,"sequence":31,"recordedAt":"2026-08-28T07:52:10.934Z","method":"Network.requestWillBeSent","params":{"requestId":"25379421-e6bd-43f0-92a2-eb9f2345a4ac","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/reset?token=legacy-failed-05","request":{"url":"http://127.0.0.1:59428/reset?token=legacy-failed-05","method":"GET","headers":{"host":"127.0.0.1:59428"},"initialPriority":"High","mixedContentType":"none"},"timestamp":95.432,"wallTime":1787903530.932,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":45,"functionName":"","lineNumber":114,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":0,"functionName":"new Promise","lineNumber":0,"url":""},{"columnNumber":10,"functionName":"httpRequest","lineNumber":112,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":15,"functionName":"runScenario","lineNumber":546,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":32,"recordedAt":"2026-08-28T07:52:10.936Z","method":"Network.loadingFailed","params":{"requestId":"25379421-e6bd-43f0-92a2-eb9f2345a4ac","timestamp":95.433,"type":"Fetch","errorText":"socket hang up","canceled":false}} +{"schemaVersion":1,"sequence":33,"recordedAt":"2026-08-28T07:52:14.934Z","method":"Network.requestWillBeSent","params":{"requestId":"21870c2f-ae5c-45b6-a61b-f2827cf4b8fe","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/sse?token=legacy-sse-06","request":{"url":"http://127.0.0.1:59428/sse?token=legacy-sse-06","method":"GET","headers":{},"initialPriority":"High","mixedContentType":"none"},"timestamp":99.432,"wallTime":1787903534.932,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":30,"functionName":"runScenario","lineNumber":559,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":34,"recordedAt":"2026-08-28T07:52:14.938Z","method":"Network.responseReceived","params":{"requestId":"21870c2f-ae5c-45b6-a61b-f2827cf4b8fe","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":99.435,"type":"EventSource","response":{"url":"http://127.0.0.1:59428/sse?token=legacy-sse-06","status":200,"statusText":"OK","headers":{"cache-control":"no-cache","connection":"keep-alive","content-length":"81","content-type":"text/event-stream; charset=utf-8","date":"Fri, 28 Aug 2026 07:52:14 GMT","keep-alive":"timeout=5"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"text/event-stream"}}} +{"schemaVersion":1,"sequence":35,"recordedAt":"2026-08-28T07:52:14.939Z","method":"Network.eventSourceMessageReceived","params":{"requestId":"21870c2f-ae5c-45b6-a61b-f2827cf4b8fe","timestamp":99.435,"eventName":"manual","eventId":"1","data":"sse-legacy-sse-06"}} +{"schemaVersion":1,"sequence":36,"recordedAt":"2026-08-28T07:52:14.940Z","method":"Network.eventSourceMessageReceived","params":{"requestId":"21870c2f-ae5c-45b6-a61b-f2827cf4b8fe","timestamp":99.435,"eventName":"message","eventId":"2","data":"complete-legacy-sse-06"}} +{"schemaVersion":1,"sequence":37,"recordedAt":"2026-08-28T07:52:14.940Z","method":"Network.dataReceived","params":{"requestId":"21870c2f-ae5c-45b6-a61b-f2827cf4b8fe","timestamp":99.435,"dataLength":81,"encodedDataLength":81}} +{"schemaVersion":1,"sequence":38,"recordedAt":"2026-08-28T07:52:14.941Z","method":"Network.loadingFinished","params":{"requestId":"21870c2f-ae5c-45b6-a61b-f2827cf4b8fe","timestamp":99.435,"encodedDataLength":81}} +{"schemaVersion":1,"sequence":39,"recordedAt":"2026-08-28T07:52:18.995Z","method":"Network.webSocketCreated","params":{"url":"ws://127.0.0.1:59428/websocket?token=legacy-websocket-07","initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":20,"functionName":"","lineNumber":138,"url":"file:///manual-evidence-server.mjs"},{"columnNumber":0,"functionName":"new Promise","lineNumber":0,"url":""},{"columnNumber":10,"functionName":"webSocketRoundTrip","lineNumber":137,"url":"file:///manual-evidence-server.mjs"},{"columnNumber":92,"functionName":"runScenario","lineNumber":565,"url":"file:///manual-evidence-server.mjs"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8"}} +{"schemaVersion":1,"sequence":40,"recordedAt":"2026-08-28T07:52:18.998Z","method":"Network.webSocketWillSendHandshakeRequest","params":{"wallTime":1787903538.994,"timestamp":103.493,"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","request":{"headers":{"sec-websocket-version":13,"sec-websocket-key":"zt2WioYgquUhnot+SKWt1w==","connection":"Upgrade","upgrade":"websocket","sec-websocket-extensions":"permessage-deflate; client_max_window_bits","host":"127.0.0.1:59428"}}}} +{"schemaVersion":1,"sequence":41,"recordedAt":"2026-08-28T07:52:18.999Z","method":"Network.webSocketHandshakeResponseReceived","params":{"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","response":{"headers":{"Upgrade":"websocket","Connection":"Upgrade","Sec-WebSocket-Accept":"V0zn5isdT7rrXXw2VyDyJ+iftJE="},"headersText":"HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: V0zn5isdT7rrXXw2VyDyJ+iftJE=","status":101,"statusText":"Switching Protocols","requestHeadersText":"GET ws://127.0.0.1:59428/websocket?token=legacy-websocket-07 HTTP/1.1\r\nsec-websocket-version: 13\r\nsec-websocket-key: zt2WioYgquUhnot+SKWt1w==\r\nconnection: Upgrade\r\nupgrade: websocket\r\nsec-websocket-extensions: permessage-deflate; client_max_window_bits\r\nhost: 127.0.0.1:59428","requestHeaders":{"sec-websocket-version":"13","sec-websocket-key":"zt2WioYgquUhnot+SKWt1w==","connection":"Upgrade","upgrade":"websocket","sec-websocket-extensions":"permessage-deflate; client_max_window_bits","host":"127.0.0.1:59428"}},"timestamp":103.493}} +{"schemaVersion":1,"sequence":42,"recordedAt":"2026-08-28T07:52:19.000Z","method":"Network.webSocketFrameSent","params":{"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","response":{"payloadData":"client-text:legacy-websocket-07","opcode":1,"mask":true},"timestamp":103.494}} +{"schemaVersion":1,"sequence":43,"recordedAt":"2026-08-28T07:52:19.001Z","method":"Network.webSocketFrameSent","params":{"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","response":{"payloadData":"AAECf4D+/w==","opcode":2,"mask":true},"timestamp":103.494}} +{"schemaVersion":1,"sequence":44,"recordedAt":"2026-08-28T07:52:19.002Z","method":"Network.webSocketFrameReceived","params":{"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","response":{"payloadData":"client-text:legacy-websocket-07","opcode":1,"mask":false},"timestamp":103.494}} +{"schemaVersion":1,"sequence":45,"recordedAt":"2026-08-28T07:52:19.003Z","method":"Network.webSocketFrameReceived","params":{"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","response":{"payloadData":"AAECf4D+/w==","opcode":2,"mask":false},"timestamp":103.495}} +{"schemaVersion":1,"sequence":46,"recordedAt":"2026-08-28T07:52:19.003Z","method":"Network.webSocketClosed","params":{"requestId":"ef2b1aa4-f871-4c37-a398-91a29ed42bd8","timestamp":103.495}} +{"schemaVersion":1,"sequence":47,"recordedAt":"2026-08-28T07:52:22.993Z","method":"Network.requestWillBeSent","params":{"requestId":"97ab50a1-7dc0-4698-8eb6-6c585c1b0800","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08","request":{"url":"http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08","method":"GET","headers":{"host":"127.0.0.1:59428"},"initialPriority":"High","mixedContentType":"none"},"timestamp":107.491,"wallTime":1787903542.991,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":45,"functionName":"","lineNumber":114,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":0,"functionName":"new Promise","lineNumber":0,"url":""},{"columnNumber":10,"functionName":"httpRequest","lineNumber":112,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":22,"functionName":"runScenario","lineNumber":516,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":48,"recordedAt":"2026-08-28T07:52:22.994Z","method":"Network.responseReceived","params":{"requestId":"97ab50a1-7dc0-4698-8eb6-6c585c1b0800","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":107.491,"type":"Other","response":{"url":"http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08","status":207,"statusText":"Manual Mock HTTP","headers":{"content-type":"application/json; charset=utf-8","x-nnd-mock":"http","content-length":"67"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":49,"recordedAt":"2026-08-28T07:52:22.995Z","method":"Network.dataReceived","params":{"requestId":"97ab50a1-7dc0-4698-8eb6-6c585c1b0800","timestamp":107.491,"dataLength":67,"encodedDataLength":67}} +{"schemaVersion":1,"sequence":50,"recordedAt":"2026-08-28T07:52:22.996Z","method":"Network.loadingFinished","params":{"requestId":"97ab50a1-7dc0-4698-8eb6-6c585c1b0800","timestamp":107.491,"encodedDataLength":67}} +{"schemaVersion":1,"sequence":51,"recordedAt":"2026-08-28T07:52:26.992Z","method":"Network.requestWillBeSent","params":{"requestId":"a85e4f7f-a238-44c7-866e-2b7cfb325da1","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","documentURL":"http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09","request":{"url":"http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09","method":"POST","headers":{"content-type":"text/plain","x-manual-mock":"fetch"},"initialPriority":"High","mixedContentType":"none","postData":"must-not-reach-origin:legacy-mock-fetch-09","hasPostData":true},"timestamp":111.49,"wallTime":1787903546.991,"initiator":{"type":"script","stack":{"callFrames":[{"columnNumber":30,"functionName":"runScenario","lineNumber":520,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":41,"functionName":"","lineNumber":983,"url":"file:///manual-evidence-server.mjs","scriptId":"1"},{"columnNumber":28,"functionName":"Server.emit","lineNumber":509,"url":"node:events"},{"columnNumber":12,"functionName":"parserOnIncoming","lineNumber":1226,"url":"node:_http_server"},{"columnNumber":17,"functionName":"HTTPParser.parserOnHeadersComplete","lineNumber":125,"url":"node:_http_common"}]}},"type":"Fetch"}} +{"schemaVersion":1,"sequence":52,"recordedAt":"2026-08-28T07:52:26.994Z","method":"Network.responseReceived","params":{"requestId":"a85e4f7f-a238-44c7-866e-2b7cfb325da1","frameId":"nnd.legacy.frame","loaderId":"nnd.legacy.loader","timestamp":111.491,"type":"Other","response":{"url":"http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09","status":202,"statusText":"Manual Mock Fetch","headers":{"content-type":"application/json; charset=utf-8","x-nnd-mock":"fetch"},"connectionReused":false,"encodedDataLength":0,"charset":"utf-8","mimeType":"application/json"}}} +{"schemaVersion":1,"sequence":53,"recordedAt":"2026-08-28T07:52:26.994Z","method":"Network.dataReceived","params":{"requestId":"a85e4f7f-a238-44c7-866e-2b7cfb325da1","timestamp":111.491,"dataLength":68,"encodedDataLength":68}} +{"schemaVersion":1,"sequence":54,"recordedAt":"2026-08-28T07:52:26.995Z","method":"Network.loadingFinished","params":{"requestId":"a85e4f7f-a238-44c7-866e-2b7cfb325da1","timestamp":111.491,"encodedDataLength":68}} diff --git a/output/playwright/pr-64/artifacts/legacy-finalize-summary.json b/output/playwright/pr-64/artifacts/legacy-finalize-summary.json new file mode 100644 index 0000000..cf339f5 --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-finalize-summary.json @@ -0,0 +1,90 @@ +{ + "sessionDirectory": "/.runtime/legacy-session-1787903435249", + "manualAssertions": { + "passed": true, + "discovery": { + "list": { + "ok": true, + "targetCount": 1, + "targetIdMatches": true + }, + "version": { + "ok": true, + "browser": "node-network-devtools/2", + "protocolVersion": "1.3" + }, + "protocol": { + "ok": true, + "domainCount": 4, + "networkDomain": true, + "networkCommandCount": 7, + "networkEventCount": 12 + } + }, + "failedLifecycle": { + "requestId": "25379421-e6bd-43f0-92a2-eb9f2345a4ac", + "requestWillBeSent": 1, + "responseReceived": 0, + "loadingFinished": 0, + "loadingFailed": 1 + }, + "webSocketBoundary": { + "lifecycleCreated": 1, + "lifecycleClosed": 1, + "framesSent": 2, + "framesReceived": 2, + "expectedFrameCapture": true + }, + "sseBoundary": { + "requestCaptured": true, + "messageEvents": 2, + "expectedMessageCapture": true + }, + "traceBoundary": { + "explicitTraceRequests": 1, + "explicitTracePreserved": true, + "untracedBusinessRequests": 5, + "untracedHeadersAbsent": true + } + }, + "manifest": { + "schemaVersion": 1, + "state": "completed", + "stats": { + "eventCount": 54, + "requestCount": 12, + "bodyCount": 10, + "bodyErrorCount": 0, + "failedRequestCount": 1 + }, + "issues": [], + "traceContexts": [ + { + "requestId": "1b1612b8-6e03-4483-8d4f-74c232a36835", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "tracestate": "vendor=manual-pr64" + } + ] + }, + "har": { + "version": "1.2", + "creator": { + "name": "node-network-devtools", + "version": "2" + }, + "entries": 12, + "statuses": [200, 200, 200, 200, 200, 201, 200, 0, 200, 0, 207, 202], + "replayableEntries": 6 + }, + "replay": { + "dryRun": true, + "dryRunRequests": 6, + "dryRunPassed": true, + "realRequests": 6, + "realPassed": true + }, + "originLeakCount": 0 +} diff --git a/output/playwright/pr-64/artifacts/legacy-replayable.har b/output/playwright/pr-64/artifacts/legacy-replayable.har new file mode 100644 index 0000000..69afa0c --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-replayable.har @@ -0,0 +1,458 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "node-network-devtools", + "version": "2" + }, + "pages": [], + "entries": [ + { + "startedDateTime": "2026-08-28T07:51:54.791Z", + "time": 2.0000000000095497, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/get?token=legacy-http-get-01", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-http-get-01" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "x-manual-case", + "value": "legacy-http-get-01" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:51:54 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 38, + "mimeType": "text/plain", + "text": "manual-get-response:legacy-http-get-01" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 38 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 1.0000000000047748, + "receive": 1.0000000000047748, + "ssl": -1 + }, + "_requestId": "58134218-34a0-4b54-a2ab-e1fd65450177" + }, + { + "startedDateTime": "2026-08-28T07:52:02.892Z", + "time": 6.000000000000227, + "request": { + "method": "POST", + "url": "http://127.0.0.1:59428/post?token=legacy-fetch-post-03", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "x-manual-case", + "value": "legacy-fetch-post-03" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-fetch-post-03" + } + ], + "postData": { + "mimeType": "text/plain; charset=utf-8", + "text": "manual-request-body:legacy-fetch-post-03" + }, + "headersSize": -1, + "bodySize": 40 + }, + "response": { + "status": 201, + "statusText": "Created", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-length", + "value": "89" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:52:02 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + }, + { + "name": "x-manual-case", + "value": "legacy-fetch-post-03" + } + ], + "content": { + "size": 89, + "mimeType": "application/json", + "text": "{\"token\":\"legacy-fetch-post-03\",\"requestBody\":\"manual-request-body:legacy-fetch-post-03\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 89 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 4.9999999999954525, + "receive": 1.0000000000047748, + "ssl": -1 + }, + "_requestId": "3e47e0b7-987b-463c-aa0e-9765fc6d7e11" + }, + { + "startedDateTime": "2026-08-28T07:52:06.966Z", + "time": 2.0000000000095497, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/trace?token=legacy-trace-04", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "traceparent", + "value": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" + }, + { + "name": "tracestate", + "value": "vendor=manual-pr64" + }, + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-trace-04" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "133" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:52:06 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 133, + "mimeType": "application/json", + "text": "{\"token\":\"legacy-trace-04\",\"traceparent\":\"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\"tracestate\":\"vendor=manual-pr64\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 133 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 2.0000000000095497, + "receive": 0, + "ssl": -1 + }, + "_requestId": "1b1612b8-6e03-4483-8d4f-74c232a36835", + "_trace": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "version": "00", + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "tracestate": "vendor=manual-pr64" + } + }, + { + "startedDateTime": "2026-08-28T07:52:14.932Z", + "time": 3.0000000000001137, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/sse?token=legacy-sse-06", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [ + { + "name": "token", + "value": "legacy-sse-06" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "cache-control", + "value": "no-cache" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-length", + "value": "81" + }, + { + "name": "content-type", + "value": "text/event-stream; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:52:14 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 81, + "mimeType": "text/event-stream", + "text": "id: 1\nevent: manual\ndata: sse-legacy-sse-06\n\nid: 2\ndata: complete-legacy-sse-06\n\n" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 81 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 3.0000000000001137, + "receive": 0, + "ssl": -1 + }, + "_requestId": "21870c2f-ae5c-45b6-a61b-f2827cf4b8fe" + }, + { + "startedDateTime": "2026-08-28T07:52:22.991Z", + "time": 0, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-mock-http-08" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 207, + "statusText": "Manual Mock HTTP", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "x-nnd-mock", + "value": "http" + }, + { + "name": "content-length", + "value": "67" + } + ], + "content": { + "size": 67, + "mimeType": "application/json", + "text": "{\"mocked\":true,\"transport\":\"http\",\"source\":\"node-network-devtools\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 67 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "97ab50a1-7dc0-4698-8eb6-6c585c1b0800" + }, + { + "startedDateTime": "2026-08-28T07:52:26.991Z", + "time": 1.0000000000047748, + "request": { + "method": "POST", + "url": "http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain" + }, + { + "name": "x-manual-mock", + "value": "fetch" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-mock-fetch-09" + } + ], + "postData": { + "mimeType": "text/plain", + "text": "must-not-reach-origin:legacy-mock-fetch-09" + }, + "headersSize": -1, + "bodySize": 42 + }, + "response": { + "status": 202, + "statusText": "Manual Mock Fetch", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "x-nnd-mock", + "value": "fetch" + } + ], + "content": { + "size": 68, + "mimeType": "application/json", + "text": "{\"mocked\":true,\"transport\":\"fetch\",\"source\":\"node-network-devtools\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 68 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 1.0000000000047748, + "receive": 0, + "ssl": -1 + }, + "_requestId": "a85e4f7f-a238-44c7-866e-2b7cfb325da1" + } + ] + } +} diff --git a/output/playwright/pr-64/artifacts/legacy-runtime.json b/output/playwright/pr-64/artifacts/legacy-runtime.json new file mode 100644 index 0000000..d865da6 --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-runtime.json @@ -0,0 +1,80 @@ +{ + "schemaVersion": 1, + "productCommit": "449d47db89109e826eb0e7e0584777365eac3f9b", + "package": { + "name": "node-network-devtools", + "version": "2.0.0" + }, + "tarballSha256": "e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac", + "node": "v24.16.0", + "platform": "darwin-arm64", + "backend": "legacy", + "selectedMode": "legacy", + "fallbackReason": { + "code": "NND_AUTO_LEGACY_MOCK_REQUIRED", + "level": "info", + "message": "Auto selected Legacy because request/response mocking was configured.", + "hint": "Remove legacy.mock to allow Auto to select the Native backend." + }, + "capabilities": { + "http": true, + "https": true, + "fetch": true, + "http2": false, + "responseBody": true, + "requestBody": true, + "websocketLifecycle": true, + "websocketFrames": true, + "sseMessages": true, + "initiator": true + }, + "target": { + "id": "node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "title": "Node Network Devtools (Legacy)", + "type": "node", + "url": "file:///node_modules/node-network-devtools/dist/fork", + "webSocketDebuggerUrl": "ws://127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "discoveryUrl": "http://127.0.0.1:59430/json/list" + }, + "discovery": [ + { + "id": "node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "title": "Node Network Devtools (Legacy)", + "type": "node", + "url": "file:///node_modules/node-network-devtools/dist/fork", + "webSocketDebuggerUrl": "ws://127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "discoveryUrl": "http://127.0.0.1:59430/json/list" + } + ], + "discoveryContract": { + "list": { + "ok": true, + "targetCount": 1, + "targetIdMatches": true + }, + "version": { + "ok": true, + "browser": "node-network-devtools/2", + "protocolVersion": "1.3" + }, + "protocol": { + "ok": true, + "domainCount": 4, + "networkDomain": true, + "networkCommandCount": 7, + "networkEventCount": 12 + } + }, + "frontendUrl": "http://127.0.0.1:59435/devtools/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68&hl=en-US", + "controlUrl": "http://127.0.0.1:59436", + "originalFunctionsPreserved": { + "fetch": false, + "httpRequest": false, + "httpsRequest": false + }, + "sourceSha256": "46f81eb2930040a31f402cf4cb113758628eb72c9db27617babba1d3df31af27" +} diff --git a/output/playwright/pr-64/artifacts/legacy-session-manifest.json b/output/playwright/pr-64/artifacts/legacy-session-manifest.json new file mode 100644 index 0000000..16499e8 --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-session-manifest.json @@ -0,0 +1,518 @@ +{ + "schemaVersion": 1, + "sessionId": "fe170256-a52e-497e-8502-5e589fcb7bea", + "state": "completed", + "createdAt": "2026-08-28T07:50:35.521Z", + "target": { + "id": "node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "title": "Node Network Devtools (Legacy)", + "type": "node", + "url": "file:///node_modules/node-network-devtools/dist/fork", + "webSocketDebuggerUrl": "ws://127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68", + "discoveryUrl": "http://127.0.0.1:59430/json/list" + }, + "files": { + "events": "events.ndjson", + "bodies": "bodies" + }, + "completedAt": "2026-08-28T07:54:18.050Z", + "stats": { + "eventCount": 54, + "requestCount": 12, + "bodyCount": 10, + "bodyErrorCount": 0, + "failedRequestCount": 1 + }, + "requestIndex": { + "0cc5f65a-40ac-4130-9be9-3f41d81ff929": { + "requestId": "0cc5f65a-40ac-4130-9be9-3f41d81ff929", + "firstSequence": 2, + "requestTimestamp": 0.009, + "wallTime": 1787903435.508, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59430/json/list", + "method": "GET", + "headers": {}, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 0.017, + "response": { + "url": "http://127.0.0.1:59430/json/list", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-origin": "*", + "cache-control": "no-store", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 28 Aug 2026 07:50:35 GMT", + "keep-alive": "timeout=5", + "transfer-encoding": "chunked" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 0.018, + "encodedDataLength": 821 + }, + "9405f647-edce-4fb1-a015-9e7b89878de5": { + "requestId": "9405f647-edce-4fb1-a015-9e7b89878de5", + "firstSequence": 3, + "requestTimestamp": 0.011, + "wallTime": 1787903435.512, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59430/json/version", + "method": "GET", + "headers": {}, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 0.019, + "response": { + "url": "http://127.0.0.1:59430/json/version", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-origin": "*", + "cache-control": "no-store", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 28 Aug 2026 07:50:35 GMT", + "keep-alive": "timeout=5", + "transfer-encoding": "chunked" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 0.019, + "encodedDataLength": 248 + }, + "9e61ccb6-be11-43f9-8355-2d64a4cb6e60": { + "requestId": "9e61ccb6-be11-43f9-8355-2d64a4cb6e60", + "firstSequence": 4, + "requestTimestamp": 0.011, + "wallTime": 1787903435.512, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59430/json/protocol", + "method": "GET", + "headers": {}, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 0.019, + "response": { + "url": "http://127.0.0.1:59430/json/protocol", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-origin": "*", + "cache-control": "no-store", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 28 Aug 2026 07:50:35 GMT", + "keep-alive": "timeout=5", + "transfer-encoding": "chunked" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 0.019, + "encodedDataLength": 1323 + }, + "58134218-34a0-4b54-a2ab-e1fd65450177": { + "requestId": "58134218-34a0-4b54-a2ab-e1fd65450177", + "firstSequence": 15, + "requestTimestamp": 79.291, + "wallTime": 1787903514.791, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59428/get?token=legacy-http-get-01", + "method": "GET", + "headers": { + "host": "127.0.0.1:59428" + }, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 79.292, + "response": { + "url": "http://127.0.0.1:59428/get?token=legacy-http-get-01", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "text/plain; charset=utf-8", + "content-length": "38", + "x-manual-case": "legacy-http-get-01", + "date": "Fri, 28 Aug 2026 07:51:54 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "text/plain" + }, + "finishedTimestamp": 79.293, + "encodedDataLength": 38 + }, + "679ed0e5-ef59-4d2e-89ab-391343c82c31": { + "requestId": "679ed0e5-ef59-4d2e-89ab-391343c82c31", + "firstSequence": 19, + "requestTimestamp": 83.251, + "wallTime": 1787903518.749, + "resourceType": "Other", + "request": { + "url": "https://127.0.0.1:59429/secure-get?token=legacy-https-get-02", + "method": "GET", + "headers": { + "host": "127.0.0.1:59429" + }, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 83.257, + "response": { + "url": "https://127.0.0.1:59429/secure-get?token=legacy-https-get-02", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "text/plain; charset=utf-8", + "content-length": "41", + "x-manual-case": "legacy-https-get-02", + "date": "Fri, 28 Aug 2026 07:51:58 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "text/plain" + }, + "finishedTimestamp": 83.257, + "encodedDataLength": 41 + }, + "3e47e0b7-987b-463c-aa0e-9765fc6d7e11": { + "requestId": "3e47e0b7-987b-463c-aa0e-9765fc6d7e11", + "firstSequence": 23, + "requestTimestamp": 87.391, + "wallTime": 1787903522.892, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59428/post?token=legacy-fetch-post-03", + "method": "POST", + "headers": { + "content-type": "text/plain; charset=utf-8", + "x-manual-case": "legacy-fetch-post-03" + }, + "initialPriority": "High", + "mixedContentType": "none", + "postData": "manual-request-body:legacy-fetch-post-03", + "hasPostData": true + }, + "responseTimestamp": 87.396, + "response": { + "url": "http://127.0.0.1:59428/post?token=legacy-fetch-post-03", + "status": 201, + "statusText": "Created", + "headers": { + "connection": "keep-alive", + "content-length": "89", + "content-type": "application/json; charset=utf-8", + "date": "Fri, 28 Aug 2026 07:52:02 GMT", + "keep-alive": "timeout=5", + "x-manual-case": "legacy-fetch-post-03" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 87.397, + "encodedDataLength": 89 + }, + "1b1612b8-6e03-4483-8d4f-74c232a36835": { + "requestId": "1b1612b8-6e03-4483-8d4f-74c232a36835", + "firstSequence": 27, + "requestTimestamp": 91.466, + "wallTime": 1787903526.966, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59428/trace?token=legacy-trace-04", + "method": "GET", + "headers": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "tracestate": "vendor=manual-pr64", + "host": "127.0.0.1:59428" + }, + "initialPriority": "High", + "mixedContentType": "none" + }, + "trace": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "version": "00", + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "tracestate": "vendor=manual-pr64" + }, + "responseTimestamp": 91.468, + "response": { + "url": "http://127.0.0.1:59428/trace?token=legacy-trace-04", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "application/json; charset=utf-8", + "content-length": "133", + "date": "Fri, 28 Aug 2026 07:52:06 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 91.468, + "encodedDataLength": 133 + }, + "25379421-e6bd-43f0-92a2-eb9f2345a4ac": { + "requestId": "25379421-e6bd-43f0-92a2-eb9f2345a4ac", + "firstSequence": 31, + "requestTimestamp": 95.432, + "wallTime": 1787903530.932, + "resourceType": "Fetch", + "request": { + "url": "http://127.0.0.1:59428/reset?token=legacy-failed-05", + "method": "GET", + "headers": { + "host": "127.0.0.1:59428" + }, + "initialPriority": "High", + "mixedContentType": "none" + }, + "finishedTimestamp": 95.433, + "failure": { + "errorText": "socket hang up", + "canceled": false + } + }, + "21870c2f-ae5c-45b6-a61b-f2827cf4b8fe": { + "requestId": "21870c2f-ae5c-45b6-a61b-f2827cf4b8fe", + "firstSequence": 33, + "requestTimestamp": 99.432, + "wallTime": 1787903534.932, + "resourceType": "EventSource", + "request": { + "url": "http://127.0.0.1:59428/sse?token=legacy-sse-06", + "method": "GET", + "headers": {}, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 99.435, + "response": { + "url": "http://127.0.0.1:59428/sse?token=legacy-sse-06", + "status": 200, + "statusText": "OK", + "headers": { + "cache-control": "no-cache", + "connection": "keep-alive", + "content-length": "81", + "content-type": "text/event-stream; charset=utf-8", + "date": "Fri, 28 Aug 2026 07:52:14 GMT", + "keep-alive": "timeout=5" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "text/event-stream" + }, + "finishedTimestamp": 99.435, + "encodedDataLength": 81 + }, + "ef2b1aa4-f871-4c37-a398-91a29ed42bd8": { + "requestId": "ef2b1aa4-f871-4c37-a398-91a29ed42bd8", + "firstSequence": 39 + }, + "97ab50a1-7dc0-4698-8eb6-6c585c1b0800": { + "requestId": "97ab50a1-7dc0-4698-8eb6-6c585c1b0800", + "firstSequence": 47, + "requestTimestamp": 107.491, + "wallTime": 1787903542.991, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08", + "method": "GET", + "headers": { + "host": "127.0.0.1:59428" + }, + "initialPriority": "High", + "mixedContentType": "none" + }, + "responseTimestamp": 107.491, + "response": { + "url": "http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08", + "status": 207, + "statusText": "Manual Mock HTTP", + "headers": { + "content-type": "application/json; charset=utf-8", + "x-nnd-mock": "http", + "content-length": "67" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 107.491, + "encodedDataLength": 67 + }, + "a85e4f7f-a238-44c7-866e-2b7cfb325da1": { + "requestId": "a85e4f7f-a238-44c7-866e-2b7cfb325da1", + "firstSequence": 51, + "requestTimestamp": 111.49, + "wallTime": 1787903546.991, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09", + "method": "POST", + "headers": { + "content-type": "text/plain", + "x-manual-mock": "fetch" + }, + "initialPriority": "High", + "mixedContentType": "none", + "postData": "must-not-reach-origin:legacy-mock-fetch-09", + "hasPostData": true + }, + "responseTimestamp": 111.491, + "response": { + "url": "http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09", + "status": 202, + "statusText": "Manual Mock Fetch", + "headers": { + "content-type": "application/json; charset=utf-8", + "x-nnd-mock": "fetch" + }, + "connectionReused": false, + "encodedDataLength": 0, + "charset": "utf-8", + "mimeType": "application/json" + }, + "finishedTimestamp": 111.491, + "encodedDataLength": 68 + } + }, + "bodyIndex": { + "0cc5f65a-40ac-4130-9be9-3f41d81ff929": { + "requestId": "0cc5f65a-40ac-4130-9be9-3f41d81ff929", + "path": "bodies/9d4da820dd90637b-4d42de0bb5b2269011ec887a81c45783270bc1fa034d2b16913b29a466eed86d.body", + "sha256": "4d42de0bb5b2269011ec887a81c45783270bc1fa034d2b16913b29a466eed86d", + "byteLength": 821, + "base64Encoded": false, + "mimeType": "application/json" + }, + "9405f647-edce-4fb1-a015-9e7b89878de5": { + "requestId": "9405f647-edce-4fb1-a015-9e7b89878de5", + "path": "bodies/856a19bcfdf19a59-bbf42bcaa1d02652fd51fb30e5a96e01da3b85f015fd1635b2adcee547d08444.body", + "sha256": "bbf42bcaa1d02652fd51fb30e5a96e01da3b85f015fd1635b2adcee547d08444", + "byteLength": 248, + "base64Encoded": false, + "mimeType": "application/json" + }, + "9e61ccb6-be11-43f9-8355-2d64a4cb6e60": { + "requestId": "9e61ccb6-be11-43f9-8355-2d64a4cb6e60", + "path": "bodies/1e5129332eeffbac-59b00c761bb938bbd60117eeafca6eb93ed4c9df481b492b37cd14fbcb1d121a.body", + "sha256": "59b00c761bb938bbd60117eeafca6eb93ed4c9df481b492b37cd14fbcb1d121a", + "byteLength": 1323, + "base64Encoded": false, + "mimeType": "application/json" + }, + "58134218-34a0-4b54-a2ab-e1fd65450177": { + "requestId": "58134218-34a0-4b54-a2ab-e1fd65450177", + "path": "bodies/2d08ba5699d46627-4dbbb1b839dde1985bb99f2e0191e702c723ed9c0270c8863fa7a15b1a4d1241.body", + "sha256": "4dbbb1b839dde1985bb99f2e0191e702c723ed9c0270c8863fa7a15b1a4d1241", + "byteLength": 38, + "base64Encoded": false, + "mimeType": "text/plain" + }, + "679ed0e5-ef59-4d2e-89ab-391343c82c31": { + "requestId": "679ed0e5-ef59-4d2e-89ab-391343c82c31", + "path": "bodies/dc8bd877cc1f50c9-3da027641befa9a07e036caa733aff0e6bbdbe2d79bd51592a2b98af03823010.body", + "sha256": "3da027641befa9a07e036caa733aff0e6bbdbe2d79bd51592a2b98af03823010", + "byteLength": 41, + "base64Encoded": false, + "mimeType": "text/plain" + }, + "3e47e0b7-987b-463c-aa0e-9765fc6d7e11": { + "requestId": "3e47e0b7-987b-463c-aa0e-9765fc6d7e11", + "path": "bodies/d520b6573b0f1805-06a511ade7e9e2ec749546b3c19cfa3ad033741a2431101b2b8d5c4c8f773686.body", + "sha256": "06a511ade7e9e2ec749546b3c19cfa3ad033741a2431101b2b8d5c4c8f773686", + "byteLength": 89, + "base64Encoded": false, + "mimeType": "application/json" + }, + "1b1612b8-6e03-4483-8d4f-74c232a36835": { + "requestId": "1b1612b8-6e03-4483-8d4f-74c232a36835", + "path": "bodies/d0b35c18e5a6e6fa-7ea97b7efb1716877e99643b9309fab128cfc9b4361865629e7355ff2a619adf.body", + "sha256": "7ea97b7efb1716877e99643b9309fab128cfc9b4361865629e7355ff2a619adf", + "byteLength": 133, + "base64Encoded": false, + "mimeType": "application/json" + }, + "21870c2f-ae5c-45b6-a61b-f2827cf4b8fe": { + "requestId": "21870c2f-ae5c-45b6-a61b-f2827cf4b8fe", + "path": "bodies/285b774da6e19996-099ad30fee6432ff6c49a303917619cf899ffa89ce05a26d87a5e118bea4cae0.body", + "sha256": "099ad30fee6432ff6c49a303917619cf899ffa89ce05a26d87a5e118bea4cae0", + "byteLength": 81, + "base64Encoded": false, + "mimeType": "text/event-stream" + }, + "97ab50a1-7dc0-4698-8eb6-6c585c1b0800": { + "requestId": "97ab50a1-7dc0-4698-8eb6-6c585c1b0800", + "path": "bodies/8ad3dde286c71e26-bf55b18bcb5c10539e5529e2f80c8bea6021a6ec17d157d21be2c3ec53c46a11.body", + "sha256": "bf55b18bcb5c10539e5529e2f80c8bea6021a6ec17d157d21be2c3ec53c46a11", + "byteLength": 67, + "base64Encoded": false, + "mimeType": "application/json" + }, + "a85e4f7f-a238-44c7-866e-2b7cfb325da1": { + "requestId": "a85e4f7f-a238-44c7-866e-2b7cfb325da1", + "path": "bodies/5e5ac978a5a357db-2529fff188d8b259ca882f4c4ab063d29f11b43e18b2ed57718fea224673ddda.body", + "sha256": "2529fff188d8b259ca882f4c4ab063d29f11b43e18b2ed57718fea224673ddda", + "byteLength": 68, + "base64Encoded": false, + "mimeType": "application/json" + } + }, + "traceIndex": { + "4bf92f3577b34da6a3ce929d0e0e4736": { + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "requestIds": ["1b1612b8-6e03-4483-8d4f-74c232a36835"], + "spans": [ + { + "requestId": "1b1612b8-6e03-4483-8d4f-74c232a36835", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "tracestate": "vendor=manual-pr64" + } + ] + } + }, + "issues": [] +} diff --git a/output/playwright/pr-64/artifacts/legacy-session.har b/output/playwright/pr-64/artifacts/legacy-session.har new file mode 100644 index 0000000..8deee68 --- /dev/null +++ b/output/playwright/pr-64/artifacts/legacy-session.har @@ -0,0 +1,832 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "node-network-devtools", + "version": "2" + }, + "pages": [], + "entries": [ + { + "startedDateTime": "2026-08-28T07:50:35.508Z", + "time": 9, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59430/json/list", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:50:35 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "content": { + "size": 821, + "mimeType": "application/json", + "text": "[{\"id\":\"node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68\",\"title\":\"Node Network Devtools (Legacy)\",\"type\":\"node\",\"url\":\"file:///node_modules/node-network-devtools/dist/fork\",\"webSocketDebuggerUrl\":\"ws://127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68\",\"devtoolsFrontendUrl\":\"devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68\",\"devtoolsFrontendUrlCompat\":\"devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68\",\"discoveryUrl\":\"http://127.0.0.1:59430/json/list\"}]" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 821 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 8.000000000000002, + "receive": 0.9999999999999974, + "ssl": -1 + }, + "_requestId": "0cc5f65a-40ac-4130-9be9-3f41d81ff929" + }, + { + "startedDateTime": "2026-08-28T07:50:35.512Z", + "time": 8, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59430/json/version", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:50:35 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "content": { + "size": 248, + "mimeType": "application/json", + "text": "{\"Browser\":\"node-network-devtools/2\",\"Protocol-Version\":\"1.3\",\"User-Agent\":\"Node.js/v24.16.0\",\"V8-Version\":\"13.6.233.17-node.49\",\"webSocketDebuggerUrl\":\"ws://127.0.0.1:59430/devtools/page/node-network-devtools-b4efbb3a-70c3-435c-a554-567e33524f68\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 248 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 8, + "receive": 0, + "ssl": -1 + }, + "_requestId": "9405f647-edce-4fb1-a015-9e7b89878de5" + }, + { + "startedDateTime": "2026-08-28T07:50:35.512Z", + "time": 8, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59430/json/protocol", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:50:35 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "content": { + "size": 1323, + "mimeType": "application/json", + "text": "{\"version\":{\"major\":\"1\",\"minor\":\"3\"},\"domains\":[{\"domain\":\"Network\",\"version\":\"1.3\",\"commands\":[{\"name\":\"enable\"},{\"name\":\"disable\"},{\"name\":\"setAttachDebugStack\"},{\"name\":\"emulateNetworkConditionsByRule\",\"returns\":[{\"name\":\"ruleIds\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}]},{\"name\":\"overrideNetworkState\"},{\"name\":\"clearAcceptedEncodingsOverride\"},{\"name\":\"getResponseBody\",\"parameters\":[{\"name\":\"requestId\",\"type\":\"string\"}],\"returns\":[{\"name\":\"body\",\"type\":\"string\"},{\"name\":\"base64Encoded\",\"type\":\"boolean\"}]}],\"events\":[{\"name\":\"requestWillBeSent\"},{\"name\":\"responseReceived\"},{\"name\":\"dataReceived\"},{\"name\":\"loadingFinished\"},{\"name\":\"loadingFailed\"},{\"name\":\"eventSourceMessageReceived\"},{\"name\":\"webSocketCreated\"},{\"name\":\"webSocketWillSendHandshakeRequest\"},{\"name\":\"webSocketHandshakeResponseReceived\"},{\"name\":\"webSocketFrameSent\"},{\"name\":\"webSocketFrameReceived\"},{\"name\":\"webSocketClosed\"}]},{\"domain\":\"Debugger\",\"version\":\"1.3\",\"commands\":[{\"name\":\"enable\"},{\"name\":\"disable\"},{\"name\":\"getScriptSource\",\"parameters\":[{\"name\":\"scriptId\",\"type\":\"string\"}],\"returns\":[{\"name\":\"scriptSource\",\"type\":\"string\"}]}],\"events\":[{\"name\":\"scriptParsed\"}]},{\"domain\":\"Runtime\",\"version\":\"1.3\",\"commands\":[{\"name\":\"enable\"},{\"name\":\"disable\"}]},{\"domain\":\"Schema\",\"version\":\"1.3\",\"commands\":[{\"name\":\"getDomains\"}]}]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 1323 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 8, + "receive": 0, + "ssl": -1 + }, + "_requestId": "9e61ccb6-be11-43f9-8355-2d64a4cb6e60" + }, + { + "startedDateTime": "2026-08-28T07:51:54.791Z", + "time": 2.0000000000095497, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/get?token=legacy-http-get-01", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-http-get-01" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "x-manual-case", + "value": "legacy-http-get-01" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:51:54 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 38, + "mimeType": "text/plain", + "text": "manual-get-response:legacy-http-get-01" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 38 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 1.0000000000047748, + "receive": 1.0000000000047748, + "ssl": -1 + }, + "_requestId": "58134218-34a0-4b54-a2ab-e1fd65450177" + }, + { + "startedDateTime": "2026-08-28T07:51:58.749Z", + "time": 6.000000000000227, + "request": { + "method": "GET", + "url": "https://127.0.0.1:59429/secure-get?token=legacy-https-get-02", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:59429" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-https-get-02" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "41" + }, + { + "name": "x-manual-case", + "value": "legacy-https-get-02" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:51:58 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 41, + "mimeType": "text/plain", + "text": "manual-https-response:legacy-https-get-02" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 41 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 6.000000000000227, + "receive": 0, + "ssl": -1 + }, + "_requestId": "679ed0e5-ef59-4d2e-89ab-391343c82c31" + }, + { + "startedDateTime": "2026-08-28T07:52:02.892Z", + "time": 6.000000000000227, + "request": { + "method": "POST", + "url": "http://127.0.0.1:59428/post?token=legacy-fetch-post-03", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "x-manual-case", + "value": "legacy-fetch-post-03" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-fetch-post-03" + } + ], + "postData": { + "mimeType": "text/plain; charset=utf-8", + "text": "manual-request-body:legacy-fetch-post-03" + }, + "headersSize": -1, + "bodySize": 40 + }, + "response": { + "status": 201, + "statusText": "Created", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-length", + "value": "89" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:52:02 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + }, + { + "name": "x-manual-case", + "value": "legacy-fetch-post-03" + } + ], + "content": { + "size": 89, + "mimeType": "application/json", + "text": "{\"token\":\"legacy-fetch-post-03\",\"requestBody\":\"manual-request-body:legacy-fetch-post-03\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 89 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 4.9999999999954525, + "receive": 1.0000000000047748, + "ssl": -1 + }, + "_requestId": "3e47e0b7-987b-463c-aa0e-9765fc6d7e11" + }, + { + "startedDateTime": "2026-08-28T07:52:06.966Z", + "time": 2.0000000000095497, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/trace?token=legacy-trace-04", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "traceparent", + "value": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" + }, + { + "name": "tracestate", + "value": "vendor=manual-pr64" + }, + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-trace-04" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "133" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:52:06 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 133, + "mimeType": "application/json", + "text": "{\"token\":\"legacy-trace-04\",\"traceparent\":\"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\"tracestate\":\"vendor=manual-pr64\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 133 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 2.0000000000095497, + "receive": 0, + "ssl": -1 + }, + "_requestId": "1b1612b8-6e03-4483-8d4f-74c232a36835", + "_trace": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "version": "00", + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "tracestate": "vendor=manual-pr64" + } + }, + { + "startedDateTime": "2026-08-28T07:52:10.932Z", + "time": 1.0000000000047748, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/reset?token=legacy-failed-05", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-failed-05" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 0, + "statusText": "socket hang up", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "content": { + "size": 0, + "mimeType": "application/octet-stream" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "25379421-e6bd-43f0-92a2-eb9f2345a4ac", + "_failure": { + "errorText": "socket hang up", + "canceled": false + } + }, + { + "startedDateTime": "2026-08-28T07:52:14.932Z", + "time": 3.0000000000001137, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/sse?token=legacy-sse-06", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [ + { + "name": "token", + "value": "legacy-sse-06" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "cache-control", + "value": "no-cache" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "content-length", + "value": "81" + }, + { + "name": "content-type", + "value": "text/event-stream; charset=utf-8" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:52:14 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 81, + "mimeType": "text/event-stream", + "text": "id: 1\nevent: manual\ndata: sse-legacy-sse-06\n\nid: 2\ndata: complete-legacy-sse-06\n\n" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 81 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 3.0000000000001137, + "receive": 0, + "ssl": -1 + }, + "_requestId": "21870c2f-ae5c-45b6-a61b-f2827cf4b8fe" + }, + { + "startedDateTime": "2026-08-28T07:50:35.521Z", + "time": 0, + "request": { + "method": "GET", + "url": "", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 0, + "statusText": "", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "content": { + "size": 0, + "mimeType": "application/octet-stream" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "ef2b1aa4-f871-4c37-a398-91a29ed42bd8" + }, + { + "startedDateTime": "2026-08-28T07:52:22.991Z", + "time": 0, + "request": { + "method": "GET", + "url": "http://127.0.0.1:59428/mock-http?token=legacy-mock-http-08", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:59428" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-mock-http-08" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 207, + "statusText": "Manual Mock HTTP", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "x-nnd-mock", + "value": "http" + }, + { + "name": "content-length", + "value": "67" + } + ], + "content": { + "size": 67, + "mimeType": "application/json", + "text": "{\"mocked\":true,\"transport\":\"http\",\"source\":\"node-network-devtools\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 67 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "97ab50a1-7dc0-4698-8eb6-6c585c1b0800" + }, + { + "startedDateTime": "2026-08-28T07:52:26.991Z", + "time": 1.0000000000047748, + "request": { + "method": "POST", + "url": "http://127.0.0.1:59428/mock-fetch?token=legacy-mock-fetch-09", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain" + }, + { + "name": "x-manual-mock", + "value": "fetch" + } + ], + "queryString": [ + { + "name": "token", + "value": "legacy-mock-fetch-09" + } + ], + "postData": { + "mimeType": "text/plain", + "text": "must-not-reach-origin:legacy-mock-fetch-09" + }, + "headersSize": -1, + "bodySize": 42 + }, + "response": { + "status": 202, + "statusText": "Manual Mock Fetch", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "x-nnd-mock", + "value": "fetch" + } + ], + "content": { + "size": 68, + "mimeType": "application/json", + "text": "{\"mocked\":true,\"transport\":\"fetch\",\"source\":\"node-network-devtools\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 68 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 1.0000000000047748, + "receive": 0, + "ssl": -1 + }, + "_requestId": "a85e4f7f-a238-44c7-866e-2b7cfb325da1" + } + ] + } +} diff --git a/output/playwright/pr-64/artifacts/native-dispose-summary.json b/output/playwright/pr-64/artifacts/native-dispose-summary.json new file mode 100644 index 0000000..7f17c58 --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-dispose-summary.json @@ -0,0 +1,5 @@ +{ + "registrationState": "disposed", + "discoveryClosed": true, + "targetSocketClosed": true +} diff --git a/output/playwright/pr-64/artifacts/native-events.ndjson b/output/playwright/pr-64/artifacts/native-events.ndjson new file mode 100644 index 0000000..c0258bc --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-events.ndjson @@ -0,0 +1,24 @@ +{"schemaVersion":1,"sequence":1,"recordedAt":"2026-08-28T07:47:55.120Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-1","request":{"url":"http://127.0.0.1:58925/get?token=native-http-get-01","method":"GET","headers":{"host":"127.0.0.1:58925"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestCreated","scriptId":"369","url":"node:internal/inspector/network_http","lineNumber":81,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"ClientRequest","scriptId":"149","url":"node:_http_client","lineNumber":442,"columnNumber":34},{"functionName":"request","scriptId":"146","url":"node:http","lineNumber":107,"columnNumber":9},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":113,"columnNumber":44},{"functionName":"httpRequest","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":111,"columnNumber":9},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":493,"columnNumber":21},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":86.3044,"wallTime":1787903275119}} +{"schemaVersion":1,"sequence":2,"recordedAt":"2026-08-28T07:47:55.124Z","method":"Network.responseReceived","params":{"requestId":"node-network-event-1","timestamp":86.3068,"type":"Other","response":{"url":"http://127.0.0.1:58925/get?token=native-http-get-01","status":200,"statusText":"OK","headers":{"content-type":"text/plain; charset=utf-8","content-length":"38","x-manual-case":"native-http-get-01","date":"Fri, 28 Aug 2026 07:47:55 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"mimeType":"text/plain","charset":"utf-8"}}} +{"schemaVersion":1,"sequence":3,"recordedAt":"2026-08-28T07:47:55.126Z","method":"Network.loadingFinished","params":{"requestId":"node-network-event-1","timestamp":86.3071}} +{"schemaVersion":1,"sequence":4,"recordedAt":"2026-08-28T07:47:59.053Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-2","request":{"url":"https://127.0.0.1:58926/secure-get?token=native-https-get-02","method":"GET","headers":{"host":"127.0.0.1:58926"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestCreated","scriptId":"369","url":"node:internal/inspector/network_http","lineNumber":81,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"ClientRequest","scriptId":"149","url":"node:_http_client","lineNumber":442,"columnNumber":34},{"functionName":"request","scriptId":"194","url":"node:https","lineNumber":628,"columnNumber":9},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":113,"columnNumber":44},{"functionName":"httpRequest","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":111,"columnNumber":9},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":496,"columnNumber":21},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":90.2372,"wallTime":1787903279052}} +{"schemaVersion":1,"sequence":5,"recordedAt":"2026-08-28T07:47:59.063Z","method":"Network.responseReceived","params":{"requestId":"node-network-event-2","timestamp":90.245,"type":"Other","response":{"url":"https://127.0.0.1:58926/secure-get?token=native-https-get-02","status":200,"statusText":"OK","headers":{"content-type":"text/plain; charset=utf-8","content-length":"41","x-manual-case":"native-https-get-02","date":"Fri, 28 Aug 2026 07:47:59 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"mimeType":"text/plain","charset":"utf-8"}}} +{"schemaVersion":1,"sequence":6,"recordedAt":"2026-08-28T07:47:59.065Z","method":"Network.loadingFinished","params":{"requestId":"node-network-event-2","timestamp":90.2455}} +{"schemaVersion":1,"sequence":7,"recordedAt":"2026-08-28T07:48:03.102Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-3","request":{"url":"http://127.0.0.1:58925/post?token=native-fetch-post-03","method":"POST","headers":{"content-type":"text/plain; charset=utf-8","x-manual-case":"native-fetch-post-03","accept":"*/*","accept-language":"*","sec-fetch-mode":"cors","user-agent":"node","accept-encoding":"gzip, deflate"},"hasPostData":true},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestStart","scriptId":"372","url":"node:internal/inspector/network_undici","lineNumber":77,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"Request","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2991,"columnNumber":26},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":9231,"columnNumber":24},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2563,"columnNumber":31},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":9705,"columnNumber":26},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13638,"columnNumber":54},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13638,"columnNumber":15},{"functionName":"httpNetworkFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13536,"columnNumber":72},{"functionName":"httpNetworkOrCacheFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13406,"columnNumber":38},{"functionName":"httpFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13228,"columnNumber":42},{"functionName":"schemeFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13145,"columnNumber":17},{"functionName":"mainFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12989,"columnNumber":29},{"functionName":"fetching","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12958,"columnNumber":6},{"functionName":"fetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12822,"columnNumber":19},{"functionName":"fetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":17455,"columnNumber":9},{"functionName":"fetch","scriptId":"64","url":"node:internal/bootstrap/web/exposed-window-or-worker","lineNumber":82,"columnNumber":11},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":501,"columnNumber":29},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":94.2859,"wallTime":1787903283101}} +{"schemaVersion":1,"sequence":8,"recordedAt":"2026-08-28T07:48:03.114Z","method":"Network.responseReceived","params":{"requestId":"node-network-event-3","timestamp":94.2956,"type":"Fetch","response":{"url":"http://127.0.0.1:58925/post?token=native-fetch-post-03","status":201,"statusText":"Created","headers":{"content-type":"application/json; charset=utf-8","content-length":"89","x-manual-case":"native-fetch-post-03","Date":"Fri, 28 Aug 2026 07:48:03 GMT","Connection":"keep-alive","Keep-Alive":"timeout=5"},"mimeType":"application/json","charset":"utf-8"}}} +{"schemaVersion":1,"sequence":9,"recordedAt":"2026-08-28T07:48:03.115Z","method":"Network.loadingFinished","params":{"requestId":"node-network-event-3","timestamp":94.296}} +{"schemaVersion":1,"sequence":10,"recordedAt":"2026-08-28T07:48:07.067Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-4","request":{"url":"http://127.0.0.1:58925/trace?token=native-trace-04","method":"GET","headers":{"traceparent":"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01","tracestate":"vendor=manual-pr64","host":"127.0.0.1:58925"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestCreated","scriptId":"369","url":"node:internal/inspector/network_http","lineNumber":81,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"ClientRequest","scriptId":"149","url":"node:_http_client","lineNumber":442,"columnNumber":34},{"functionName":"request","scriptId":"146","url":"node:http","lineNumber":107,"columnNumber":9},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":113,"columnNumber":44},{"functionName":"httpRequest","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":111,"columnNumber":9},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":537,"columnNumber":21},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":98.2512,"wallTime":1787903287066}} +{"schemaVersion":1,"sequence":11,"recordedAt":"2026-08-28T07:48:07.071Z","method":"Network.responseReceived","params":{"requestId":"node-network-event-4","timestamp":98.2539,"type":"Other","response":{"url":"http://127.0.0.1:58925/trace?token=native-trace-04","status":200,"statusText":"OK","headers":{"content-type":"application/json; charset=utf-8","content-length":"133","date":"Fri, 28 Aug 2026 07:48:07 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"mimeType":"application/json","charset":"utf-8"}}} +{"schemaVersion":1,"sequence":12,"recordedAt":"2026-08-28T07:48:07.072Z","method":"Network.loadingFinished","params":{"requestId":"node-network-event-4","timestamp":98.2542}} +{"schemaVersion":1,"sequence":13,"recordedAt":"2026-08-28T07:48:11.025Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-5","request":{"url":"http://127.0.0.1:58925/reset?token=native-failed-05","method":"GET","headers":{"host":"127.0.0.1:58925"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestCreated","scriptId":"369","url":"node:internal/inspector/network_http","lineNumber":81,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"ClientRequest","scriptId":"149","url":"node:_http_client","lineNumber":442,"columnNumber":34},{"functionName":"request","scriptId":"146","url":"node:http","lineNumber":107,"columnNumber":9},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":113,"columnNumber":44},{"functionName":"httpRequest","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":111,"columnNumber":9},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":545,"columnNumber":14},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":102.21,"wallTime":1787903291025}} +{"schemaVersion":1,"sequence":14,"recordedAt":"2026-08-28T07:48:11.028Z","method":"Network.loadingFailed","params":{"requestId":"node-network-event-5","timestamp":102.212,"type":"Other","errorText":"socket hang up"}} +{"schemaVersion":1,"sequence":15,"recordedAt":"2026-08-28T07:48:15.010Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-6","request":{"url":"http://127.0.0.1:58925/sse?token=native-sse-06","method":"GET","headers":{"accept":"*/*","accept-language":"*","sec-fetch-mode":"cors","user-agent":"node","accept-encoding":"gzip, deflate"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestStart","scriptId":"372","url":"node:internal/inspector/network_undici","lineNumber":77,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"Request","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2991,"columnNumber":26},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":9231,"columnNumber":24},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2563,"columnNumber":31},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":9705,"columnNumber":26},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13638,"columnNumber":54},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13638,"columnNumber":15},{"functionName":"httpNetworkFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13536,"columnNumber":72},{"functionName":"httpNetworkOrCacheFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13406,"columnNumber":38},{"functionName":"httpFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13228,"columnNumber":42},{"functionName":"schemeFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13145,"columnNumber":17},{"functionName":"mainFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12989,"columnNumber":29},{"functionName":"fetching","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12958,"columnNumber":6},{"functionName":"fetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12822,"columnNumber":19},{"functionName":"fetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":17455,"columnNumber":9},{"functionName":"fetch","scriptId":"64","url":"node:internal/bootstrap/web/exposed-window-or-worker","lineNumber":82,"columnNumber":11},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":558,"columnNumber":29},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":106.193,"wallTime":1787903295008}} +{"schemaVersion":1,"sequence":16,"recordedAt":"2026-08-28T07:48:15.015Z","method":"Network.responseReceived","params":{"requestId":"node-network-event-6","timestamp":106.198,"type":"Fetch","response":{"url":"http://127.0.0.1:58925/sse?token=native-sse-06","status":200,"statusText":"OK","headers":{"content-type":"text/event-stream; charset=utf-8","content-length":"81","cache-control":"no-cache","Date":"Fri, 28 Aug 2026 07:48:15 GMT","Connection":"keep-alive","Keep-Alive":"timeout=5"},"mimeType":"text/event-stream","charset":"utf-8"}}} +{"schemaVersion":1,"sequence":17,"recordedAt":"2026-08-28T07:48:15.017Z","method":"Network.loadingFinished","params":{"requestId":"node-network-event-6","timestamp":106.198}} +{"schemaVersion":1,"sequence":18,"recordedAt":"2026-08-28T07:48:18.968Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-7","request":{"url":"http://127.0.0.1:58925/websocket?token=native-websocket-07","method":"GET","headers":{"sec-websocket-key":"iVtSkmOz5zD/H90P5l+npg==","sec-websocket-version":"13","sec-websocket-extensions":"permessage-deflate; client_max_window_bits","accept":"*/*","accept-language":"*","sec-fetch-mode":"websocket","user-agent":"node","pragma":"no-cache","cache-control":"no-cache","accept-encoding":"gzip, deflate"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestStart","scriptId":"372","url":"node:internal/inspector/network_undici","lineNumber":77,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"Request","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2991,"columnNumber":26},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":9231,"columnNumber":24},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2563,"columnNumber":31},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"[dispatch]","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":9705,"columnNumber":26},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":2292,"columnNumber":32},{"functionName":"","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13638,"columnNumber":54},{"functionName":"dispatch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13638,"columnNumber":15},{"functionName":"httpNetworkFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13536,"columnNumber":72},{"functionName":"httpNetworkOrCacheFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13406,"columnNumber":38},{"functionName":"httpFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13228,"columnNumber":42},{"functionName":"schemeFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13145,"columnNumber":17},{"functionName":"mainFetch","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12989,"columnNumber":29},{"functionName":"fetching","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":12958,"columnNumber":6},{"functionName":"establishWebSocketConnection","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":14503,"columnNumber":25},{"functionName":"WebSocket","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":15253,"columnNumber":35},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":159,"columnNumber":19},{"functionName":"nativeWebSocketRoundTrip","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":158,"columnNumber":9},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":564,"columnNumber":91},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":110.152,"wallTime":1787903298967}} +{"schemaVersion":1,"sequence":19,"recordedAt":"2026-08-28T07:48:18.977Z","method":"Network.webSocketCreated","params":{"requestId":"node-network-event-8","url":"ws://127.0.0.1:58925/websocket?token=native-websocket-07","initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"webSocketCreated","scriptId":"302","url":"node:inspector","lineNumber":221,"columnNumber":32},{"functionName":"onWebSocketOpen","scriptId":"372","url":"node:internal/inspector/network_undici","lineNumber":214,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"#onConnectionEstablished","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":15441,"columnNumber":24},{"functionName":"onConnectionEstablished","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":15185,"columnNumber":111},{"functionName":"processResponse","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":14561,"columnNumber":18},{"functionName":"","scriptId":"155","url":"node:internal/deps/undici/undici","lineNumber":13203,"columnNumber":22},{"functionName":"","scriptId":"32","url":"node:internal/process/task_queues","lineNumber":150,"columnNumber":6},{"functionName":"runInAsyncScope","scriptId":"35","url":"node:async_hooks","lineNumber":226,"columnNumber":13},{"functionName":"runMicrotask","scriptId":"32","url":"node:internal/process/task_queues","lineNumber":147,"columnNumber":7},{"functionName":"processTicksAndRejections","scriptId":"32","url":"node:internal/process/task_queues","lineNumber":103,"columnNumber":4}]}}}} +{"schemaVersion":1,"sequence":20,"recordedAt":"2026-08-28T07:48:18.979Z","method":"Network.webSocketHandshakeResponseReceived","params":{"requestId":"node-network-event-8","timestamp":110.157,"response":{"status":101,"statusText":"Switching Protocols","headers":{"upgrade":"websocket","connection":"Upgrade","sec-websocket-accept":"QwNMRFhpyLgDRWoVQNFiDz4Z3Wg="}}}} +{"schemaVersion":1,"sequence":21,"recordedAt":"2026-08-28T07:48:18.980Z","method":"Network.webSocketClosed","params":{"requestId":"node-network-event-8","timestamp":110.163}} +{"schemaVersion":1,"sequence":22,"recordedAt":"2026-08-28T07:49:35.675Z","method":"Network.requestWillBeSent","params":{"requestId":"node-network-event-9","request":{"url":"http://127.0.0.1:58925/get?token=native-http-get-08","method":"GET","headers":{"host":"127.0.0.1:58925"},"hasPostData":false},"initiator":{"type":"script","stack":{"callFrames":[{"functionName":"broadcastToFrontend","scriptId":"302","url":"node:inspector","lineNumber":211,"columnNumber":2},{"functionName":"requestWillBeSent","scriptId":"302","url":"node:inspector","lineNumber":215,"columnNumber":33},{"functionName":"onClientRequestCreated","scriptId":"369","url":"node:internal/inspector/network_http","lineNumber":81,"columnNumber":10},{"functionName":"publish","scriptId":"31","url":"node:diagnostics_channel","lineNumber":164,"columnNumber":8},{"functionName":"ClientRequest","scriptId":"149","url":"node:_http_client","lineNumber":442,"columnNumber":34},{"functionName":"request","scriptId":"146","url":"node:http","lineNumber":107,"columnNumber":9},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":113,"columnNumber":44},{"functionName":"httpRequest","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":111,"columnNumber":9},{"functionName":"runScenario","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":493,"columnNumber":21},{"functionName":"","scriptId":"87","url":"file:///manual-evidence-server.mjs","lineNumber":982,"columnNumber":40},{"functionName":"emit","scriptId":"22","url":"node:events","lineNumber":508,"columnNumber":27},{"functionName":"parserOnIncoming","scriptId":"154","url":"node:_http_server","lineNumber":1225,"columnNumber":11},{"functionName":"parserOnHeadersComplete","scriptId":"150","url":"node:_http_common","lineNumber":124,"columnNumber":16}]}},"timestamp":186.86,"wallTime":1787903375674}} +{"schemaVersion":1,"sequence":23,"recordedAt":"2026-08-28T07:49:35.679Z","method":"Network.responseReceived","params":{"requestId":"node-network-event-9","timestamp":186.862,"type":"Other","response":{"url":"http://127.0.0.1:58925/get?token=native-http-get-08","status":200,"statusText":"OK","headers":{"content-type":"text/plain; charset=utf-8","content-length":"38","x-manual-case":"native-http-get-08","date":"Fri, 28 Aug 2026 07:49:35 GMT","connection":"keep-alive","keep-alive":"timeout=5"},"mimeType":"text/plain","charset":"utf-8"}}} +{"schemaVersion":1,"sequence":24,"recordedAt":"2026-08-28T07:49:35.680Z","method":"Network.loadingFinished","params":{"requestId":"node-network-event-9","timestamp":186.863}} diff --git a/output/playwright/pr-64/artifacts/native-finalize-summary.json b/output/playwright/pr-64/artifacts/native-finalize-summary.json new file mode 100644 index 0000000..9a594b6 --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-finalize-summary.json @@ -0,0 +1,90 @@ +{ + "sessionDirectory": "/.runtime/native-session-1787903188869", + "manualAssertions": { + "passed": true, + "discovery": { + "list": { + "ok": true, + "targetCount": 1, + "targetIdMatches": true + }, + "version": { + "ok": true, + "browser": "node.js/v24.16.0", + "protocolVersion": "1.1" + }, + "protocol": { + "ok": true, + "domainCount": 14, + "networkDomain": true, + "networkCommandCount": 6, + "networkEventCount": 8 + } + }, + "failedLifecycle": { + "requestId": "node-network-event-5", + "requestWillBeSent": 1, + "responseReceived": 0, + "loadingFinished": 0, + "loadingFailed": 1 + }, + "webSocketBoundary": { + "lifecycleCreated": 1, + "lifecycleClosed": 1, + "framesSent": 0, + "framesReceived": 0, + "expectedFrameCapture": false + }, + "sseBoundary": { + "requestCaptured": true, + "messageEvents": 0, + "expectedMessageCapture": false + }, + "traceBoundary": { + "explicitTraceRequests": 1, + "explicitTracePreserved": true, + "untracedBusinessRequests": 6, + "untracedHeadersAbsent": true + } + }, + "manifest": { + "schemaVersion": 1, + "state": "completed", + "stats": { + "eventCount": 24, + "requestCount": 9, + "bodyCount": 6, + "bodyErrorCount": 0, + "failedRequestCount": 1 + }, + "issues": [], + "traceContexts": [ + { + "requestId": "node-network-event-4", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "tracestate": "vendor=manual-pr64" + } + ] + }, + "har": { + "version": "1.2", + "creator": { + "name": "node-network-devtools", + "version": "2" + }, + "entries": 9, + "statuses": [200, 200, 201, 200, 0, 200, 0, 0, 200], + "replayableEntries": 5 + }, + "replay": { + "dryRun": true, + "dryRunRequests": 5, + "dryRunPassed": true, + "realRequests": 5, + "realPassed": true + }, + "originLeakCount": 0 +} diff --git a/output/playwright/pr-64/artifacts/native-http2-probe.json b/output/playwright/pr-64/artifacts/native-http2-probe.json new file mode 100644 index 0000000..7aed7cd --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-http2-probe.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "testedProductCommit": "449d47db89109e826eb0e7e0584777365eac3f9b", + "tarballSha256": "e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac", + "probe": "manual-native-http2-probe.mjs", + "request": { + "protocol": "h2c", + "status": 200, + "responseBody": "h2-ok", + "consumerBehavior": "request.setEncoding('utf8') plus data consumption" + }, + "cases": [ + { + "node": "v22.22.3", + "exitCode": 0, + "advertisedHttp2": true, + "eventSequence": [ + "Network.requestWillBeSent", + "Network.responseReceived", + "Network.loadingFinished" + ], + "receivedBody": "h2-ok", + "outcome": "complete lifecycle" + }, + { + "node": "v24.16.0", + "exitCode": 1, + "advertisedHttp2": false, + "eventSequence": ["Network.requestWillBeSent", "Network.responseReceived"], + "receivedBody": null, + "error": "TypeError: Missing dataLength in event", + "source": "node:internal/inspector/network_http2:222", + "outcome": "upstream Inspector crash reproduced; capability correctly withheld" + }, + { + "node": "v26.8.1", + "exitCode": 1, + "advertisedHttp2": false, + "eventSequence": ["Network.requestWillBeSent", "Network.responseReceived"], + "receivedBody": null, + "error": "TypeError: Missing dataLength in event", + "source": "node:internal/inspector/network_http2:223", + "outcome": "upstream Inspector crash reproduced; capability correctly withheld" + } + ], + "assertion": { + "status": "PASS", + "reason": "The exact package advertises HTTP/2 only on the verified Node 22.20+ 22.x line and does not inherit support into affected or future majors." + } +} diff --git a/output/playwright/pr-64/artifacts/native-replayable.har b/output/playwright/pr-64/artifacts/native-replayable.har new file mode 100644 index 0000000..82e19b3 --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-replayable.har @@ -0,0 +1,440 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "node-network-devtools", + "version": "2" + }, + "pages": [], + "entries": [ + { + "startedDateTime": "2026-08-28T07:47:55.119Z", + "time": 2.7000000000043656, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/get?token=native-http-get-01", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-http-get-01" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "x-manual-case", + "value": "native-http-get-01" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:47:55 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 38, + "mimeType": "text/plain", + "text": "manual-get-response:native-http-get-01" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 38 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 2.3999999999944066, + "receive": 0.30000000000995897, + "ssl": -1 + }, + "_requestId": "node-network-event-1" + }, + { + "startedDateTime": "2026-08-28T07:48:03.101Z", + "time": 10.100000000008436, + "request": { + "method": "POST", + "url": "http://127.0.0.1:58925/post?token=native-fetch-post-03", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "x-manual-case", + "value": "native-fetch-post-03" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-language", + "value": "*" + }, + { + "name": "sec-fetch-mode", + "value": "cors" + }, + { + "name": "user-agent", + "value": "node" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-fetch-post-03" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 201, + "statusText": "Created", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "89" + }, + { + "name": "x-manual-case", + "value": "native-fetch-post-03" + }, + { + "name": "Date", + "value": "Fri, 28 Aug 2026 07:48:03 GMT" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Keep-Alive", + "value": "timeout=5" + } + ], + "content": { + "size": 89, + "mimeType": "application/json", + "text": "{\"token\":\"native-fetch-post-03\",\"requestBody\":\"manual-request-body:native-fetch-post-03\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 89 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 9.699999999995157, + "receive": 0.4000000000132786, + "ssl": -1 + }, + "_requestId": "node-network-event-3" + }, + { + "startedDateTime": "2026-08-28T07:48:07.066Z", + "time": 3.0000000000001137, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/trace?token=native-trace-04", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "traceparent", + "value": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" + }, + { + "name": "tracestate", + "value": "vendor=manual-pr64" + }, + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-trace-04" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "133" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:48:07 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 133, + "mimeType": "application/json", + "text": "{\"token\":\"native-trace-04\",\"traceparent\":\"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\"tracestate\":\"vendor=manual-pr64\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 133 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 2.7000000000043656, + "receive": 0.2999999999957481, + "ssl": -1 + }, + "_requestId": "node-network-event-4", + "_trace": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "version": "00", + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "tracestate": "vendor=manual-pr64" + } + }, + { + "startedDateTime": "2026-08-28T07:48:15.008Z", + "time": 4.9999999999954525, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/sse?token=native-sse-06", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-language", + "value": "*" + }, + { + "name": "sec-fetch-mode", + "value": "cors" + }, + { + "name": "user-agent", + "value": "node" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-sse-06" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/event-stream; charset=utf-8" + }, + { + "name": "content-length", + "value": "81" + }, + { + "name": "cache-control", + "value": "no-cache" + }, + { + "name": "Date", + "value": "Fri, 28 Aug 2026 07:48:15 GMT" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Keep-Alive", + "value": "timeout=5" + } + ], + "content": { + "size": 81, + "mimeType": "text/event-stream", + "text": "id: 1\nevent: manual\ndata: sse-native-sse-06\n\nid: 2\ndata: complete-native-sse-06\n\n" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 81 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 4.9999999999954525, + "receive": 0, + "ssl": -1 + }, + "_requestId": "node-network-event-6" + }, + { + "startedDateTime": "2026-08-28T07:49:35.674Z", + "time": 2.999999999985903, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/get?token=native-http-get-08", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-http-get-08" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "x-manual-case", + "value": "native-http-get-08" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:49:35 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 38, + "mimeType": "text/plain", + "text": "manual-get-response:native-http-get-08" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 38 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 1.999999999981128, + "receive": 1.0000000000047748, + "ssl": -1 + }, + "_requestId": "node-network-event-9" + } + ] + } +} diff --git a/output/playwright/pr-64/artifacts/native-runtime.json b/output/playwright/pr-64/artifacts/native-runtime.json new file mode 100644 index 0000000..075aa33 --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-runtime.json @@ -0,0 +1,76 @@ +{ + "schemaVersion": 1, + "productCommit": "449d47db89109e826eb0e7e0584777365eac3f9b", + "package": { + "name": "node-network-devtools", + "version": "2.0.0" + }, + "tarballSha256": "e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac", + "node": "v24.16.0", + "platform": "darwin-arm64", + "backend": "native", + "selectedMode": "native", + "fallbackReason": null, + "capabilities": { + "http": true, + "https": true, + "fetch": true, + "http2": false, + "responseBody": true, + "requestBody": false, + "websocketLifecycle": true, + "websocketFrames": false, + "sseMessages": false, + "initiator": true + }, + "target": { + "id": "c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "title": "output/playwright/pr-64/manual-evidence-server.mjs", + "type": "node", + "url": "file:///manual-evidence-server.mjs", + "webSocketDebuggerUrl": "ws://127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "discoveryUrl": "http://127.0.0.1:58927/json/list" + }, + "discovery": [ + { + "description": "node.js instance", + "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "faviconUrl": "https://nodejs.org/static/images/favicons/favicon.ico", + "id": "c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "title": "output/playwright/pr-64/manual-evidence-server.mjs", + "type": "node", + "url": "file:///manual-evidence-server.mjs", + "webSocketDebuggerUrl": "ws://127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5" + } + ], + "discoveryContract": { + "list": { + "ok": true, + "targetCount": 1, + "targetIdMatches": true + }, + "version": { + "ok": true, + "browser": "node.js/v24.16.0", + "protocolVersion": "1.1" + }, + "protocol": { + "ok": true, + "domainCount": 14, + "networkDomain": true, + "networkCommandCount": 6, + "networkEventCount": 8 + } + }, + "frontendUrl": "http://127.0.0.1:58933/devtools/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5&hl=en-US", + "controlUrl": "http://127.0.0.1:58934", + "originalFunctionsPreserved": { + "fetch": true, + "httpRequest": true, + "httpsRequest": true + }, + "sourceSha256": "46f81eb2930040a31f402cf4cb113758628eb72c9db27617babba1d3df31af27" +} diff --git a/output/playwright/pr-64/artifacts/native-session-manifest.json b/output/playwright/pr-64/artifacts/native-session-manifest.json new file mode 100644 index 0000000..1661ea9 --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-session-manifest.json @@ -0,0 +1,354 @@ +{ + "schemaVersion": 1, + "sessionId": "96007c32-4e84-481a-8012-953ccaac8a57", + "state": "completed", + "createdAt": "2026-08-28T07:46:29.081Z", + "target": { + "id": "c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "title": "output/playwright/pr-64/manual-evidence-server.mjs", + "type": "node", + "url": "file:///manual-evidence-server.mjs", + "webSocketDebuggerUrl": "ws://127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "devtoolsFrontendUrl": "devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "devtoolsFrontendUrlCompat": "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:58927/c91298d7-d6f3-4ef5-8a54-f6ef4a0393b5", + "discoveryUrl": "http://127.0.0.1:58927/json/list" + }, + "files": { + "events": "events.ndjson", + "bodies": "bodies" + }, + "completedAt": "2026-08-28T07:49:48.484Z", + "stats": { + "eventCount": 24, + "requestCount": 9, + "bodyCount": 6, + "bodyErrorCount": 0, + "failedRequestCount": 1 + }, + "requestIndex": { + "node-network-event-1": { + "requestId": "node-network-event-1", + "firstSequence": 1, + "requestTimestamp": 86.3044, + "wallTime": 1787903275119, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:58925/get?token=native-http-get-01", + "method": "GET", + "headers": { + "host": "127.0.0.1:58925" + }, + "hasPostData": false + }, + "responseTimestamp": 86.3068, + "response": { + "url": "http://127.0.0.1:58925/get?token=native-http-get-01", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "text/plain; charset=utf-8", + "content-length": "38", + "x-manual-case": "native-http-get-01", + "date": "Fri, 28 Aug 2026 07:47:55 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "mimeType": "text/plain", + "charset": "utf-8" + }, + "finishedTimestamp": 86.3071 + }, + "node-network-event-2": { + "requestId": "node-network-event-2", + "firstSequence": 4, + "requestTimestamp": 90.2372, + "wallTime": 1787903279052, + "resourceType": "Other", + "request": { + "url": "https://127.0.0.1:58926/secure-get?token=native-https-get-02", + "method": "GET", + "headers": { + "host": "127.0.0.1:58926" + }, + "hasPostData": false + }, + "responseTimestamp": 90.245, + "response": { + "url": "https://127.0.0.1:58926/secure-get?token=native-https-get-02", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "text/plain; charset=utf-8", + "content-length": "41", + "x-manual-case": "native-https-get-02", + "date": "Fri, 28 Aug 2026 07:47:59 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "mimeType": "text/plain", + "charset": "utf-8" + }, + "finishedTimestamp": 90.2455 + }, + "node-network-event-3": { + "requestId": "node-network-event-3", + "firstSequence": 7, + "requestTimestamp": 94.2859, + "wallTime": 1787903283101, + "resourceType": "Fetch", + "request": { + "url": "http://127.0.0.1:58925/post?token=native-fetch-post-03", + "method": "POST", + "headers": { + "content-type": "text/plain; charset=utf-8", + "x-manual-case": "native-fetch-post-03", + "accept": "*/*", + "accept-language": "*", + "sec-fetch-mode": "cors", + "user-agent": "node", + "accept-encoding": "gzip, deflate" + }, + "hasPostData": true + }, + "responseTimestamp": 94.2956, + "response": { + "url": "http://127.0.0.1:58925/post?token=native-fetch-post-03", + "status": 201, + "statusText": "Created", + "headers": { + "content-type": "application/json; charset=utf-8", + "content-length": "89", + "x-manual-case": "native-fetch-post-03", + "Date": "Fri, 28 Aug 2026 07:48:03 GMT", + "Connection": "keep-alive", + "Keep-Alive": "timeout=5" + }, + "mimeType": "application/json", + "charset": "utf-8" + }, + "finishedTimestamp": 94.296 + }, + "node-network-event-4": { + "requestId": "node-network-event-4", + "firstSequence": 10, + "requestTimestamp": 98.2512, + "wallTime": 1787903287066, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:58925/trace?token=native-trace-04", + "method": "GET", + "headers": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "tracestate": "vendor=manual-pr64", + "host": "127.0.0.1:58925" + }, + "hasPostData": false + }, + "trace": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "version": "00", + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "tracestate": "vendor=manual-pr64" + }, + "responseTimestamp": 98.2539, + "response": { + "url": "http://127.0.0.1:58925/trace?token=native-trace-04", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "application/json; charset=utf-8", + "content-length": "133", + "date": "Fri, 28 Aug 2026 07:48:07 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "mimeType": "application/json", + "charset": "utf-8" + }, + "finishedTimestamp": 98.2542 + }, + "node-network-event-5": { + "requestId": "node-network-event-5", + "firstSequence": 13, + "requestTimestamp": 102.21, + "wallTime": 1787903291025, + "request": { + "url": "http://127.0.0.1:58925/reset?token=native-failed-05", + "method": "GET", + "headers": { + "host": "127.0.0.1:58925" + }, + "hasPostData": false + }, + "finishedTimestamp": 102.212, + "failure": { + "errorText": "socket hang up" + } + }, + "node-network-event-6": { + "requestId": "node-network-event-6", + "firstSequence": 15, + "requestTimestamp": 106.193, + "wallTime": 1787903295008, + "resourceType": "Fetch", + "request": { + "url": "http://127.0.0.1:58925/sse?token=native-sse-06", + "method": "GET", + "headers": { + "accept": "*/*", + "accept-language": "*", + "sec-fetch-mode": "cors", + "user-agent": "node", + "accept-encoding": "gzip, deflate" + }, + "hasPostData": false + }, + "responseTimestamp": 106.198, + "response": { + "url": "http://127.0.0.1:58925/sse?token=native-sse-06", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "text/event-stream; charset=utf-8", + "content-length": "81", + "cache-control": "no-cache", + "Date": "Fri, 28 Aug 2026 07:48:15 GMT", + "Connection": "keep-alive", + "Keep-Alive": "timeout=5" + }, + "mimeType": "text/event-stream", + "charset": "utf-8" + }, + "finishedTimestamp": 106.198 + }, + "node-network-event-7": { + "requestId": "node-network-event-7", + "firstSequence": 18, + "requestTimestamp": 110.152, + "wallTime": 1787903298967, + "request": { + "url": "http://127.0.0.1:58925/websocket?token=native-websocket-07", + "method": "GET", + "headers": { + "sec-websocket-key": "iVtSkmOz5zD/H90P5l+npg==", + "sec-websocket-version": "13", + "sec-websocket-extensions": "permessage-deflate; client_max_window_bits", + "accept": "*/*", + "accept-language": "*", + "sec-fetch-mode": "websocket", + "user-agent": "node", + "pragma": "no-cache", + "cache-control": "no-cache", + "accept-encoding": "gzip, deflate" + }, + "hasPostData": false + } + }, + "node-network-event-8": { + "requestId": "node-network-event-8", + "firstSequence": 19 + }, + "node-network-event-9": { + "requestId": "node-network-event-9", + "firstSequence": 22, + "requestTimestamp": 186.86, + "wallTime": 1787903375674, + "resourceType": "Other", + "request": { + "url": "http://127.0.0.1:58925/get?token=native-http-get-08", + "method": "GET", + "headers": { + "host": "127.0.0.1:58925" + }, + "hasPostData": false + }, + "responseTimestamp": 186.862, + "response": { + "url": "http://127.0.0.1:58925/get?token=native-http-get-08", + "status": 200, + "statusText": "OK", + "headers": { + "content-type": "text/plain; charset=utf-8", + "content-length": "38", + "x-manual-case": "native-http-get-08", + "date": "Fri, 28 Aug 2026 07:49:35 GMT", + "connection": "keep-alive", + "keep-alive": "timeout=5" + }, + "mimeType": "text/plain", + "charset": "utf-8" + }, + "finishedTimestamp": 186.863 + } + }, + "bodyIndex": { + "node-network-event-1": { + "requestId": "node-network-event-1", + "path": "bodies/31cc118298853420-8c7e40e0ebf9259cbe9ca6193c5963e56e6cfe3cb357c8771e779d74ee374208.body", + "sha256": "8c7e40e0ebf9259cbe9ca6193c5963e56e6cfe3cb357c8771e779d74ee374208", + "byteLength": 38, + "base64Encoded": false, + "mimeType": "text/plain" + }, + "node-network-event-2": { + "requestId": "node-network-event-2", + "path": "bodies/e83ceaae23523325-1f1c69670cc5d899a65e5b968b2275f0d41e77d46ea3b50a62a3fa611201d6b4.body", + "sha256": "1f1c69670cc5d899a65e5b968b2275f0d41e77d46ea3b50a62a3fa611201d6b4", + "byteLength": 41, + "base64Encoded": false, + "mimeType": "text/plain" + }, + "node-network-event-3": { + "requestId": "node-network-event-3", + "path": "bodies/6ed405c68abbc3e2-f607b5ba8e0e9dd7ac298b7e45424e59d2cdcb21d620d9dc3aabac6ec089a198.body", + "sha256": "f607b5ba8e0e9dd7ac298b7e45424e59d2cdcb21d620d9dc3aabac6ec089a198", + "byteLength": 89, + "base64Encoded": false, + "mimeType": "application/json" + }, + "node-network-event-4": { + "requestId": "node-network-event-4", + "path": "bodies/98fa223a6be7aac1-28b7171e7edc8622367ffe1a9d56d463e5c79846041266e3d122b03a7121622a.body", + "sha256": "28b7171e7edc8622367ffe1a9d56d463e5c79846041266e3d122b03a7121622a", + "byteLength": 133, + "base64Encoded": false, + "mimeType": "application/json" + }, + "node-network-event-6": { + "requestId": "node-network-event-6", + "path": "bodies/560ae859abcea7a8-b85d7e9db80dcd113d5b1b870dbfe8480f4b087a6c51343f64fb107fda7eecfb.body", + "sha256": "b85d7e9db80dcd113d5b1b870dbfe8480f4b087a6c51343f64fb107fda7eecfb", + "byteLength": 81, + "base64Encoded": false, + "mimeType": "text/event-stream" + }, + "node-network-event-9": { + "requestId": "node-network-event-9", + "path": "bodies/c3a84d1b8ac9c35a-cf096cabf3ea54d3263c5638aee98e7a20fb9394de4b8732d0b4170c0859ba5e.body", + "sha256": "cf096cabf3ea54d3263c5638aee98e7a20fb9394de4b8732d0b4170c0859ba5e", + "byteLength": 38, + "base64Encoded": false, + "mimeType": "text/plain" + } + }, + "traceIndex": { + "4bf92f3577b34da6a3ce929d0e0e4736": { + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "requestIds": ["node-network-event-4"], + "spans": [ + { + "requestId": "node-network-event-4", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "tracestate": "vendor=manual-pr64" + } + ] + } + }, + "issues": [] +} diff --git a/output/playwright/pr-64/artifacts/native-session.har b/output/playwright/pr-64/artifacts/native-session.har new file mode 100644 index 0000000..ce30c22 --- /dev/null +++ b/output/playwright/pr-64/artifacts/native-session.har @@ -0,0 +1,691 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "node-network-devtools", + "version": "2" + }, + "pages": [], + "entries": [ + { + "startedDateTime": "2026-08-28T07:47:55.119Z", + "time": 2.7000000000043656, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/get?token=native-http-get-01", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-http-get-01" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "x-manual-case", + "value": "native-http-get-01" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:47:55 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 38, + "mimeType": "text/plain", + "text": "manual-get-response:native-http-get-01" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 38 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 2.3999999999944066, + "receive": 0.30000000000995897, + "ssl": -1 + }, + "_requestId": "node-network-event-1" + }, + { + "startedDateTime": "2026-08-28T07:47:59.052Z", + "time": 8.300000000005525, + "request": { + "method": "GET", + "url": "https://127.0.0.1:58926/secure-get?token=native-https-get-02", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:58926" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-https-get-02" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "41" + }, + { + "name": "x-manual-case", + "value": "native-https-get-02" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:47:59 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 41, + "mimeType": "text/plain", + "text": "manual-https-response:native-https-get-02" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 41 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 7.800000000003138, + "receive": 0.5000000000023874, + "ssl": -1 + }, + "_requestId": "node-network-event-2" + }, + { + "startedDateTime": "2026-08-28T07:48:03.101Z", + "time": 10.100000000008436, + "request": { + "method": "POST", + "url": "http://127.0.0.1:58925/post?token=native-fetch-post-03", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "x-manual-case", + "value": "native-fetch-post-03" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-language", + "value": "*" + }, + { + "name": "sec-fetch-mode", + "value": "cors" + }, + { + "name": "user-agent", + "value": "node" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-fetch-post-03" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 201, + "statusText": "Created", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "89" + }, + { + "name": "x-manual-case", + "value": "native-fetch-post-03" + }, + { + "name": "Date", + "value": "Fri, 28 Aug 2026 07:48:03 GMT" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Keep-Alive", + "value": "timeout=5" + } + ], + "content": { + "size": 89, + "mimeType": "application/json", + "text": "{\"token\":\"native-fetch-post-03\",\"requestBody\":\"manual-request-body:native-fetch-post-03\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 89 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 9.699999999995157, + "receive": 0.4000000000132786, + "ssl": -1 + }, + "_requestId": "node-network-event-3" + }, + { + "startedDateTime": "2026-08-28T07:48:07.066Z", + "time": 3.0000000000001137, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/trace?token=native-trace-04", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "traceparent", + "value": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" + }, + { + "name": "tracestate", + "value": "vendor=manual-pr64" + }, + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-trace-04" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "133" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:48:07 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 133, + "mimeType": "application/json", + "text": "{\"token\":\"native-trace-04\",\"traceparent\":\"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\"tracestate\":\"vendor=manual-pr64\"}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 133 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 2.7000000000043656, + "receive": 0.2999999999957481, + "ssl": -1 + }, + "_requestId": "node-network-event-4", + "_trace": { + "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "version": "00", + "traceId": "4bf92f3577b34da6a3ce929d0e0e4736", + "parentId": "00f067aa0ba902b7", + "traceFlags": "01", + "sampled": true, + "tracestate": "vendor=manual-pr64" + } + }, + { + "startedDateTime": "2026-08-28T07:48:11.025Z", + "time": 2.0000000000095497, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/reset?token=native-failed-05", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-failed-05" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 0, + "statusText": "socket hang up", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "content": { + "size": 0, + "mimeType": "application/octet-stream" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "node-network-event-5", + "_failure": { + "errorText": "socket hang up" + } + }, + { + "startedDateTime": "2026-08-28T07:48:15.008Z", + "time": 4.9999999999954525, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/sse?token=native-sse-06", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-language", + "value": "*" + }, + { + "name": "sec-fetch-mode", + "value": "cors" + }, + { + "name": "user-agent", + "value": "node" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-sse-06" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/event-stream; charset=utf-8" + }, + { + "name": "content-length", + "value": "81" + }, + { + "name": "cache-control", + "value": "no-cache" + }, + { + "name": "Date", + "value": "Fri, 28 Aug 2026 07:48:15 GMT" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Keep-Alive", + "value": "timeout=5" + } + ], + "content": { + "size": 81, + "mimeType": "text/event-stream", + "text": "id: 1\nevent: manual\ndata: sse-native-sse-06\n\nid: 2\ndata: complete-native-sse-06\n\n" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 81 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 4.9999999999954525, + "receive": 0, + "ssl": -1 + }, + "_requestId": "node-network-event-6" + }, + { + "startedDateTime": "2026-08-28T07:48:18.967Z", + "time": 0, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/websocket?token=native-websocket-07", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "sec-websocket-key", + "value": "iVtSkmOz5zD/H90P5l+npg==" + }, + { + "name": "sec-websocket-version", + "value": "13" + }, + { + "name": "sec-websocket-extensions", + "value": "permessage-deflate; client_max_window_bits" + }, + { + "name": "accept", + "value": "*/*" + }, + { + "name": "accept-language", + "value": "*" + }, + { + "name": "sec-fetch-mode", + "value": "websocket" + }, + { + "name": "user-agent", + "value": "node" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "cache-control", + "value": "no-cache" + }, + { + "name": "accept-encoding", + "value": "gzip, deflate" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-websocket-07" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 0, + "statusText": "", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "content": { + "size": 0, + "mimeType": "application/octet-stream" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "node-network-event-7" + }, + { + "startedDateTime": "2026-08-28T07:46:29.081Z", + "time": 0, + "request": { + "method": "GET", + "url": "", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "queryString": [], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 0, + "statusText": "", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [], + "content": { + "size": 0, + "mimeType": "application/octet-stream" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 0, + "receive": 0, + "ssl": -1 + }, + "_requestId": "node-network-event-8" + }, + { + "startedDateTime": "2026-08-28T07:49:35.674Z", + "time": 2.999999999985903, + "request": { + "method": "GET", + "url": "http://127.0.0.1:58925/get?token=native-http-get-08", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "host", + "value": "127.0.0.1:58925" + } + ], + "queryString": [ + { + "name": "token", + "value": "native-http-get-08" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "content-length", + "value": "38" + }, + { + "name": "x-manual-case", + "value": "native-http-get-08" + }, + { + "name": "date", + "value": "Fri, 28 Aug 2026 07:49:35 GMT" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "name": "keep-alive", + "value": "timeout=5" + } + ], + "content": { + "size": 38, + "mimeType": "text/plain", + "text": "manual-get-response:native-http-get-08" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": 38 + }, + "cache": {}, + "timings": { + "blocked": -1, + "dns": -1, + "connect": -1, + "send": -1, + "wait": 1.999999999981128, + "receive": 1.0000000000047748, + "ssl": -1 + }, + "_requestId": "node-network-event-9" + } + ] + } +} diff --git a/output/playwright/pr-64/checksums.sha256 b/output/playwright/pr-64/checksums.sha256 new file mode 100644 index 0000000..c4dba30 --- /dev/null +++ b/output/playwright/pr-64/checksums.sha256 @@ -0,0 +1,51 @@ +f34efafe391d151dde34d036eab4e101d41a79fef639d89667b4a2c7d7edc34b artifacts/cli-manual-results.json +d4eca8f827e76e30fd41456143c8f8e821b858b6258b9ae5b7f3f823eff884ca artifacts/cli-replay-fixture.har +ef734c395e25dec7edf8c58f08bdcf200e6504890d2639242c7faff0c5d4f361 artifacts/legacy-dispose-summary.json +1c8dc82c4389c8398ffcc858a9887b4eec3c92252d96214bb0fd1e1b95c41f6e artifacts/legacy-events.ndjson +c4199e87cde4792f0d5659a8dba6f6bc87d9d38fd24e5e17fe5b4c07e9b5d2be artifacts/legacy-finalize-summary.json +d0cfb108f63d85fdb71a038a0b5d55b3752cbb194492063df118312ca8267961 artifacts/legacy-replayable.har +4ee556d247e811da5377a2b313284b7b787509ed79aa7fa8959362aec1de44e2 artifacts/legacy-runtime.json +6fd54e0ef211120b3a38ea623b349809194ae4b76937e2ff2cd10f0d851c87dd artifacts/legacy-session-manifest.json +71ba517f3b9922b36f53e9eac7dda3d96cc3fc787dfd80142f9f34df58872587 artifacts/legacy-session.har +ef734c395e25dec7edf8c58f08bdcf200e6504890d2639242c7faff0c5d4f361 artifacts/native-dispose-summary.json +7f19518e3f71418f7d94ad8085ac6c538a9b721b3e31dc285709390ed8069df3 artifacts/native-events.ndjson +865d93beae666def9e9fa07eea2dc89ee557e68cdd03410cc71acb857c71612a artifacts/native-finalize-summary.json +8089726ff924c3dc62c66b4cd05bb206a4328b4e36c4cc81288740b2ebac2390 artifacts/native-http2-probe.json +a9db6dc74b322c39307d8ca0276672377873ddcf0d9c39b3ec3d2349cf6f4b84 artifacts/native-replayable.har +50023a8d9644d373a32750e09b7c601a1f1601aa1aba40528d79ff5b561f7d50 artifacts/native-runtime.json +38612d7fc0de6a610765f14663e6dd0dc04eb86713ed3ed69e634984fbefccc0 artifacts/native-session-manifest.json +eeaee3411588315d22bea3b5bc6d49801c42e562022ffda382fe63f8bd0be1e7 artifacts/native-session.har +0c322878c3ac124fe8cfeff269ef8ed87a15fbfc81a59639611f9a036a260390 manifest.json +fa7a9fee5c940e725c37414bce03dba5a349e43a13d1a230750657e22626a083 manual-cli-case.sh +b0f2501a432a19513d19883b7d2efd83dbdaa451a3a9eda1fcfe06131469ec1e manual-cli-evidence-server.mjs +46f81eb2930040a31f402cf4cb113758628eb72c9db27617babba1d3df31af27 manual-evidence-server.mjs +7975bd338de114fc682a4942688496fa0d53945ef400a7b4069f748b0ad0d18b manual-localhost-cert.pem +454d203a290b11eda450af412047157a1cdf142cadf4c7a6c2c59b59776f38fb manual-localhost-key.pem +5a16264481f0c09e1db3200432be162acddc7573b5053b35f2ff0eb327878cfc manual-native-http2-probe.mjs +99e0983a5ee31178beecddf0b8b10f19ba7f04b36ed8b4fbe8b7b93527d1fdd6 manual-native-mock-conflict.mjs +0d1df924aaef8eac60d7c60b77d55e3856c51c9e32d1878888afcf45a2a2df16 screenshots/MT-01-cli-version-doctor-native.png +45c90d44ead071c0821f41e260c634ad48bd50e161a25d226b550936f8008b20 screenshots/MT-02-cli-zero-code-and-conflict.png +c2031cce1cfff68bfa763aef8839c7729d1b54a2cd8f31a8fdebcb2db4cfbe71 screenshots/MT-03-native-runtime-and-capabilities.png +8f31650d6374c3ab49fed9fa49301b99bb57a41e5b3b0758953b4a12081466f5 screenshots/MT-04-native-version.png +072e937ab5a7de08f150fd5fdc98294cc71fc87ac60da59596c309655df619e1 screenshots/MT-05-native-devtools-network-list.png +dc3ec6a367ca6143772eb4bc4b71db44b11524cd737b4e0ab1e4f8f9142bc391 screenshots/MT-05-native-fetch-headers.png +da6d4cbd7f5158605788007086ddb49c259cf1e60a06c2eb8495c97e60053616 screenshots/MT-05-native-fetch-response.png +2c6024dd1510383b7fd6c22ebef6f45e9cebac39911b0543f1ef1ebf73d07ce9 screenshots/MT-06-native-devtools-reload-reconnect.png +16b537e7df8e9ec90ec175c55e8d196dc10dea2d96f6cbe29c153a8561557be6 screenshots/MT-07-legacy-runtime-and-capabilities.png +51f37216e97186cda052b151dc95941d8644a9316a676df7362598e61bdb637f screenshots/MT-08-legacy-version.png +1908657aa0ee8a8e52173c247994a28e8334a464b93b4296e569ab7384d28d34 screenshots/MT-09-legacy-devtools-network-list.png +dc9e4be668ef3af1ffef8ec3885ac65497d0fdf7776572dc50c81e43937886d2 screenshots/MT-09-legacy-fetch-payload.png +6c3c5e61cc01c52c0c360c7c0a5a8c96af35d19af56bf0b815b2dc15933c39e0 screenshots/MT-09-legacy-fetch-response.png +fcaa05f2189a06149dfeb9c33fa8e7e15f2a58ff5bc6619e1a7fc7d0c6cf429a screenshots/MT-10-legacy-mock-fetch-response.png +79b0877b95f98d1f33e9c909d05127d3e0281ae2bce9ca5f01b5e02dde0daf74 screenshots/MT-10-legacy-mock-http-response.png +ee7ba9a6291e7cb424dbbd987625f2359c6a74c7ef65810f8c9ce3fbe5a12aa5 screenshots/MT-11-legacy-sse-eventstream.png +502304fb3ebb7fe3cb5de7b1246a7fc495963a6b89223f4f275dd8816bfd320d screenshots/MT-11-legacy-websocket-messages.png +ff34e249b69ead76153c195a8508faa120db07aebbfe54cf533442d838012720 screenshots/MT-11-native-websocket-lifecycle.png +3eb522a9f6a3e0d677899d88a6bb5823ebdc899c9c5d687ce1c37706d3e55df6 screenshots/MT-12-legacy-session-har-replay-trace.png +95be16feaaab913174c623d0bf79c0730f16a0117254add4495b3c714d06d8c4 screenshots/MT-12-native-session-har-replay-trace.png +0e5297005a8e58f18e4626641ace09f24d08d37c84ad69886af21dbc06235011 screenshots/MT-13-legacy-boundary-assertions.png +fd2338052112843746471657b006d8392b73f9f9e04850be03a7a73aa663ec09 screenshots/MT-13-legacy-failed-request.png +a9c3c8df80a4447b35edcd66102c692624675378f860e2bceceeeb669309f99f screenshots/MT-13-native-boundary-assertions.png +f0ce25b01a86e27d509ba14b0ca3ed5b9256ede0f4bc776e7a21ddcc98901885 screenshots/MT-13-native-failed-request.png +fb8aba5f739fc8ae4803ffaf516606c7e313124a62fcad96c01c876cfd1943a7 screenshots/MT-14-legacy-dispose-cleanup.png +ae56050e91183a777974c7d9e14493239d51e5ace2146fd43ae1be440066b5c0 screenshots/MT-14-native-dispose-cleanup.png diff --git a/output/playwright/pr-64/manifest.json b/output/playwright/pr-64/manifest.json new file mode 100644 index 0000000..3e38816 --- /dev/null +++ b/output/playwright/pr-64/manifest.json @@ -0,0 +1,193 @@ +{ + "schemaVersion": 1, + "testRunId": "pr-64-manual-acceptance-2026-08-28", + "pullRequest": "https://github.com/GrinZero/node-network-devtools/pull/64", + "testedProductCommit": "449d47db89109e826eb0e7e0584777365eac3f9b", + "package": { + "name": "node-network-devtools", + "version": "2.0.0", + "packedFileCount": 190, + "tarballSha256": "e97dc360d2fcd5d141b13bca490f603b802dc7fe94f3b6a06a690c7a7f48e2ac" + }, + "environment": { + "node": "v24.16.0", + "compatibilityProbeNodes": ["v22.22.3", "v24.16.0", "v26.8.1"], + "platform": "darwin-arm64", + "browser": "Chrome for Testing 151.0.7922.34", + "playwrightCli": "0.1.18", + "playwrightEngine": "1.63.0-alpha-2026-08-05", + "timezone": "Asia/Shanghai", + "date": "2026-08-28" + }, + "harness": { + "manualEvidenceServerSha256": "46f81eb2930040a31f402cf4cb113758628eb72c9db27617babba1d3df31af27" + }, + "result": { + "status": "PASS", + "passed": 14, + "failed": 0, + "total": 14, + "screenshots": 26, + "structuredArtifacts": 17, + "reproductionHarnesses": 5, + "testTlsInputs": 2 + }, + "cases": [ + { + "id": "MT-01", + "title": "Exact package version and Native doctor", + "status": "PASS", + "evidence": [ + "screenshots/MT-01-cli-version-doctor-native.png", + "artifacts/cli-manual-results.json" + ] + }, + { + "id": "MT-02", + "title": "Zero-code CLI modes, conflict, replay, and exact-target open", + "status": "PASS", + "evidence": [ + "screenshots/MT-02-cli-zero-code-and-conflict.png", + "artifacts/cli-manual-results.json" + ] + }, + { + "id": "MT-03", + "title": "Native registration and capability disclosure", + "status": "PASS", + "evidence": [ + "screenshots/MT-03-native-runtime-and-capabilities.png", + "artifacts/native-runtime.json" + ] + }, + { + "id": "MT-04", + "title": "Native standard CDP discovery contract", + "status": "PASS", + "evidence": [ + "screenshots/MT-03-native-runtime-and-capabilities.png", + "screenshots/MT-04-native-version.png", + "artifacts/native-runtime.json" + ] + }, + { + "id": "MT-05", + "title": "Native HTTP, HTTPS, and Fetch in official DevTools", + "status": "PASS", + "evidence": [ + "screenshots/MT-05-native-devtools-network-list.png", + "screenshots/MT-05-native-fetch-headers.png", + "screenshots/MT-05-native-fetch-response.png", + "artifacts/native-events.ndjson" + ] + }, + { + "id": "MT-06", + "title": "Native DevTools reload and reconnect", + "status": "PASS", + "evidence": [ + "screenshots/MT-06-native-devtools-reload-reconnect.png", + "artifacts/native-session-manifest.json" + ] + }, + { + "id": "MT-07", + "title": "Auto-to-Legacy selection and capability disclosure", + "status": "PASS", + "evidence": [ + "screenshots/MT-07-legacy-runtime-and-capabilities.png", + "artifacts/legacy-runtime.json" + ] + }, + { + "id": "MT-08", + "title": "Legacy standard CDP discovery contract", + "status": "PASS", + "evidence": [ + "screenshots/MT-07-legacy-runtime-and-capabilities.png", + "screenshots/MT-08-legacy-version.png", + "artifacts/legacy-runtime.json" + ] + }, + { + "id": "MT-09", + "title": "Legacy HTTP, HTTPS, and Fetch details in official DevTools", + "status": "PASS", + "evidence": [ + "screenshots/MT-09-legacy-devtools-network-list.png", + "screenshots/MT-09-legacy-fetch-payload.png", + "screenshots/MT-09-legacy-fetch-response.png", + "artifacts/legacy-events.ndjson" + ] + }, + { + "id": "MT-10", + "title": "Legacy HTTP and Fetch mocking with zero origin leakage", + "status": "PASS", + "evidence": [ + "screenshots/MT-10-legacy-mock-http-response.png", + "screenshots/MT-10-legacy-mock-fetch-response.png", + "artifacts/legacy-finalize-summary.json" + ] + }, + { + "id": "MT-11", + "title": "Native and Legacy SSE/WebSocket capability boundaries", + "status": "PASS", + "evidence": [ + "screenshots/MT-11-native-websocket-lifecycle.png", + "screenshots/MT-11-legacy-sse-eventstream.png", + "screenshots/MT-11-legacy-websocket-messages.png", + "artifacts/native-finalize-summary.json", + "artifacts/legacy-finalize-summary.json" + ] + }, + { + "id": "MT-12", + "title": "Session, HAR, Replay, and Trace on both backends", + "status": "PASS", + "evidence": [ + "screenshots/MT-12-native-session-har-replay-trace.png", + "screenshots/MT-12-legacy-session-har-replay-trace.png", + "artifacts/cli-manual-results.json", + "artifacts/native-finalize-summary.json", + "artifacts/legacy-finalize-summary.json", + "artifacts/native-session.har", + "artifacts/legacy-session.har" + ] + }, + { + "id": "MT-13", + "title": "Failed lifecycle and Native HTTP/2 capability boundary", + "status": "PASS", + "evidence": [ + "screenshots/MT-13-native-failed-request.png", + "screenshots/MT-13-legacy-failed-request.png", + "screenshots/MT-13-native-boundary-assertions.png", + "screenshots/MT-13-legacy-boundary-assertions.png", + "artifacts/native-http2-probe.json", + "artifacts/native-finalize-summary.json", + "artifacts/legacy-finalize-summary.json" + ] + }, + { + "id": "MT-14", + "title": "Dispose and closed-endpoint verification", + "status": "PASS", + "evidence": [ + "screenshots/MT-14-native-dispose-cleanup.png", + "screenshots/MT-14-legacy-dispose-cleanup.png", + "artifacts/native-dispose-summary.json", + "artifacts/legacy-dispose-summary.json" + ] + } + ], + "notes": [ + "All business traffic was loopback-only.", + "Native requestBody, websocketFrames, and sseMessages remain false on the primary Node 24 run and were not represented as supported.", + "Native HTTP/2 is advertised only on the verified Node 22.20+ 22.x line; the expected Node 24/26 upstream crash reproductions prove why the capability is withheld there.", + "The CLI --open OS launch was redirected to an exact-target CDP verifier; separate screenshots prove a real visible connection to the official Chromium DevTools frontend.", + "Local filesystem prefixes were redacted from retained text, and raw discovery screenshots containing local file URLs were excluded.", + "Screenshots satisfy the requested visual-evidence option; no video is committed." + ] +} diff --git a/output/playwright/pr-64/manual-cli-case.sh b/output/playwright/pr-64/manual-cli-case.sh new file mode 100644 index 0000000..1582ab5 --- /dev/null +++ b/output/playwright/pr-64/manual-cli-case.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +backend="${1:-}" +if [[ "$backend" != "native" && "$backend" != "legacy" ]]; then + echo "usage: bash manual-cli-case.sh " >&2 + exit 2 +fi + +evidence_root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +repo_root="$(cd "$evidence_root/../../.." && pwd)" +nnd="$evidence_root/consumer/node_modules/.bin/nnd" +fixture="$repo_root/packages/network-debugger/test/e2e/cli/fixtures/probe.mjs" + +"$nnd" dev --no-wait --mode "$backend" "$fixture" 2>/dev/null \ + | sed -n 's/^@@NND_E2E@@//p' \ + | jq '{type,label,preloadInjected,mode,execArgv,capabilities}' diff --git a/output/playwright/pr-64/manual-cli-evidence-server.mjs b/output/playwright/pr-64/manual-cli-evidence-server.mjs new file mode 100644 index 0000000..f47ca6f --- /dev/null +++ b/output/playwright/pr-64/manual-cli-evidence-server.mjs @@ -0,0 +1,456 @@ +import { spawn } from 'node:child_process' +import { createServer } from 'node:http' +import { mkdir, readFile, rm, writeFile } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const evidenceRoot = dirname(fileURLToPath(import.meta.url)) +const repoRoot = resolve(evidenceRoot, '../../..') +const nndPath = resolve(evidenceRoot, 'consumer/node_modules/.bin/nnd') +const fixturePath = resolve(repoRoot, 'packages/network-debugger/test/e2e/cli/fixtures/probe.mjs') +const conflictPath = resolve(evidenceRoot, 'manual-native-mock-conflict.mjs') +const artifactPath = resolve(evidenceRoot, 'artifacts/cli-manual-results.json') +const replayFixturePath = resolve(evidenceRoot, 'artifacts/cli-replay-fixture.har') +const openRecordPath = resolve(evidenceRoot, '.runtime/cli-open.ndjson') +const frontendOpenHookPath = resolve( + repoRoot, + 'packages/network-debugger/test/e2e/cli/fixtures/frontend-open-hook.cjs' +) +const frontendRunnerPath = resolve( + repoRoot, + 'packages/network-debugger/test/e2e/cli/fixtures/frontend-cdp-runner.mjs' +) +const productCommit = process.env.NND_MANUAL_PRODUCT_COMMIT ?? 'unknown' +const tarballSha256 = process.env.NND_MANUAL_TARBALL_SHA256 ?? 'unknown' + +const results = new Map() +const replayOriginRecords = [] +let baseUrl + +const pathRedactions = [ + [resolve(evidenceRoot, 'consumer'), ''], + [evidenceRoot, ''], + [repoRoot, ''] +] + +function redactEvidence(value) { + if (typeof value === 'string') { + return pathRedactions.reduce( + (redacted, [path, replacement]) => redacted.replaceAll(path, replacement), + value + ) + } + if (Array.isArray(value)) return value.map(redactEvidence) + if (value && typeof value === 'object') { + return Object.fromEntries( + Object.entries(value).map(([name, entry]) => [name, redactEvidence(entry)]) + ) + } + return value +} + +function run(command, args, { env = {}, timeoutMs = 20_000 } = {}) { + return new Promise((resolveRun, rejectRun) => { + const child = spawn(command, args, { + cwd: repoRoot, + env: { ...process.env, NO_COLOR: '1', FORCE_COLOR: '0', ...env }, + stdio: ['ignore', 'pipe', 'pipe'] + }) + let stdout = '' + let stderr = '' + child.stdout.setEncoding('utf8') + child.stderr.setEncoding('utf8') + child.stdout.on('data', (chunk) => (stdout += chunk)) + child.stderr.on('data', (chunk) => (stderr += chunk)) + const timeout = setTimeout(() => { + child.kill('SIGTERM') + rejectRun(new Error(`Command timed out after ${timeoutMs}ms: ${command} ${args.join(' ')}`)) + }, timeoutMs) + child.once('error', (error) => { + clearTimeout(timeout) + rejectRun(error) + }) + child.once('close', (exitCode, signal) => { + clearTimeout(timeout) + resolveRun({ exitCode, signal, stdout: stdout.trim(), stderr: stderr.trim() }) + }) + }) +} + +function assert(condition, message) { + if (!condition) throw new Error(message) +} + +function parseFixtureMarker(stdout, label) { + const marker = stdout.split('\n').find((line) => line.startsWith('@@NND_E2E@@')) + assert(marker, `${label} fixture marker missing`) + return JSON.parse(marker.slice('@@NND_E2E@@'.length)) +} + +async function waitForFile(path, timeoutMs = 5_000) { + const deadline = Date.now() + timeoutMs + while (Date.now() < deadline) { + try { + return await readFile(path, 'utf8') + } catch (error) { + if (error?.code !== 'ENOENT') throw error + await new Promise((resolvePromise) => setTimeout(resolvePromise, 25)) + } + } + throw new Error(`Timed out waiting for ${path}`) +} + +async function writeReplayFixture() { + const har = { + log: { + version: '1.2', + creator: { name: 'PR #64 manual evidence', version: '1' }, + pages: [], + entries: [ + { + request: { + method: 'GET', + url: `${baseUrl}/replay-get?case=cli-public-replay`, + httpVersion: 'HTTP/1.1', + headers: [], + queryString: [{ name: 'case', value: 'cli-public-replay' }], + cookies: [], + headersSize: -1, + bodySize: 0 + }, + response: {}, + cache: {}, + timings: {}, + _requestId: 'cli-replay-get' + }, + { + request: { + method: 'POST', + url: `${baseUrl}/replay-post?case=cli-public-replay`, + httpVersion: 'HTTP/1.1', + headers: [{ name: 'content-type', value: 'text/plain; charset=utf-8' }], + queryString: [{ name: 'case', value: 'cli-public-replay' }], + cookies: [], + headersSize: -1, + bodySize: 22, + postData: { + mimeType: 'text/plain; charset=utf-8', + text: 'cli-replay-request-body' + } + }, + response: {}, + cache: {}, + timings: {}, + _requestId: 'cli-replay-post' + } + ] + } + } + await mkdir(dirname(replayFixturePath), { recursive: true }) + await writeFile(replayFixturePath, `${JSON.stringify(har, null, 2)}\n`, 'utf8') +} + +async function runCase(id) { + if (id === 'doctor') { + const versionExecution = await run(process.execPath, [nndPath, '--version']) + assert(versionExecution.exitCode === 0, `version exited ${versionExecution.exitCode}`) + const version = versionExecution.stdout.trim() + assert(version === '2.0.0', `version must be 2.0.0, got ${version}`) + const execution = await run(process.execPath, [ + '--experimental-network-inspection', + nndPath, + 'doctor', + '--json' + ]) + assert(execution.exitCode === 0, `doctor exited ${execution.exitCode}`) + const value = JSON.parse(execution.stdout) + assert(value.ok === true, 'doctor ok must be true') + assert(value.packageVersion === '2.0.0', 'packageVersion must be 2.0.0') + assert(value.experimentalFlag === true, 'experimental flag must be detected') + assert(value.selection?.selected === 'native', 'doctor must select Native') + assert(value.networkMethods?.missingRequired?.length === 0, 'required methods must exist') + return { + id, + title: 'CLI version + Native doctor', + status: 'PASS', + command: `nnd --version && node --experimental-network-inspection ${nndPath} doctor --json`, + actual: { + version, + schemaVersion: value.schemaVersion, + ok: value.ok, + nodeVersion: value.nodeVersion, + packageVersion: value.packageVersion, + experimentalFlag: value.experimentalFlag, + missingRequired: value.networkMethods.missingRequired, + selection: value.selection, + capabilities: value.capabilities + } + } + } + + if (id === 'native' || id === 'legacy') { + const execution = await run(process.execPath, [ + nndPath, + 'dev', + '--no-wait', + '--mode', + id, + fixturePath + ]) + assert(execution.exitCode === 0, `${id} dev exited ${execution.exitCode}`) + const value = parseFixtureMarker(execution.stdout, id) + assert(value.preloadInjected === true, `${id} preload must be injected`) + assert(value.mode === id, `${id} selected mode mismatch`) + assert(value.target?.discoveryUrl, `${id} discovery URL missing`) + return { + id, + title: `Zero-code nnd dev · ${id.toUpperCase()}`, + status: 'PASS', + command: `nnd dev --no-wait --mode ${id} ${fixturePath}`, + actual: { + type: value.type, + preloadInjected: value.preloadInjected, + mode: value.mode, + execArgv: value.execArgv, + target: value.target, + capabilities: value.capabilities + } + } + } + + if (id === 'conflict') { + const execution = await run(process.execPath, [conflictPath]) + assert(execution.exitCode === 0, `conflict check exited ${execution.exitCode}`) + const value = JSON.parse(execution.stdout) + assert(value.code === 'NND_NATIVE_MOCK_CONFLICT', 'explicit conflict code missing') + return { + id, + title: 'Forced Native + Mock conflict', + status: 'PASS', + command: `node ${conflictPath}`, + actual: value + } + } + + if (id === 'replay') { + await writeReplayFixture() + replayOriginRecords.length = 0 + const dryExecution = await run(process.execPath, [ + nndPath, + 'replay', + '--dry-run', + '--json', + replayFixturePath + ]) + assert(dryExecution.exitCode === 0, `replay dry-run exited ${dryExecution.exitCode}`) + const dryRun = JSON.parse(dryExecution.stdout) + assert(dryRun.dryRun === true, 'CLI replay dry-run flag missing') + assert(dryRun.succeeded === 2 && dryRun.failed === 0, 'CLI replay dry-run did not pass 2/2') + assert(replayOriginRecords.length === 0, 'CLI replay dry-run performed network I/O') + + const realExecution = await run(process.execPath, [ + nndPath, + 'replay', + '--json', + '--timeout', + '5000', + replayFixturePath + ]) + assert(realExecution.exitCode === 0, `real replay exited ${realExecution.exitCode}`) + const real = JSON.parse(realExecution.stdout) + assert(real.dryRun === false, 'real CLI replay was unexpectedly dry') + assert(real.succeeded === 2 && real.failed === 0, 'real CLI replay did not pass 2/2') + assert(replayOriginRecords.length === 2, 'real CLI replay did not reach both endpoints') + assert( + replayOriginRecords.some( + (record) => record.method === 'POST' && record.body === 'cli-replay-request-body' + ), + 'real CLI replay did not preserve the POST body' + ) + return { + id, + title: 'Public nnd replay · dry + real', + status: 'PASS', + command: `nnd replay --dry-run --json ${replayFixturePath} && nnd replay --json ${replayFixturePath}`, + actual: { dryRun, real, originRequests: [...replayOriginRecords] } + } + } + + if (id === 'open') { + await mkdir(dirname(openRecordPath), { recursive: true }) + await rm(openRecordPath, { force: true }) + const execution = await run( + process.execPath, + [ + '--require', + frontendOpenHookPath, + nndPath, + 'dev', + '--open', + '--mode', + 'native', + fixturePath + ], + { + env: { + NND_E2E_FRONTEND_RUNNER: frontendRunnerPath, + NND_E2E_FRONTEND_RECORD: openRecordPath + } + } + ) + assert(execution.exitCode === 0, `nnd dev --open exited ${execution.exitCode}`) + const value = parseFixtureMarker(execution.stdout, 'open') + const opened = (await waitForFile(openRecordPath)) + .trim() + .split(/\r?\n/) + .filter(Boolean) + .map((line) => JSON.parse(line)) + assert(value.preloadInjected === true, 'open case preload must be injected') + assert(value.mode === 'native', 'open case must select Native') + assert(opened.length === 1, `authoritative target opened ${opened.length} times`) + assert( + opened[0].webSocketDebuggerUrl === value.target.webSocketDebuggerUrl, + 'opened socket does not match the CLI target' + ) + assert(opened[0].frontendUrl.startsWith('devtools://'), 'opened URL is not DevTools') + return { + id, + title: 'nnd dev --open · authoritative target', + status: 'PASS', + command: `nnd dev --open --mode native ${fixturePath}`, + actual: { + preloadInjected: value.preloadInjected, + mode: value.mode, + inspectWait: value.execArgv.find((argument) => argument.startsWith('--inspect-wait=')), + target: value.target, + openedExactlyOnce: opened.length === 1, + openedFrontend: opened[0], + launcherVerification: 'OS browser spawn redirected to an exact-target CDP verifier' + } + } + } + + throw new Error(`Unknown case: ${id}`) +} + +async function saveResults() { + await mkdir(dirname(artifactPath), { recursive: true }) + await writeFile( + artifactPath, + `${JSON.stringify( + { + schemaVersion: 1, + productCommit, + tarballSha256, + cases: [...results.values()] + }, + null, + 2 + )}\n` + ) +} + +function escapeHtml(value) { + return String(value) + .replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '"') + .replaceAll("'", ''') +} + +function render() { + const definitions = [ + ['doctor', 'CLI version + doctor'], + ['native', 'Zero-code Native'], + ['legacy', 'Zero-code Legacy'], + ['conflict', 'Native + Mock conflict'], + ['replay', 'Public replay dry + real'], + ['open', 'CLI --open authoritative target'] + ] + const cards = definitions + .map(([id, title]) => { + const result = results.get(id) + return `
+

${escapeHtml(title)}

${result ? 'PASS' : 'PENDING'}
+ ${ + result + ? `${escapeHtml(result.command)}
${escapeHtml(JSON.stringify(result.actual, null, 2))}
` + : `

Click the case button to run the exact packed package.

` + } +
` + }) + .join('') + + return ` + + PR #64 manual CLI evidence
+
PR #64 · manual acceptance

Exact-package CLI evidence

+

${results.size}/${definitions.length} cases passed · each button launches the installed tarball, not workspace source.

+
Product commit ${escapeHtml(productCommit)}
Package node-network-devtools@2.0.0
Tarball SHA-256 ${escapeHtml(tarballSha256)}
Runner ${escapeHtml(process.version)} · ${escapeHtml(process.platform)}-${escapeHtml(process.arch)}
+
${definitions.map(([id, title]) => ``).join('')}
+
${cards}
+
` +} + +const server = createServer(async (request, response) => { + if (request.url?.startsWith('/replay-get')) { + replayOriginRecords.push({ method: request.method, url: request.url, body: '' }) + response.writeHead(200, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('cli-replay-get-ok') + return + } + + if (request.url?.startsWith('/replay-post')) { + const chunks = [] + for await (const chunk of request) chunks.push(Buffer.from(chunk)) + const body = Buffer.concat(chunks).toString('utf8') + replayOriginRecords.push({ method: request.method, url: request.url, body }) + response.writeHead(201, { 'content-type': 'application/json; charset=utf-8' }) + response.end(JSON.stringify({ ok: true, body })) + return + } + + if (request.method === 'POST' && request.url?.startsWith('/run/')) { + const id = request.url.slice('/run/'.length) + try { + results.set(id, redactEvidence(await runCase(id))) + await saveResults() + response.writeHead(204).end() + } catch (error) { + response.writeHead(500, { 'content-type': 'text/plain; charset=utf-8' }) + response.end(error?.stack ?? String(error)) + } + return + } + + response.writeHead(200, { 'content-type': 'text/html; charset=utf-8' }) + response.end(render()) +}) + +server.listen(0, '127.0.0.1', () => { + const address = server.address() + baseUrl = `http://127.0.0.1:${address.port}` + console.log(`NND_CLI_MANUAL_READY ${baseUrl}`) +}) + +process.once('SIGINT', () => server.close(() => process.exit(0))) +process.once('SIGTERM', () => server.close(() => process.exit(0))) diff --git a/output/playwright/pr-64/manual-evidence-server.mjs b/output/playwright/pr-64/manual-evidence-server.mjs new file mode 100644 index 0000000..b8e299e --- /dev/null +++ b/output/playwright/pr-64/manual-evidence-server.mjs @@ -0,0 +1,1063 @@ +import { spawn } from 'node:child_process' +import { createHash } from 'node:crypto' +import { mkdir, mkdtemp, readFile, writeFile } from 'node:fs/promises' +import http from 'node:http' +import https from 'node:https' +import { createRequire } from 'node:module' +import { dirname, join, resolve } from 'node:path' + +const backend = process.argv[2] +if (!['native', 'legacy'].includes(backend)) { + throw new Error('Usage: node manual-evidence-server.mjs ') +} + +const consumerRoot = resolve( + process.env.NND_MANUAL_CONSUMER_ROOT ?? new URL('./consumer', import.meta.url).pathname +) +const evidenceRoot = resolve( + process.env.NND_MANUAL_EVIDENCE_ROOT ?? new URL('.', import.meta.url).pathname +) +const productCommit = process.env.NND_MANUAL_PRODUCT_COMMIT ?? 'unknown' +const tarballSha256 = process.env.NND_MANUAL_TARBALL_SHA256 ?? 'unknown' +const runtimeRoot = join(evidenceRoot, '.runtime') +const artifactsRoot = join(evidenceRoot, 'artifacts') +const sessionDirectory = join(runtimeRoot, `${backend}-session-${Date.now()}`) +const manualRequire = createRequire(join(consumerRoot, 'consumer.cjs')) +const workspaceRequire = createRequire( + new URL('../../../packages/network-debugger/package.json', import.meta.url) +) +const api = manualRequire('node-network-devtools') +const { chromium } = workspaceRequire('@playwright/test') +const WebSocket = manualRequire('ws') +const { WebSocketServer } = WebSocket +const packageDirectory = resolve(dirname(manualRequire.resolve('node-network-devtools')), '..') +const packageManifest = JSON.parse(await readFile(join(packageDirectory, 'package.json'), 'utf8')) +const { register, SessionRecorder, exportHar, replay } = api + +for (const [name, value] of Object.entries({ + register, + SessionRecorder, + exportHar, + replay +})) { + if (typeof value !== 'function') { + throw new Error(`The exact packed package does not export ${name}`) + } +} + +await mkdir(runtimeRoot, { recursive: true }) +await mkdir(artifactsRoot, { recursive: true }) + +function sha256(value) { + return createHash('sha256').update(value).digest('hex') +} + +const pathRedactions = [ + [consumerRoot, ''], + [evidenceRoot, ''] +] + +function redactText(value) { + return pathRedactions.reduce( + (redacted, [path, replacement]) => redacted.replaceAll(path, replacement), + value + ) +} + +function redactEvidence(value) { + if (typeof value === 'string') return redactText(value) + if (Array.isArray(value)) return value.map(redactEvidence) + if (value && typeof value === 'object') { + return Object.fromEntries( + Object.entries(value).map(([name, entry]) => [name, redactEvidence(entry)]) + ) + } + return value +} + +function jsonResponse(response, status, value) { + const body = `${JSON.stringify(value, null, 2)}\n` + response.writeHead(status, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'cache-control': 'no-store' + }) + response.end(body) +} + +function listen(server) { + return new Promise((resolvePromise, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + const address = server.address() + if (!address || typeof address === 'string') { + reject(new Error('Server did not expose a TCP address')) + return + } + resolvePromise(address.port) + }) + }) +} + +function closeServer(server, sockets) { + if (!server.listening) return Promise.resolve() + return new Promise((resolvePromise) => { + server.close(() => resolvePromise()) + for (const socket of sockets) socket.destroy() + }) +} + +function httpRequest(url, { method = 'GET', headers = {}, body } = {}) { + return new Promise((resolvePromise, reject) => { + const secure = new URL(url).protocol === 'https:' + const request = (secure ? https : http).request( + url, + { method, headers, ...(secure ? { rejectUnauthorized: false } : {}) }, + (response) => { + const chunks = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + response.once('error', reject) + response.once('end', () => { + resolvePromise({ + status: response.statusCode, + statusText: response.statusMessage, + headers: response.headers, + body: Buffer.concat(chunks).toString('utf8') + }) + }) + } + ) + request.once('error', reject) + request.end(body) + }) +} + +function webSocketRoundTrip(url, token) { + return new Promise((resolvePromise, reject) => { + const socket = new WebSocket(url) + const messages = [] + socket.once('error', reject) + socket.once('open', () => { + socket.send(`client-text:${token}`) + socket.send(Buffer.from([0, 1, 2, 127, 128, 254, 255])) + }) + socket.on('message', (data, isBinary) => { + messages.push({ + isBinary, + value: isBinary ? Buffer.from(data).toString('base64') : Buffer.from(data).toString('utf8') + }) + if (messages.length === 2) socket.close(1000, 'manual-evidence-complete') + }) + socket.once('close', (code, reason) => + resolvePromise({ code, reason: reason.toString(), messages }) + ) + }) +} + +function nativeWebSocketRoundTrip(url, token) { + return new Promise((resolvePromise, reject) => { + const socket = new globalThis.WebSocket(url) + socket.binaryType = 'arraybuffer' + const messages = [] + socket.addEventListener('error', () => reject(new Error('Native WebSocket failed'))) + socket.addEventListener('open', () => { + socket.send(`client-text:${token}`) + socket.send(new Uint8Array([0, 1, 2, 127, 128, 254, 255])) + }) + socket.addEventListener('message', (event) => { + const isBinary = typeof event.data !== 'string' + const value = isBinary ? Buffer.from(event.data).toString('base64') : event.data + messages.push({ isBinary, value }) + if (messages.length === 2) socket.close(1000, 'manual-evidence-complete') + }) + socket.addEventListener('close', (event) => + resolvePromise({ code: event.code, reason: event.reason, messages }) + ) + }) +} + +const originSockets = new Set() +const originRecords = [] +const webSocketServer = new WebSocketServer({ noServer: true }) +const originServer = http.createServer(async (request, response) => { + const url = new URL(request.url, `http://${request.headers.host ?? '127.0.0.1'}`) + const chunks = [] + for await (const chunk of request) chunks.push(Buffer.from(chunk)) + const requestBody = Buffer.concat(chunks).toString('utf8') + const record = { + sequence: originRecords.length + 1, + timestamp: new Date().toISOString(), + method: request.method, + pathname: url.pathname, + url: url.href, + requestBody, + traceparent: request.headers.traceparent ?? null, + tracestate: request.headers.tracestate ?? null + } + originRecords.push(record) + const token = url.searchParams.get('token') ?? '' + + if (url.pathname === '/get') { + const body = `manual-get-response:${token}` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-manual-case': token + }) + response.end(body) + return + } + + if (url.pathname === '/post') { + const body = JSON.stringify({ token, requestBody }) + response.writeHead(201, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-manual-case': token + }) + response.end(body) + return + } + + if (url.pathname === '/sse') { + const body = `id: 1\nevent: manual\ndata: sse-${token}\n\nid: 2\ndata: complete-${token}\n\n` + response.writeHead(200, { + 'content-type': 'text/event-stream; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'cache-control': 'no-cache' + }) + response.end(body) + return + } + + if (url.pathname === '/trace') { + const body = JSON.stringify({ + token, + traceparent: request.headers.traceparent, + tracestate: request.headers.tracestate + }) + response.writeHead(200, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(body) + }) + response.end(body) + return + } + + if (url.pathname === '/reset') { + request.socket.destroy() + return + } + + if (url.pathname.startsWith('/mock-')) { + const body = `ORIGIN_LEAK:${url.pathname}` + response.writeHead(599, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(body) + }) + response.end(body) + return + } + + response.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('not found') +}) +originServer.on('connection', (socket) => { + originSockets.add(socket) + socket.once('close', () => originSockets.delete(socket)) +}) +originServer.on('upgrade', (request, socket, head) => { + const url = new URL(request.url, `http://${request.headers.host ?? '127.0.0.1'}`) + if (url.pathname !== '/websocket') { + socket.destroy() + return + } + originRecords.push({ + sequence: originRecords.length + 1, + timestamp: new Date().toISOString(), + method: request.method, + pathname: url.pathname, + url: url.href, + requestBody: '', + traceparent: null, + tracestate: null + }) + webSocketServer.handleUpgrade(request, socket, head, (webSocket) => { + webSocketServer.emit('connection', webSocket, request) + }) +}) +webSocketServer.on('connection', (socket) => { + socket.on('message', (data, isBinary) => socket.send(data, { binary: isBinary })) +}) +const originPort = await listen(originServer) +const originBaseUrl = `http://127.0.0.1:${originPort}` + +const secureOriginSockets = new Set() +const secureOriginServer = https.createServer( + { + key: await readFile(new URL('./manual-localhost-key.pem', import.meta.url)), + cert: await readFile(new URL('./manual-localhost-cert.pem', import.meta.url)) + }, + async (request, response) => { + const url = new URL(request.url, `https://${request.headers.host ?? '127.0.0.1'}`) + const chunks = [] + for await (const chunk of request) chunks.push(Buffer.from(chunk)) + const requestBody = Buffer.concat(chunks).toString('utf8') + const token = url.searchParams.get('token') ?? '' + originRecords.push({ + sequence: originRecords.length + 1, + timestamp: new Date().toISOString(), + method: request.method, + pathname: url.pathname, + url: url.href, + requestBody, + traceparent: request.headers.traceparent ?? null, + tracestate: request.headers.tracestate ?? null + }) + if (url.pathname !== '/secure-get') { + response.writeHead(404).end('not found') + return + } + const body = `manual-https-response:${token}` + response.writeHead(200, { + 'content-type': 'text/plain; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'x-manual-case': token + }) + response.end(body) + } +) +secureOriginServer.on('connection', (socket) => { + secureOriginSockets.add(socket) + socket.once('close', () => secureOriginSockets.delete(socket)) +}) +const secureOriginPort = await listen(secureOriginServer) +const secureOriginBaseUrl = `https://127.0.0.1:${secureOriginPort}` + +const mockRules = [ + { + id: 'manual-http-mock', + match: { url: `${originBaseUrl}/mock-http*`, method: 'GET' }, + response: { + status: 207, + statusText: 'Manual Mock HTTP', + headers: { + 'content-type': 'application/json; charset=utf-8', + 'x-nnd-mock': 'http' + }, + body: JSON.stringify({ mocked: true, transport: 'http', source: 'node-network-devtools' }) + } + }, + { + id: 'manual-fetch-mock', + match: { + url: `${originBaseUrl}/mock-fetch*`, + method: 'POST', + headers: { 'x-manual-mock': 'fetch' } + }, + response: { + status: 202, + statusText: 'Manual Mock Fetch', + headers: { + 'content-type': 'application/json; charset=utf-8', + 'x-nnd-mock': 'fetch' + }, + body: JSON.stringify({ mocked: true, transport: 'fetch', source: 'node-network-devtools' }) + } + } +] + +const originalFunctions = { + fetch: globalThis.fetch, + httpRequest: http.request, + httpsRequest: https.request +} +const registration = register({ + mode: backend === 'legacy' ? 'auto' : 'native', + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false }, + legacy: { + serverPort: 0, + ...(backend === 'legacy' ? { mock: mockRules } : {}) + } +}) +const ready = await registration.ready +if (ready.mode !== backend) { + throw new Error(`Expected ${backend}, selected ${ready.mode}`) +} +const discoveryUrl = new URL(ready.target.discoveryUrl) +const [discovery, discoveryVersion, discoveryProtocol] = await Promise.all([ + fetch(discoveryUrl).then((response) => response.json()), + fetch(new URL('/json/version', discoveryUrl)).then((response) => response.json()), + fetch(new URL('/json/protocol', discoveryUrl)).then((response) => response.json()) +]) +if (!Array.isArray(discovery) || !discovery.some((target) => target.id === ready.target.id)) { + throw new Error(`Target ${ready.target.id} is absent from discovery`) +} +const networkDomain = discoveryProtocol.domains?.find( + (domain) => (domain.name ?? domain.domain) === 'Network' +) +if (!networkDomain) throw new Error('/json/protocol does not expose the Network domain') +const discoveryContract = { + list: { + ok: true, + targetCount: discovery.length, + targetIdMatches: discovery.some((target) => target.id === ready.target.id) + }, + version: { + ok: true, + browser: discoveryVersion.Browser ?? discoveryVersion.browser ?? null, + protocolVersion: + discoveryVersion['Protocol-Version'] ?? discoveryVersion.protocolVersion ?? null + }, + protocol: { + ok: true, + domainCount: discoveryProtocol.domains.length, + networkDomain: true, + networkCommandCount: networkDomain.commands?.length ?? 0, + networkEventCount: networkDomain.events?.length ?? 0 + } +} +const recorder = await SessionRecorder.start({ + directory: sessionDirectory, + target: ready.target +}) + +const chromiumUserData = await mkdtemp(join(runtimeRoot, `${backend}-chromium-`)) +const chromiumOutput = { stdout: '', stderr: '' } +const chromiumProcess = spawn( + chromium.executablePath(), + [ + '--headless=new', + '--remote-debugging-port=0', + `--user-data-dir=${chromiumUserData}`, + '--no-first-run', + '--no-default-browser-check', + '--no-sandbox', + '--no-proxy-server', + '--disable-background-networking', + '--disable-component-update', + '--disable-default-apps', + '--disable-domain-reliability', + '--disable-extensions', + '--disable-sync', + '--metrics-recording-only', + '--host-resolver-rules=MAP * ~NOTFOUND, EXCLUDE 127.0.0.1' + ], + { stdio: ['ignore', 'pipe', 'pipe'] } +) +chromiumProcess.stdout.setEncoding('utf8') +chromiumProcess.stderr.setEncoding('utf8') +chromiumProcess.stdout.on('data', (chunk) => (chromiumOutput.stdout += chunk)) +chromiumProcess.stderr.on('data', (chunk) => (chromiumOutput.stderr += chunk)) + +const browserWebSocketUrl = await new Promise((resolvePromise, reject) => { + const timeout = setTimeout( + () => reject(new Error(`Chromium did not expose CDP:\n${chromiumOutput.stderr}`)), + 10_000 + ) + const onData = () => { + const match = chromiumOutput.stderr.match(/DevTools listening on (ws:\/\/[^\s]+)/) + if (!match) return + clearTimeout(timeout) + chromiumProcess.stderr.off('data', onData) + resolvePromise(match[1]) + } + chromiumProcess.stderr.on('data', onData) + chromiumProcess.once('exit', (code, signal) => { + clearTimeout(timeout) + reject(new Error(`Chromium exited before CDP (code=${code}, signal=${signal})`)) + }) +}) +const frontendHost = new URL(browserWebSocketUrl).host +const targetSocket = ready.target.webSocketDebuggerUrl.replace(/^ws:\/\//, '') +const frontendUrl = + `http://${frontendHost}/devtools/js_app.html?experiments=true&v8only=true` + + `&ws=${targetSocket}&hl=en-US` + +let scenarioCounter = 0 +let finalized +let disposed +const scenarioResults = [] + +function scenarioToken(scenario) { + scenarioCounter += 1 + return `${backend}-${scenario}-${String(scenarioCounter).padStart(2, '0')}` +} + +async function runScenario(scenario) { + const token = scenarioToken(scenario) + let result + switch (scenario) { + case 'http-get': + result = await httpRequest(`${originBaseUrl}/get?token=${encodeURIComponent(token)}`) + break + case 'https-get': + result = await httpRequest( + `${secureOriginBaseUrl}/secure-get?token=${encodeURIComponent(token)}` + ) + break + case 'fetch-post': { + const response = await fetch(`${originBaseUrl}/post?token=${encodeURIComponent(token)}`, { + method: 'POST', + headers: { 'content-type': 'text/plain; charset=utf-8', 'x-manual-case': token }, + body: `manual-request-body:${token}` + }) + result = { + status: response.status, + headers: Object.fromEntries(response.headers), + body: await response.text() + } + break + } + case 'mock-http': + if (backend !== 'legacy') throw new Error('Mock is Legacy-only') + result = await httpRequest(`${originBaseUrl}/mock-http?token=${encodeURIComponent(token)}`) + break + case 'mock-fetch': { + if (backend !== 'legacy') throw new Error('Mock is Legacy-only') + const response = await fetch( + `${originBaseUrl}/mock-fetch?token=${encodeURIComponent(token)}`, + { + method: 'POST', + headers: { 'content-type': 'text/plain', 'x-manual-mock': 'fetch' }, + body: `must-not-reach-origin:${token}` + } + ) + result = { + status: response.status, + headers: Object.fromEntries(response.headers), + body: await response.text() + } + break + } + case 'trace': { + const traceparent = '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' + const tracestate = 'vendor=manual-pr64' + result = await httpRequest(`${originBaseUrl}/trace?token=${encodeURIComponent(token)}`, { + headers: { traceparent, tracestate } + }) + break + } + case 'failed': { + let failure + try { + await httpRequest(`${originBaseUrl}/reset?token=${encodeURIComponent(token)}`) + } catch (error) { + failure = error + } + if (!failure) throw new Error('Reset request unexpectedly completed') + result = { + failed: true, + code: failure instanceof Error && 'code' in failure ? failure.code : null, + message: failure instanceof Error ? failure.message : String(failure) + } + break + } + case 'sse': { + const response = await fetch(`${originBaseUrl}/sse?token=${encodeURIComponent(token)}`) + result = { status: response.status, body: await response.text() } + await new Promise((resolvePromise) => setTimeout(resolvePromise, 100)) + break + } + case 'websocket': + result = await (backend === 'native' ? nativeWebSocketRoundTrip : webSocketRoundTrip)( + `${originBaseUrl.replace(/^http/, 'ws')}/websocket?token=${encodeURIComponent(token)}`, + token + ) + await new Promise((resolvePromise) => setTimeout(resolvePromise, 100)) + break + default: + throw new Error(`Unknown manual scenario: ${scenario}`) + } + + const entry = { + scenario, + token, + result, + originLeakCount: originRecords.filter((record) => record.pathname.startsWith('/mock-')).length + } + scenarioResults.push(entry) + return entry +} + +async function finalizeSession() { + if (finalized) return finalized + await recorder.close() + const exported = await exportHar(sessionDirectory) + const manifest = JSON.parse(await readFile(join(sessionDirectory, 'manifest.json'), 'utf8')) + const events = (await readFile(join(sessionDirectory, 'events.ndjson'), 'utf8')) + .split(/\r?\n/) + .filter(Boolean) + .map((line) => JSON.parse(line)) + const har = exported.har + const requestForPath = (pathname) => + events.find((event) => { + if (event.method !== 'Network.requestWillBeSent') return false + try { + return new URL(event.params.request.url).pathname === pathname + } catch { + return false + } + }) + const failedRequest = requestForPath('/reset') + const failedRequestId = failedRequest?.params.requestId + const failedMethods = failedRequestId + ? events + .filter((event) => event.params?.requestId === failedRequestId) + .map((event) => event.method) + : [] + const webSocketCreated = events.filter((event) => { + if (event.method !== 'Network.webSocketCreated') return false + try { + return new URL(event.params.url).pathname === '/websocket' + } catch { + return false + } + }) + const webSocketRequestIds = new Set(webSocketCreated.map((event) => event.params.requestId)) + const webSocketMethods = events + .filter((event) => webSocketRequestIds.has(event.params?.requestId)) + .map((event) => event.method) + const sseRequest = requestForPath('/sse') + const sseRequestId = sseRequest?.params.requestId + const sseMessageCount = events.filter( + (event) => + event.method === 'Network.eventSourceMessageReceived' && + event.params?.requestId === sseRequestId + ).length + const explicitTraceRecords = originRecords.filter((record) => record.pathname === '/trace') + const untracedRecords = originRecords.filter( + (record) => !['/trace', '/websocket'].includes(record.pathname) + ) + const manualAssertions = { + discovery: discoveryContract, + failedLifecycle: { + requestId: failedRequestId ?? null, + requestWillBeSent: failedMethods.filter((method) => method === 'Network.requestWillBeSent') + .length, + responseReceived: failedMethods.filter((method) => method === 'Network.responseReceived') + .length, + loadingFinished: failedMethods.filter((method) => method === 'Network.loadingFinished') + .length, + loadingFailed: failedMethods.filter((method) => method === 'Network.loadingFailed').length + }, + webSocketBoundary: { + lifecycleCreated: webSocketCreated.length, + lifecycleClosed: webSocketMethods.filter((method) => method === 'Network.webSocketClosed') + .length, + framesSent: webSocketMethods.filter((method) => method === 'Network.webSocketFrameSent') + .length, + framesReceived: webSocketMethods.filter( + (method) => method === 'Network.webSocketFrameReceived' + ).length, + expectedFrameCapture: backend === 'legacy' + }, + sseBoundary: { + requestCaptured: Boolean(sseRequestId), + messageEvents: sseMessageCount, + expectedMessageCapture: backend === 'legacy' + }, + traceBoundary: { + explicitTraceRequests: explicitTraceRecords.length, + explicitTracePreserved: explicitTraceRecords.every( + (record) => + record.traceparent === '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' && + record.tracestate === 'vendor=manual-pr64' + ), + untracedBusinessRequests: untracedRecords.length, + untracedHeadersAbsent: untracedRecords.every( + (record) => record.traceparent === null && record.tracestate === null + ) + } + } + const assertionsPassed = + manualAssertions.failedLifecycle.requestWillBeSent === 1 && + manualAssertions.failedLifecycle.responseReceived === 0 && + manualAssertions.failedLifecycle.loadingFinished === 0 && + manualAssertions.failedLifecycle.loadingFailed === 1 && + manualAssertions.webSocketBoundary.lifecycleCreated === 1 && + manualAssertions.webSocketBoundary.lifecycleClosed === 1 && + (backend === 'legacy' + ? manualAssertions.webSocketBoundary.framesSent === 2 && + manualAssertions.webSocketBoundary.framesReceived === 2 + : manualAssertions.webSocketBoundary.framesSent === 0 && + manualAssertions.webSocketBoundary.framesReceived === 0) && + manualAssertions.sseBoundary.requestCaptured && + (backend === 'legacy' + ? manualAssertions.sseBoundary.messageEvents === 2 + : manualAssertions.sseBoundary.messageEvents === 0) && + manualAssertions.traceBoundary.explicitTraceRequests === 1 && + manualAssertions.traceBoundary.explicitTracePreserved && + manualAssertions.traceBoundary.untracedHeadersAbsent + if (!assertionsPassed) { + throw new Error(`Manual boundary assertions failed: ${JSON.stringify(manualAssertions)}`) + } + const replayableHar = { + ...har, + log: { + ...har.log, + entries: har.log.entries.filter((entry) => { + const url = entry.request?.url + const status = entry.response?.status + return ( + typeof url === 'string' && + url.startsWith(`${originBaseUrl}/`) && + Number.isInteger(status) && + status >= 200 && + status < 400 + ) + }) + } + } + const replayableHarPath = join(runtimeRoot, `${backend}-replayable.har`) + await writeFile(replayableHarPath, `${JSON.stringify(replayableHar, null, 2)}\n`, 'utf8') + const dryRun = await replay(replayableHarPath, { dryRun: true }) + const realReplay = await replay(replayableHarPath, { timeoutMs: 5_000 }) + const traceContexts = Object.values(manifest.traceIndex).flatMap((entry) => entry.spans) + finalized = { + sessionDirectory: redactText(sessionDirectory), + manualAssertions: { passed: true, ...manualAssertions }, + manifest: { + schemaVersion: manifest.schemaVersion, + state: manifest.state, + stats: manifest.stats, + issues: manifest.issues, + traceContexts + }, + har: { + version: har.log.version, + creator: har.log.creator, + entries: har.log.entries.length, + statuses: har.log.entries.map((entry) => entry.response.status), + replayableEntries: replayableHar.log.entries.length + }, + replay: { + dryRun: dryRun.dryRun, + dryRunRequests: dryRun.results.length, + dryRunPassed: dryRun.results.every((entry) => entry.ok), + realRequests: realReplay.results.length, + realPassed: realReplay.results.every((entry) => entry.ok) + }, + originLeakCount: originRecords.filter((record) => record.pathname.startsWith('/mock-')).length + } + await Promise.all([ + writeFile( + join(artifactsRoot, `${backend}-session-manifest.json`), + redactText(await readFile(join(sessionDirectory, 'manifest.json'), 'utf8')), + 'utf8' + ), + writeFile( + join(artifactsRoot, `${backend}-events.ndjson`), + redactText(await readFile(join(sessionDirectory, 'events.ndjson'), 'utf8')), + 'utf8' + ), + writeFile( + join(artifactsRoot, `${backend}-session.har`), + redactText(await readFile(exported.outputPath, 'utf8')), + 'utf8' + ), + writeFile( + join(artifactsRoot, `${backend}-replayable.har`), + redactText(await readFile(replayableHarPath, 'utf8')), + 'utf8' + ), + writeFile( + join(artifactsRoot, `${backend}-finalize-summary.json`), + `${JSON.stringify(finalized, null, 2)}\n`, + 'utf8' + ) + ]) + return finalized +} + +async function endpointClosed(url) { + try { + await fetch(url, { signal: AbortSignal.timeout(750) }) + return false + } catch { + return true + } +} + +async function disposeTarget() { + if (disposed) return disposed + if (!finalized) await finalizeSession() + await registration.dispose() + disposed = { + registrationState: registration.status().state, + discoveryClosed: await endpointClosed(ready.target.discoveryUrl), + targetSocketClosed: await new Promise((resolvePromise) => { + const socket = new WebSocket(ready.target.webSocketDebuggerUrl) + const timer = setTimeout(() => { + socket.terminate() + resolvePromise(false) + }, 750) + socket.once('error', () => { + clearTimeout(timer) + resolvePromise(true) + }) + socket.once('open', () => { + clearTimeout(timer) + socket.close() + resolvePromise(false) + }) + }) + } + await writeFile( + join(artifactsRoot, `${backend}-dispose-summary.json`), + `${JSON.stringify(disposed, null, 2)}\n`, + 'utf8' + ) + return disposed +} + +function escapeHtml(value) { + return String(value) + .replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '"') +} + +function controlPage(controlUrl) { + const capabilities = Object.entries(ready.capabilities) + .map( + ([name, supported]) => + `
  • ${escapeHtml(name)}${supported ? 'YES' : 'NO'}
  • ` + ) + .join('') + const legacyButtons = + backend === 'legacy' + ? ` + + ` + : '' + return ` + + + + + PR #64 manual evidence — ${backend} + + + +
    +
    PR #64 · Manual acceptance evidence
    +

    Node Network Devtools v2 · ${backend.toUpperCase()}

    +

    Exact packed package, standard CDP discovery, real loopback business traffic.

    +
    +
    +

    Runtime identity READY

    +
    +
    Product commit
    ${escapeHtml(productCommit)}
    +
    Package
    ${escapeHtml(packageManifest.name)}@${escapeHtml(packageManifest.version)}
    +
    Tarball SHA-256
    ${escapeHtml(tarballSha256)}
    +
    Selected backend
    ${escapeHtml(ready.mode)}
    +
    Fallback code
    ${escapeHtml(ready.fallbackReason?.code ?? 'none')}
    +
    Target id
    ${escapeHtml(ready.target.id)}
    +
    Discovery
    ${escapeHtml(ready.target.discoveryUrl)}
    +
    WebSocket
    ${escapeHtml(ready.target.webSocketDebuggerUrl)}
    +
    API references
    fetch=${globalThis.fetch === originalFunctions.fetch}; http.request=${http.request === originalFunctions.httpRequest}; https.request=${https.request === originalFunctions.httpsRequest}
    +
    Discovery contract
    /json/list=${discoveryContract.list.ok}; /json/version=${discoveryContract.version.ok}; /json/protocol.Network=${discoveryContract.protocol.networkDomain}
    +
    +
    + +
    +

    Manual business scenarios

    +
    + + + + + + + + ${legacyButtons} + + +
    +
    + 0 manual scenarios + 0 mock origin leaks + Session recording +
    +
    +
    +

    Latest observed result

    +
    Choose a scenario. Each click causes this Node process to issue real outbound traffic.
    +
    +
    +
    + + +` +} + +const controlSockets = new Set() +let controlUrl +const controlServer = http.createServer(async (request, response) => { + const url = new URL(request.url, controlUrl ?? 'http://127.0.0.1') + try { + if (request.method === 'GET' && url.pathname === '/') { + const body = controlPage(controlUrl) + response.writeHead(200, { + 'content-type': 'text/html; charset=utf-8', + 'content-length': Buffer.byteLength(body), + 'cache-control': 'no-store' + }) + response.end(body) + return + } + if (request.method === 'GET' && url.pathname === '/api/status') { + jsonResponse(response, 200, { ready, discovery, frontendUrl, controlUrl }) + return + } + if (request.method === 'POST' && url.pathname.startsWith('/api/run/')) { + jsonResponse(response, 200, await runScenario(url.pathname.slice('/api/run/'.length))) + return + } + if (request.method === 'POST' && url.pathname === '/api/finalize') { + jsonResponse(response, 200, await finalizeSession()) + return + } + if (request.method === 'POST' && url.pathname === '/api/dispose') { + jsonResponse(response, 200, await disposeTarget()) + return + } + jsonResponse(response, 404, { error: 'not found' }) + } catch (error) { + jsonResponse(response, 500, { + error: error instanceof Error ? error.message : String(error), + stack: error instanceof Error ? error.stack : undefined + }) + } +}) +controlServer.on('connection', (socket) => { + controlSockets.add(socket) + socket.once('close', () => controlSockets.delete(socket)) +}) +const controlPort = await listen(controlServer) +controlUrl = `http://127.0.0.1:${controlPort}` + +const runtimeEvidence = { + schemaVersion: 1, + productCommit, + package: { name: packageManifest.name, version: packageManifest.version }, + tarballSha256, + node: process.version, + platform: `${process.platform}-${process.arch}`, + backend, + selectedMode: ready.mode, + fallbackReason: ready.fallbackReason ?? null, + capabilities: ready.capabilities, + target: ready.target, + discovery, + discoveryContract, + frontendUrl, + controlUrl, + originalFunctionsPreserved: { + fetch: globalThis.fetch === originalFunctions.fetch, + httpRequest: http.request === originalFunctions.httpRequest, + httpsRequest: https.request === originalFunctions.httpsRequest + }, + sourceSha256: sha256(await readFile(new URL(import.meta.url))) +} +const publicRuntimeEvidence = redactEvidence(runtimeEvidence) +await writeFile( + join(artifactsRoot, `${backend}-runtime.json`), + `${JSON.stringify(publicRuntimeEvidence, null, 2)}\n`, + 'utf8' +) + +process.stdout.write(`NND_MANUAL_READY ${JSON.stringify(publicRuntimeEvidence)}\n`) + +let shuttingDown = false +async function shutdown() { + if (shuttingDown) return + shuttingDown = true + const errors = [] + if (!finalized) await recorder.close().catch((error) => errors.push(error)) + await registration.dispose().catch((error) => errors.push(error)) + for (const socket of webSocketServer.clients) socket.terminate() + webSocketServer.close() + await closeServer(controlServer, controlSockets).catch((error) => errors.push(error)) + await closeServer(secureOriginServer, secureOriginSockets).catch((error) => errors.push(error)) + await closeServer(originServer, originSockets).catch((error) => errors.push(error)) + if (chromiumProcess.exitCode === null && chromiumProcess.signalCode === null) { + chromiumProcess.kill('SIGTERM') + } + if (errors.length) { + process.stderr.write(`${new AggregateError(errors, 'Manual evidence cleanup failed').stack}\n`) + process.exitCode = 1 + } +} + +process.once('SIGINT', () => void shutdown().finally(() => process.exit())) +process.once('SIGTERM', () => void shutdown().finally(() => process.exit())) diff --git a/output/playwright/pr-64/manual-localhost-cert.pem b/output/playwright/pr-64/manual-localhost-cert.pem new file mode 100644 index 0000000..6238242 --- /dev/null +++ b/output/playwright/pr-64/manual-localhost-cert.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDGjCCAgKgAwIBAgIUO15hBEI1W9OrbU3Ad56Vt06/geAwDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJMTI3LjAuMC4xMB4XDTI2MDgyODA3MjE0MFoXDTM2MDgy +NTA3MjE0MFowFDESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAymbt8EnBMQrcL3tQDwhaw2OcS29WCDPLw0LoATzXIX+Q +riZbuqtyRzWuzo9JyUKxFAxbiRoG9YNMwVTxSO7Xm/tDxxXt6G1mAaZAMlL470d6 +L0fKPqtnlUKaIn8QuVLoWOqaaVQ1uxs7J/YcyXZlgVl6kVtdM6ZQxLRG+/U1elnN +DlllVU9NhFohkp6ScN5oyHfJ0emKKTMkVaX5I/4qNbqg3vGqCoyhqIJ08fDaZOli +SCrJwNB4Gops59b3raDFeO8D1h4fkxeVgRDMDfWBOd7guIX0FjB54vYSQXQLWf9Y +MLO3dH1jxRq/+CotnL9eSZHbgvyooZVU666s3SRFbwIDAQABo2QwYjAdBgNVHQ4E +FgQUQZZhDStW5svzFv4siWHuxE2iiNwwHwYDVR0jBBgwFoAUQZZhDStW5svzFv4s +iWHuxE2iiNwwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHREECDAGhwR/AAABMA0GCSqG +SIb3DQEBCwUAA4IBAQBcpVVMVTcB4h6vpJV9WQDtnGuI3dqUOwLscK7MhHUPg3ly +hvdDkpTt8H3wXHPr6MVsfGkh9AsJtVFOIxmeSGBTSNdY8lHcaFSAFFfd3eCPmBSE +nYOr7g5A2T1dIzkP5ebYmnT8uFs8bV5F2i7Z4SXX9wCH8Kl0Z6C3XCPKyRV1L+kp +S977JsbnW5JKXWH9q5MdWpgyTkeX19RtSig2jaJUXYLAsbrX218x90VTBlOtV27W +4l118RDarilvn1wX/DuRnVGT0vGOEsQk9S3RPtbZsnXrZYonGZDSZMDLVg+mbEe4 +ViNssMye+vdKCqdHWSZCGwrVbZ/ZglK/PN6AU/b8 +-----END CERTIFICATE----- diff --git a/output/playwright/pr-64/manual-localhost-key.pem b/output/playwright/pr-64/manual-localhost-key.pem new file mode 100644 index 0000000..29b8a5d --- /dev/null +++ b/output/playwright/pr-64/manual-localhost-key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKZu3wScExCtwv +e1APCFrDY5xLb1YIM8vDQugBPNchf5CuJlu6q3JHNa7Oj0nJQrEUDFuJGgb1g0zB +VPFI7teb+0PHFe3obWYBpkAyUvjvR3ovR8o+q2eVQpoifxC5UuhY6pppVDW7Gzsn +9hzJdmWBWXqRW10zplDEtEb79TV6Wc0OWWVVT02EWiGSnpJw3mjId8nR6YopMyRV +pfkj/io1uqDe8aoKjKGognTx8Npk6WJIKsnA0Hgaimzn1vetoMV47wPWHh+TF5WB +EMwN9YE53uC4hfQWMHni9hJBdAtZ/1gws7d0fWPFGr/4Ki2cv15JkduC/KihlVTr +rqzdJEVvAgMBAAECggEAK30hO+OFDKYSOGuNAKXhZqElCHpUKHAEpKBgHD/3031G +13xrcjj7VXyd4kkcaA+Z375l/pfmjeMX32SCcZLMJfo/jmvSUgILjGgt3AJC9ZrM +kJMizANlPsdwOeBGdiNvxAcohWAwKVNJCyWQ+uKjHb9dnBTe+kWOji1UITgHNRHr +kcFg5rm1+y5swALUj8vJDC6a6a4neJ+iRkm1uM0BR0m0s80c0SeQJSi6bdcJAnvw +Z4onJLvnnVdYvk2x3/NIMolT2wKhdeM63LYXrBwbxfHEgwW+ljp3UHVBAgXPJ+9i +WEczCN/erqNlWH01zI3JCUOSAarbbQfpG9Ktq/MkeQKBgQDvSkoKn6z/FFEu6p30 +sI6EC7iivFpwV9/hpPofHz9adAhnCgDSMXWD1KaUYmeGp2ki0PrLEb4bLS9wLCVj +HEc1mg6x4y7VepylxhYQXP7hv/86h48st2aqnPZEBqsMRPNom6U0iAVN2Otjhncd +ov+WsQfJW+uynC3xrddXHvGlOQKBgQDYiTQceALiHWG/rliBamM9X7ergFQFx0UV +AWiPAhZDsYjZQpia3ionjL3TAZ/7YrrRAUfjlGj5hjHDSDKwzGnW4nBly5WpxFTI +C3ZsD0jaSXphAvSDbrsqPOPPJtqupBEoUZcgpqj6ubBf+3KJaZJyTdYVzWx6Ep1Q +1IdqkNCn5wKBgQCTBDiTaGE4Yvox8hHUCTm2ZSEuUrzZ8xNpJhxKTL92yn1zGRFC +EwMZWOhzmDX05BxTOMQtSZxcRBm2OFlMGE6j3yASKPtYS7m8nARoT0qF1plwE2Ni +3NdmEYO4bcRfiGloJuCMctmXZ6PPhQjgG4oewmt/Skt4dD5CE0WPkEJ0+QKBgF+/ +U5afDo9TdKygeCxJkbZKw9mG9iBT+90M8WIDBztJnnyLMRWR1UwFtM4/8rDi+D6A +9XvRXRWw3AJAw4Ff8hD9sbuhaP1XfjGyt9uSaqFzSjTpbJtNdF956zXnNV1x2NBe +O5hJeYDcaPwYII5Ya1Q1zMt5OVVFM+DRCUv62vjTAoGBAI4xYPYed2HI6m0tUAve +Ebf/nCsN028UauPm8LtvflZgjoEks+PqYQ+KU6TnsIuvxvd9ZQpWUj2erWz7C7J3 +7NcU2+VviYSszd0tkXtwWoTNkFS9/pqqk9R3L4D4zm9n5RPjV7PfQPFK7p38CFj6 +YCXILhmtGDiHVQj04rBVSqJs +-----END PRIVATE KEY----- diff --git a/output/playwright/pr-64/manual-native-http2-probe.mjs b/output/playwright/pr-64/manual-native-http2-probe.mjs new file mode 100644 index 0000000..3838f71 --- /dev/null +++ b/output/playwright/pr-64/manual-native-http2-probe.mjs @@ -0,0 +1,84 @@ +import inspector from 'node:inspector' +import http2 from 'node:http2' +import { createRequire } from 'node:module' +import { resolve } from 'node:path' + +const consumerRoot = resolve( + process.env.NND_MANUAL_CONSUMER_ROOT ?? new URL('./consumer', import.meta.url).pathname +) +const manualRequire = createRequire(`${consumerRoot}/consumer.cjs`) +const { register } = manualRequire('node-network-devtools') + +const registration = register({ + mode: 'native', + inspector: { host: '127.0.0.1', port: 0 }, + devtools: { open: false } +}) +const ready = await registration.ready +process.stdout.write( + `NND_H2_CAPABILITY ${JSON.stringify({ + node: process.version, + selectedMode: ready.mode, + http2: ready.capabilities.http2 + })}\n` +) + +const cdp = new inspector.Session() +cdp.connect() +for (const method of [ + 'Network.requestWillBeSent', + 'Network.responseReceived', + 'Network.dataReceived', + 'Network.loadingFinished', + 'Network.loadingFailed' +]) { + cdp.on(method, ({ params }) => { + process.stdout.write( + `NND_H2_EVENT ${JSON.stringify({ + method, + requestId: params.requestId, + url: params.request?.url ?? params.response?.url, + status: params.response?.status, + dataLength: params.dataLength, + errorText: params.errorText + })}\n` + ) + }) +} +await new Promise((resolvePromise, reject) => + cdp.post('Network.enable', {}, (error) => (error ? reject(error) : resolvePromise())) +) + +const server = http2.createServer() +server.on('stream', (stream) => { + stream.respond({ ':status': 200, 'content-type': 'text/plain', 'x-proof': 'h2' }) + stream.end('h2-ok') +}) +await new Promise((resolvePromise, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', resolvePromise) +}) +const address = server.address() +if (!address || typeof address === 'string') throw new Error('HTTP/2 server has no port') + +const client = http2.connect(`http://127.0.0.1:${address.port}`) +const request = client.request({ + ':method': 'GET', + ':path': '/native-h2?token=manual-pr64' +}) +let body = '' +request.setEncoding('utf8') +request.on('data', (chunk) => { + body += chunk +}) +request.end() +await new Promise((resolvePromise, reject) => { + request.once('end', resolvePromise) + request.once('error', reject) +}) +process.stdout.write(`NND_H2_PASS ${JSON.stringify({ node: process.version, body })}\n`) + +client.close() +await new Promise((resolvePromise) => server.close(resolvePromise)) +cdp.disconnect() +await registration.dispose() diff --git a/output/playwright/pr-64/manual-native-mock-conflict.mjs b/output/playwright/pr-64/manual-native-mock-conflict.mjs new file mode 100644 index 0000000..ba02896 --- /dev/null +++ b/output/playwright/pr-64/manual-native-mock-conflict.mjs @@ -0,0 +1,30 @@ +const packageEntry = new URL( + './consumer/node_modules/node-network-devtools/dist/index.mjs', + import.meta.url +) +const { register } = await import(packageEntry.href) + +try { + register({ + mode: 'native', + legacy: { + mock: [ + { + match: { url: 'http://127.0.0.1/*' }, + response: { body: 'must-not-register' } + } + ] + } + }) + throw new Error('Native plus Mock unexpectedly registered') +} catch (error) { + const result = { + name: error?.name, + code: error?.code, + message: error?.message, + details: error?.details + } + + console.log(JSON.stringify(result, null, 2)) + if (result.code !== 'NND_NATIVE_MOCK_CONFLICT') process.exitCode = 1 +} diff --git a/output/playwright/pr-64/screenshots/MT-01-cli-version-doctor-native.png b/output/playwright/pr-64/screenshots/MT-01-cli-version-doctor-native.png new file mode 100644 index 0000000000000000000000000000000000000000..91b22cbaa9e7b7ee79e8120774c2f3adfe32fa77 GIT binary patch literal 43022 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 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-02-cli-zero-code-and-conflict.png b/output/playwright/pr-64/screenshots/MT-02-cli-zero-code-and-conflict.png new file mode 100644 index 0000000000000000000000000000000000000000..58b6148c6aad086cf28f71994920ea1100859743 GIT binary patch literal 455810 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

    sGirz& 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%0D6zlm%^PejqD2 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

    X{RnF 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≠s30)hejE*!JF3idavpi_;>qT36`aQqv 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 ZQp9&<3H#ozkl(*lMoRHv?tR0T{|9ajn+X5_ literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-05-native-fetch-headers.png b/output/playwright/pr-64/screenshots/MT-05-native-fetch-headers.png new file mode 100644 index 0000000000000000000000000000000000000000..e46975b447bf2b6744ed2f6b58e4cffe748f3568 GIT binary patch literal 106947 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 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-06-native-devtools-reload-reconnect.png b/output/playwright/pr-64/screenshots/MT-06-native-devtools-reload-reconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..74bc3644bab0741a567badcfb8c138fd09bdb488 GIT binary patch literal 50184 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 K6)q9f^Zp-a6k4tT literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-07-legacy-runtime-and-capabilities.png b/output/playwright/pr-64/screenshots/MT-07-legacy-runtime-and-capabilities.png new file mode 100644 index 0000000000000000000000000000000000000000..209eafbabb153e7373cdb7d17a52aac005f8c7ae GIT binary patch literal 263381 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 z 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�Wy1&d18=&U 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π>pgg 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 b$%+g#*ZaYNbNV|_V{pcH_He3k2uu49Ubw(0 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-08-legacy-version.png b/output/playwright/pr-64/screenshots/MT-08-legacy-version.png new file mode 100644 index 0000000000000000000000000000000000000000..309b69060f0d53d19008fd69e6c133089acde321 GIT binary patch literal 23295 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 e!3JuBGBb$euPJ}#XmAiH!r= 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 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-09-legacy-fetch-payload.png b/output/playwright/pr-64/screenshots/MT-09-legacy-fetch-payload.png new file mode 100644 index 0000000000000000000000000000000000000000..7a38c8dd7bf4d426738261d9ff5f0f314ff11ac7 GIT binary patch literal 78173 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 Jf1s}?`~$S_CP4rI literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-09-legacy-fetch-response.png b/output/playwright/pr-64/screenshots/MT-09-legacy-fetch-response.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc8e69102e1010e8335a0860b6d9a5a10ed6791 GIT binary patch literal 71124 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

  • cuI)6uqPlGlz}jkER5xii+aEMXxz!O&(Cno-a26 zt7MM-iMidi)^Cp~HgdYC!yaV$PBDoHMMZ-%o4SN92vl?x;a4y(^-^z>TWYqp_B{us zy=_^Ub72a5GIesK#IEA=kE$5-7SC*Kp(VvB`5kakTh&Dmh=}-lLeE!*bG{OK8i(6?GvDR7BUj|l zqW%Ys-^a9h{60F?Y_`P5lhbrF^R#|^`)w16n@-cu==fcExoA<}^CafdwCjI5IERwp zWtkW#+MW~M6tkCbYFGCOH+(DR|9ESxx3||FbSEpzlEk3xzEAm-vB?0N(tennd}V~?gO*T&-$+P^#$HQErTp?C>+9L5hGR9gH^t00Np z8@%_9XroJ&V_$5Anq#1&hrS5sA=8qon$pqnxvrrh)!}rNg$0P58zT8*)1W~Ak=}P9 zfnU38RYhGz^hP-sOQ=qExghr&B9xv24@yT@#NQ$eg(l2@=5gH902RxoBjvH6>4S~U zA!s`SXhC*>Z0d4M1gc9Ik=k0Ke`);tt^kF7_wOx50xI$#Ja|tG%ZzVHI66EW8xJok zJ|3Hd1fYKt0EbUiq29YT^AGk&fk#peP#UpnuXiNM`}};nm$o){-?P z-+E6=DHDPm_!=^8IB5D52fB7U4qToBEPLo2c6iuJ2?@FczJ9!|t*xBgTu{UDuWEE8 z&*%;DlyiD}LsHMS%b4@F$k6v~{z!#? zC}N(u9}Nh6*ms*+QG4&m?|C#y(Acp3ul4Y|BpjmRb87P76Wg zGyM2Icg|DNKnhl>#mZXSAE8EpAx>L;Kdju7N55%X=Nh46 z`9R4j6j>_q54-?^BpO978i1PZz+*DEFx*~YCTb|~b$df6IBqoi(7Qi*qWR}Ub@8Rc zkf8t(#@+68{)P;tXYL?=6LBk1Y;$RSHD5|kB@Ot;Cp)8DjEqB|BB{AqLpTb-l@Hp< zXlczU{6UJqJXD)HB>Z25opn@|-PZO|EI>plrIl`^8$_kM8>G9tQ3Rx=ySux)ySuwK z-MQgg=yT5b-Z9>Hoc)(FHgI$Ab+0w&HRrs3F{jj-1=K4$bNAeC6hVCuGaqcZq>pP8 z0Wx>mk!9AWJMzP3YMZ)xZu6zRPG^=Ic6r1iWO}khLAb7?Qyf0n5s(h2dtTH11L3c4 zqDbUWGG+>9+tzvuQOM`gi6xLP1~~VjPQ>CM@9WOV`iLAF5}aSIfep1Y4Ym#THaF&`mmBq#*~<4#Sbg-x0|M$O(=3BS>LOkQ}RkY;brQJ zZiRx~(PRv`shOFmn3%ELMfaM$-QA7;cww9XOvafSliF12c_8?XGzS@e#`rc>;ZaiT zqnPMQPMq;_6Ega{Qj4D)6JvYAXsgx>?1qX*=#UuusCivDS7PamdQviQn+*v z>EWqQ)x~~IK&%%CdbT+}fZ%G{a@|<2z=hcgKAatwEm>xPl#^V_USUynHdT#l&_AgE zS3rKXbAavqwR(k_*zMYSrCZRCiog<|XvM}yzK+*3uL9|Og;0668I6`lDxCs|D6B?C zp+R_v^)^%_1oK5Eo$#>FdULYV`T5cq zM*F~(SMFs@DI^u=i6?S{`cESuww>GBA`fKEu~M0lK7+<2bB$zIoT(JXVxsMKjpc^NjR7@wdI z@f-Vd?aO+0Os4V>=&cNeyc`o9B8OATQUCKtBtchr+$uUV#vXDeq|Yfhj6t$+*BPiy zLL!X_5(ovInLPK<&ens);E?cCL6GRmBrvE7$(`=AQLtW(dNE24CKyiU>y6|l=2TaA ztw(L0u!30q-K0DlB4#OU17wkch#{>fY`aW*o|vUKJ3JR;lcGcvv`4EmXffrx0kvnZ znZ>_W;IH4<-LHD%CvuLLlxB`n$Yu;M=+BFN3#Ofu*{p1R-jK*nm70~6WhUV=ZRl&j z3#Ob$p(Q3-L+O4amL-Dfjlj51(&5;8IYwfRw60~es0`-{k6q+SAz#T>h&Y2OcanZC zxAq>3?ft@u$FzHMIEg6Aw8A7U!Ir9=AnWvj(bcPX5y$fg=}7?u1gPzEB?V2C(dC@nu z(}F2t!R4Vi-^C3Saw}@fjXMa<)A~AX8mEiGE zgJT@KQ^(NIZ^zNGF=z98Tr~V^Pi~&+80-dliwpy;+@$>cJ%vb7S+Z~%_06H;U;Id< zA;!)(!K=gc*8V#H^y(iXjA;NyU_tlLg=qcf34IUZeNr6Q0&Z>lFfRzz)2dFIMWg zwA(CP+4Dy(1#MnomnxPv>vcx#j-l!Rx2b`7OFH_PITy{DOuVP|aS)#v$>SI$M!ACW z#rnm(#czxCwZ~a-=?C^SOtcDm_ivP*JjxWGKH!`>y^}s8pZFgd2I@}`wtuR3$XED$ za9)d)qomYc)mV@`M=G!GR0cFCi;Vdq5(54DA+hzY6-4}vv2PTOmv9v#L3%IX+b!|JJ)6Gc(-mXYM%sHipVS_8A}f5&q{)V zlKep_>dU+xiUxLOnO+Pohjshi2-~!@ih@2X6Qs*J8nnh`27?U@y0Nl5{_{};nc2=@X!^#HJjkKlwFaE7?$t>T8uJ%MW>sDHFq*#3 zj|nmnTA6ni!;sqlv*RJ+{B-Bj4|BqO8@;S{mB)3(9Lb3gx{6G#4RiNt)YH|}HM=gz zoA{lbUC#w$<^AuNbfQ?J6m1-wiRbDyN!t4Fpeq>Rr1}O#SI*tPUSxjJ=s}l)Bl27j zPb75wn&Oq-l|1u7pC#4p>hBY{!X+(WzEAbOEPPh^jy7f_%D8eb z=B&<7?2DJH#CmH2F4Gk^5 zlA{BGn)Xci`5*P)^&>(g=qSx*?3yZDZ_0PENtH&+^7{iL(S}vv9f|HDDxB9l22fgU zajM77U58Uc$1lmkN=)zCc$LHgL#Ebe?Os*8Dq1aQE{lqBJ&^-; zmeaYBC@x&Wy%b$WhQ!y`ZB9i#)0Aj`Gf>jwFz*3bSt)V8 z@`Xd`s5F_4AZyACxw)@{ueOyfG$_rX-;fd}(-B%c-uQ44|AsyF9r59q5BRDC#Q#TY z*W1B%(LoTWftzTLrz0zKuMR+CYRv28>1e1Xas}z1eUGHRe9;*nBW;1Jb`7vRLrv8s zA}Mtl+4e~@Q#W9hiU@gZ6WmG{7q_QVt9nC>FEPP*wO~xvMB6N8yn4h9EwTD$l3xtZR zDjh9fZzGe1Zi+OeYH{35*-jtJZOx6)UvdIgu)BlG%p)QhQ?hgTsdoW2)=0Hhz0O2Wu zhVrPnnc>B{y}_HGDvc?VWvq-5Bh?xg`=Dz5$zbpB`2}UC*z4MDI4b@(p-C#msnVyp zk>nY=#f9pzNE<5FqOoaZDfsbDA(FEF{R1m&O>Sy09{S&&5{Ji!cf+8PKS0A;kx!}) zcq2q6SjFr>^%I8MWzIp~lb8iJzUEK3q7A@@_oq)N2+-Mq z^)Vlvb>4lMRxA*&ZaAN-BW{`0+G=g>DIdpRZnW|>THp$qWUAPiqHlI9lvnIK4%fpn zCNHP&n1*)p-*0MG+C;kg$+ggvgUGmW-Ou2)s8eUwrg&Dptlogjbgi=E%S~@{eTyt5 zxfBggiZ9EfJ8wKfppBBhiHQh|DqU#SPf0hfs!VNwP$=`c9Gt$@&Yjdpc=e6@({IjJ zqBC6Lp9~@)7S5&kTMV_Il)3A3SVw%{z(tcPQL>-fRGrD>=g*NX5c2CQvvUhgs5f}6 zBo3lt0i0Z{M5X$Cy?(92=t%8=W0jhZYco1tCu0ox z$2e@tqEYxI#QsC@h0={0P1&n=ov(y@dxjkFefP3|&fM*F@%RqPQc&r6Wnq?w#KF+}HsXWkU)%~pdxvoo8JY>CV;9MS- zWs-H2qgb`qVNC%f)CYRvdRFt}8`Mklbr0*>?eU|Js9aB)p8gIG`$|UX8~CJ$UQ_E1 zYc3MeT@c8~I70}8Kc0A{|NbN-7kHcq^4Qz@bzMEZ%yj5^ax-gm^caaAx%1YN+EUCE z2rdk#$GcZq1@8;h^*S+O!oPF|V>fki<=;DLWzcQStUnV?Th7|kL3uv9D` z2PsjTCOYGajMp_D_HpY7ekubouc#$vjMPXYN6hzQ-;$i1Mp3B6%*{>@0oYo&`ou(6 z{R8Af!q3uN5N_tZS>#twk}b*L(4(tZ523r;ha^bTmx^E`36CJ}OO%gv4hShC#+SRC zQ;DHY--*6W0$9$Q4ZQv!5g#=l%vW43m%98WNv5K_#40^8PDaTKm6ncu#IB=!YIglhdXo8LsB zBF)9HJW(3!-J~NY@8~;d4gU;a*aJjmAzvH)voMILXvAqU4u4^PNRNRXOibn7sI`k^ zyf9TWkQC>9{qDRIALXo-37O9be}e%0sH=rbDd5PWbYm7BwPad~;v%`|;>%AeKG9@%y*_j zMXw7>sHNa}53Q`jexW-Ae_rst!c0#}?FApiCxh=VKcY5-gg^Qt$GOvej`>GSBZd8s zC5J@aMws``(6jxZVyL0cNz*e-a?iKlb<0e8!@4$ThxE-`oLtM|-ES_3f$;ytS z^`bw2{v3zJI#0Cr73gsCdx4Z`_T`5MP`c>chC>>l&v&QmrInPf_dQ4enJJdr4h)*g zDH$qhKgp~FeOThadcbLL;W-i>==6-GwV~6inPy#H*1+RfI9PB>azu

    y7v*LA<^} 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

    JHR*|6x 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 JA3S~iKLGC8Z}b2F literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-10-legacy-mock-http-response.png b/output/playwright/pr-64/screenshots/MT-10-legacy-mock-http-response.png new file mode 100644 index 0000000000000000000000000000000000000000..034ae8c385184bd1ad5a00855eeb4b21aadfebd7 GIT binary patch literal 68046 zcmY(rWmp?s*se`!DemqL#a&8qC@#g_p*X=^ihGdaTAⓈO=h4-QC^on?CRN?tSd_ z1Ck>oGqYx`Th8kW;olS_kr41ou;GJ@ave z436HGtFaL)zD5{C@&6eInN7m~^C;mRD-;dIzmbdN|Be;?zhMT4^dmg%-}of<7wf+V zVPP0FWTO3242(*FEq+gjFH3XAZa;BOg8f4O_g(o3D*dc3xmxY2_3kf{a>IX|J&5)6$QxVTZ!NluVSuUG=N?M%*xxV0 zNtzWUz#^thz`Jd8h404pag3l2J$=n+8h`1XgeEw&qK6eh)h4hS9i|nVKO-gLaxGXI z68vnP$QsqI7%WR%IZ3;<^Qy^o;#D)0HtKvDj|}OmP{=k{B-W~FK*lMLbq%vcZ=T`e zWMsU&cEC$rVU&c1HE6SVOdcn-8P-tHd1oI{PV#SNuR-CB2EV;~Q5NDzDD)FrysnBZ zhi}7Tp|Vx zV6NtG=!1u0-~>33cZ)z~yLSy_jK#ObdxL7##X0`%c+lWSL#xP7^)ZF)F(M&eP~SXt zi5r!@uz33oVXe)?pX%5@&%rZ+{}$LQJk|HOL$vBPNH@P06=T~6OIAkxj*J>A)({!d z^XGIZUUv4&-CD%N;#s>z2&Ld|-3TV$zTeH{!oUEWynGpOe>3=+#)pTy=@r{fTVZzw z%r*`-xV?r3(p(7j+8s$==0MZAz9!OEN0$#j3lxcv;Nc~*Up|6GH&KE^Z*7~Mu4LRb zEiU5CylzR0(dxaQ9?j;GxD48T2NRcyWl^8_JrLpiI#xzu@Q;hR4s+t~dEK{v$DFN_ zUHt*ZGJ>4vMTWFV!N_rTjOm04|e3{O(?R*AXC6|U7x`B5KNXqd+f{80HRDePpo*}tbJR1UDmgch9z!|dz11aN=;RK)F@G1S7?f_I6nx8H zANMs^8<{@~qiWnD>ZvSj{X(#WZpO?2S9hbrm=B^CN` zw9C{32{p!yz&FP{$2Y^YZXkp12tLDs25%Sy6Pu?yn>Mc_D_|>iiuOLDlH^r@$i{eF zTyEwnvW$8q%h?LS79< zGolX%6vyIl5n|^gKA{$cB`j$i=yBoaup^^R8~ddF7om5cxBFLla0bqd)l7d*7 zA-La}dQy}9o@0LoMn1I@`WTa(z@%LC@{cL5h4$-OTH`Crk39prMSz=G`!J870(QD6tB}KBa#`N z&c?VtIPUvCpO-gsv{Lg4qElVX7ux1*Kx>B)PFvbS3FJns@+{^jRfq_1h|nRHUns)LH8gCxP!7(x_} zU+?K}lQ{8Wt|<$|I_S@y%W66$UH|x`o zdLo-=P%1v|QMv_JWTkyiULFmznBp_&>@BIIe4~+al$?vb1okXplUP8YBFPFNlN&h; zxXdACHGl6%Db1hHj@wxRF5CU6AoLSB>0lXfI>d0Ut`>KUs9RQ1vE3`XGk?!ypq^Nm=4n_jxJvrF$gL@fH->kEM(w7WCievPsvH!*8MPD`Kbbp@=)rzdik zkZ0E=h1Nyq<5b=8yCIujRllskIXb=>zC>gU-j{SAIuH50sx!1WuhNcc^!A^xoup=R zKmJMOys4QXNK6c>NJKagdc?xOCce6~*7S8cNe2ZW>`cN(hKYa_+sS5QRyme)g;9v9 zyoRG+-4DJB|AfRN7SPrXt_~?c>|39y_h1zGuiNkW(eSqpdy#_t3cP!*z!lk)*JalorJ?)2uh*TK=^6w)pwLrBt!kJ3MUBO74^!T_*!~9;Q+5Yq z=oiYe#X6O7AO+>YQk_&KMXY=bk?8J|!|c~>uo&z|J>#^Ry&cSJ*7P`6l0vC3H{j$P z+P>a-Zv`%#oaeRHm5;56D$@gEG49@AI;l>7$zDvis93*zRyIeyS@6&d?A_7*_Jjap zNlU=8=h5zAz};=;lcBJSOEhu1#tlAeSI_jwPBTZYu}FMfS$Jb{`5&qOQ|2;3xLnSr2R5Ev+e7(mbtGpYZQF*^Ypb2Nhh!z#iZZI3m4KBi~pIp-w^+K@`& z;`Cr6M9eCM>*1*iou4s}8D6QjU!|ykzCNWp#KS6iiVA znA9XBcGR*<5qU$l#9kr^+sY>e!_RBUu`oM zptUvORGW5#=GEh;WYIN4XQtU4w6Wc4=X2PjpY*({b{ROGne3Z*b2Y(46j%2AO)Y{z zZguN*nNC$jY+r}x2%@5Ic6mt7q)U}NmQ*jYPoCYl4R5}fW+jE&?gS4~R%cHL9`u`R z3G=-G4}8u#3@>o?EsK1*U|Tr55`U%(X@fz;{yNkumMl1M9%*3Y(q(=8cNHPfbjXy^ z)xz5Ph>#$HGR_+u?vVU3w2|pDOu#T0eca+lxN{T~nJ^q&9B$q(a$zQzVI^ZjuU&^C|7yoK1jlOLN$W*r z#~-2H{0{}$5t2S|25YSz!K?AlWEKbaU#M<1g8eX|B4MXcPgfY#{Kbvp0TsstcNhP{!K;wZPZG@-l1hmR8j|Q9V8;Q#%-G zS3ap7xX}?O!4@}_V-y6W``ei!;hfwD1S|x2__SuzJnyB8Hj5qZ59b=p8EviyHvR!$ z(YfFUO~2Dtr>O{52p%!{)(p^u@7RqGCTkgNX}}miMS;Ul3YF)f4%TcnyiX7gHRx?v zfeQV>{2eyJVU8k$igd!!DQ@^*Tn|shw*fwCHKD@=?)FvKx%1Z}-7y8o?1XZaMUVOO z5VIv3>17f|yN6!2Lf+>o3DVD%m_>RIguUpM*mUX;>k5B(QZ?=aIzrI+JP|veoZLu) zS9P2nV!fTN=)huQXltz8qVv8|y^+&Hd=EEybLw`{dYhm=9xDyaZb7!?zB=5^kzsOdJ=vV!> z4aIk~={1&0TDUfsuE+I=rL{W^1{^us+0l=E##1sZ(bPNR7$vPp#?{ay4dj_MGRzqArz zK`AA}_14K_NT*9AD(J62vf4WHooKns^rEEj@|v7ad6jLYbc$@gx;jadIoxjND3Y$8 zE;TCcz{w`i6JlU^8;;|QBqhpzFVhl)P3^$QA9{Fn&ld2QUpeWoi)IK#-N(SkXLGtd z-$5)mIyi{Lw>dHOkzj*f30`^gTNN4EQJ6ouonW#Vmv4vU3Gq9{^S=%;R_~^t8KDY( zphOz`{@dt#smFtvVYG3G7BUywk-i_Xs(c!CUDa&w`j%TGg%JN!tfZ#6Ty1V~h5e~I z<#3vBBO1Np(pmX)*>M#J!lmDWOjgydoQbAB`+)8&(BSnxuF~6MaB}B#we9wKFz{?G z1mSHX7c7&E$YN{VbQ~99u2v1ruqM6 z0sm8kKG{2mCc8U_x;^X(Ax`FX8q~jg+e=}EXT9tp5qo_#kBx2o8Wz@b)?3{Vb5L#d z#2bZ0CAn88uU+%S@A1csqJlg{O zED}4QX#MIorkf-tp^!vMukwBComd|^RF6uC{hIJ`O4@(XS2b%xMps(trDYta7<8ES5sJ*&~rXZ zqSdtB4-at$=MQA}6!q9a5o9le zM-9F@a8sTS&ki2VR)a2F&A$!_LW4L(VprFg%d_XLKB5q}n{{74aP%49SkIJOKcntP zWd6F(PD@KU?iI8cY#FSkiD4Z|SQz0q=MOAd{(zyp*WTiZ25j_+HQLr5MT{4O$*{YX z^!Yu#a1CgL$$bqeWdse0M>vZMcXo72B_~JOzf*~Md3h^(dXUt|9D?K}gG-_+^V8m6XBhwWe9V5IvTo+&J z01X3}oK@JU3>*mrw^zP`tp8yH@nrvzr{nt8@QI=n1f1XPj|@^yb-@u>{p6%z__uQu z-UU=T>O-YTc;p}9Qk>?8pUevs6HDd}l2Qnx{sUQ)p&veWux|$cg~YsZ?{z|@d~#^> zbDEr)!6bE5_?HV4CaAcfaJGFB?z4sN04Vk^sG_5r!3|zv{`vPhFp7xY8~$tmC@6-| zeBU^vt`$oKk6KS#+?=CgCkjj8Z*QuRZBpdP{`(Udb)+9El;Z8yV;+e37{TmQame<2bDNl)^{O6g$)c-*%irnoyV8+S+-DqIsyS02s3sZ$dKyh_= z*x1{n{Y%Qh%{`XLP~hLz_8-4{!{X=={|z^Bb~Fd}C}otFm!FxQ{_yx70BKoSSqftY zk=P7Fcqu?hx4&i#B_|%S>UVFE@mb~ecmYO+hJ=K~SLg*1XMp9umDS$8_Kt?)tFN!` zzzafxH>;3`z-QnrCWMm1yncvf3-);p{FL-G8#+j0W}pg9W--`&=^aj{mX)Hi(v;M= z$^D!gT*FArNzS!yBM0Ad`Pt(o^I_1|A2|4AMh{5`S&%n*G)0b6fr2On^(Uy?m6lb| z)yDsF^d1!;?JA^(Rq>pK#*ACmj}5YzA)WhV-m z%%0YVNL-d)JBR*&Q>qM7IjrO8V5*mwu>N_6tqVcFRo#Dw{PgfiJWiTd?ol2ps+2WxvVDL!#GSMqoW@paLp<69TA!x9o8 zgP0AY5b=K7slPj25kq}{{4*=`O(RRdE9;9JGbSeHMupVvg8S20W>+wx`EVMS|4WI@ zSu%?P8{34()h@PjR7_0F&!0}I?D@gddslno6BBF?S9_T8@B~jg!?=tVii+cRXKNbe zx>{0*+ZEL4cU}ljXbXcP!7B=o*cjhll)esNQzRgS<0ki#lsmt^Z6JUX2)OJhTp2#3 zIE0^(Yqq6RPgFRZ`O-VJXnEdA?lVZEgY;Rb@WA!ohR2E>TOc*`o@gwCvN&O&EqI5m zH+AX@=&!-u;@;w;ZYK(LR*|taHPzLTM>^iv8tRxw{`Xdkr4PVOR$iKNOJdf!eSSdP z07);}EVr42+Hl{Vf!aN;k_rnyi9D8YBjPeQdF_E?4e6J>E~f{(CBblXgA*5{xxJCW zrZ>+IS1k{hLLQgm>Ja0dA$Uw$8q;}P7X6GbZVJZ|OLr%0v{WR0KQ6*n!d&WY7U*5u zy>G0#K1g$wuQjlFj%bocqvaVKV~l4As)^3vb0!$xQJn6((H@aVxH2ndF!NCv-Da7t zhX32dFXR{ZA7EwUO@HVLLZMfk(EFwQd&@k|qWEe-6_5G`gid8`o)M(}yQwj52X zo%*9_Q0H7E9PTe%Z`cVvRUnUug5rB~cyq{Q-RAQq=rUx=#Z{XpiDEu)F5cTCwYpSe zd-pgaDPnLp=w$Y;Qv0FwNj#?_&~B) zW4BUlCJS6U%VJz_tFfqNY%{FpGNz32x-(z$3yJwhlQ4M@BR|pC)uH z(k}b^FP^A}4)=GsK1}~adx?nsppN42P?%N>ZI~yQ8Wj~Kvo!B~FzNC73^Sl#u2;`Y zMfIVINVJ)Fsov-H*<;}n+n~*RFq!3SUn$RVX9yb~KU{YwnvjQ!lQWIea=E|_6a~An z765~Y-jtGRCJBF;zq-2m@^}aO*4`QZla_6L!leIjwrHwQN$lEt_jmyaIZS#GO^F1O(Vv4oQ^sNp67U^@E8ipAi?e7gO^c zw+D>v#_v4E;rK3;epJ|cDA-SK&#I@ zptZxpL)YWKIcg>IQpYc$cT#jukB>=AID<=EM4`Hk zo-T7^dRhAVz+TSgHEIbD4<9NTNJ{W;^L@HK(W$fX@7gac435MxO8q_tS%6N$!kP&Aa&IRFho+x(FLF%>F1I zmr}8-rwly|N{StxIfv3pL-o@%XChf6VISY%-Ow=*r7<*aOwDPO3EkY>Y;A3OYF=Mo z;Rs_%(z$J|q@+HLv1@8>>sK1KIeg!`n6#E;0aoDIYU|E$GIi>>GXbgbOfKn#zrQQUhT507jd%&?Inp(NpxpGE$y>)T}jE& z^5<%{qgl}W`TB+!mO?tW0526Dx%?JQv|<+j&D2{#EW-A9@_0wb`b+cO{_VvLG9sc_ z|43?ev06!!<(32@VkDRKT&`*VSSEQ+4kGTz+25R(Kcndm5Md%Bf z&)Vk{hmRZA2OK~cAmFuFZ}WMoSZg4EJ88Zkd|s8OMx^H+$hLwF5}1GB2o{j+mdvVtxvsXf?s>d)vUuIPJpJg=vB#EbQ7&2EYo z7M~O_2mB(dsq~s%YfHWv&5aRt%;+g$X#5{&SURDK~fqN5B4TX*#*F`G)E7D%0jY?^vBI>#JZ%V8C zAfK{Da*F77MV`8Q11=E5m5c|=?Qu+`gO_T1Vj!V%)TTiWe}vG7Ay`(~H3jonicJglG!(Ezcb1Uje79tUSiS|CVI zJzVW->FjkLO&3imW(hLs{6T6HRi9m!yWHO9tF@*a54omnT5I*C0%8R(LL58 zkpNqfP1C7X8eVMnW(#2w=>o?HX2A-8*zO9qJr0i0al*W-I5W4D-;a^1_98_`W4 zA6|OGQ9pQDSy>T(aqUQjK}zh%#}xXlOskN>YTPqWZ9YDLfZoJoHI2shxygJy%}k>z zz9QQI$He49XZr8-bkD$m)a^3M_402A6KArkx5pXlDzx;(lxE+@Yb{~nj&13me?M>@ zP9IEZVgs`l&1T5o=(Hyx)X2oxGt{G|$jJWm8c)dC(fZJa~rUXmlnt{8*6oKf3{G@O4(;NM$$vC6w!^u&^9N%Y()y&7TMy+k5pP49TBx6XJ zw3OJw8N0fXet7l%r%Gu_VuRO_~v_5n1i3FQ$uIb zKwS~#3-n|A!qAs$rD^G|XHuQKAt8YMGq5tAJ@LE(-G*hO*lNHCnniyi5l|_=26puH*(oGyE zt#A;OCFG}6m8&Nwhh%&pm&yTO1T`6x!U2Q$VxFX4q>RsEZoXH0G^?1+?X%X_dWFka zs+IRKKukcO_4}yKz@xL13+5O8-x|NIEiDJzL}Orscc0WDr{)W-&O#4h=cNbeQu2PexFe>QcN9Cy(2$VLCo%+x|4y49}4o2eBB?Y9R@xB?6@ zWv*q5VXCA;9?Au-Ck+zi{0TPOLVmB_FN+tKI}AX9hNe#b!0*=?pjM(0L%_B88NBB4 z_(fDyY-M>x$mh}deju)B>Q9af&Ljiq>%b@1gGFTI8VH15DYv1CQzIO2rsJ=$iptgB zjqc5Hns9J7um1%Z^Gc0J_5BBv)XTcMX4f-`AA6)|tY(Lt*XP-w;bgzZuwela{b^sj+g+hl)LU!Rf!-S$z3FN9Pq zKC}aGg2k~N{tcO`s$43g&&4EVo_=9MKkX{p`Yk>WUMiYGJp72q<{~lWi+q4wD!Y6Z zzvbX2HJm59)9vZX@cev(>&ap=vw_{ppJ=k^q1YuXs=G`DQXwPJP;mUNYK1!T1zs+1 za8+trnkJA}v3@quOO`_jIR1>MusRs`D`ZX(D*rNmK3-=f14^ebtD!^&jT(yyq4p1a zgVpHd))o5kl17x$OSv9S!P!e}?Ciw`6@mUu^E-dMx2`B*A#hLRmmb>;3fF3KAN04dQ_A4td>MPzrl&aye?U-^e{bw;$=l zpX?Vb${4ynn4*zOnJ;p}bxnhJapH(W!kma3>s>cCHL#EehPWN?5qwWXt%zNkEU}Qt)vT>gBu$kLT-+F zz1bllSH`~}l!@Fa|+t4#2B7&ju>jdq)Cd_t|&0vx2T zKxguq0_)5mc^`p}Caa_w`?(I@&hAt)hWLp<5(mqOFyNijmH1jK9qJ&Tn3&juK`k;o z{KVv>sH;+2eQfMEd3odqM7N*Zj)|;}dV0iKAnUoZ;cOPal_rWfJ81Ah1W!WLU)yJOsv2)_NJetd9lez zJ`#R+`{{u=i>Fi$b68{&#<##eI(m2~HArN#J{IMw`Na}xsO-A_MLnvyLRV`u9h(9W z3Wwk@9HA(milo?(aNZj_M=DBnI)pI->ciTH4vGt9^I*|L%Z(rvkD7!+%HO|XI{YM| z{T|u5cs59zTwfkHdu7p9$@YK)f`OLL{OQao2g{zDrdbI7hsx)SKzn<#?>lx9!@2;h91@3S$}Z=xep z*3dvUvd8&82kYNrBugCN5fPmpE+~J-#f66tg1mNZRArJzt*>fYvp2K9bozq%@jbkVOTpuiBp3QC844H+0UEI;jE}^v}{6b z8vou+@mSyv&xu}yhDCI|c}Y1agf4d(`}FnN8m<3*$G`ZrUtt6s{=b1A@F$Ohv;JQ%WLoNZ?ykFa~gK7>qyLB)-2~XCt^etFfd77KEzExF@XNstB;kNfC$< zck(;c)b;rxB;smmYNq_W(vX*rKK`>19fcHJLqkUPw|fc@1?XcE^TA+nSN-5>Q#*en zR_5j!Xm~CAwB5=?yGXGs|1zzh>o7lyzE=fv<{fJuQ1!|XhzZ;Vx9_>T|1% z`ciFBC``{=G3bXAdr9GSvp7Me!|mk6LC)ml^Yu9JJ76i`jbyArop#T&#$b!3{3oA_*#<0 zG%_;j8YUXPnK>|=rPhVVnq~9RK_BttaQ9C^LHcZ-fiPx3K;YjDqTO9cSAzA5L6&ZW z!o^wr&Y9w!K`mR^H0_46$Eb?Yjk02*>a6%zsAEDr{BcbM;-$CKQHDeVYBw8r zuKP!KKbJ?M&i_?1B+Yl9v>^Q0}5{fv;Z-KMIkD@Tmq0zPUySa7Z@2N z5NS5h67SU3%}z}{-CyKoW@i3h;;MRPE_Jyq0lw(Lg!1xw($vyMI1qK6Ivz7Wye+*Wpu@M~xC^J{u5j<(Dfgiju_&O#_j_ALIbi`n}=;aBAv|4Ad@v^`sE>q6Wp zKMrQ^LLU1;&8YkR!j7)`nv?pXzst_F5!l2PQ=Ao)q2&ry;4 zP~1hHGnRuc)N}_oB%;&3@6Sb~)Bz4Ey8P*PB@UC0%l==b95m{(r5f~jF?V%$iiYjhEymw@2xsAEF!|u!J%{U zDO5#u_w+PJH`Em0DgI^j;LmkUMrP*ON_z|#l~gE;-{Z3W<*l}Ecnbs6)NQdG zMwtW~58Q21hxB~v(YQe3HJwiQT2dETLD6e#H3w?)ULgtg9n0X|-#Vc~LsufWTWY8A zW9FktrF8(jMOpLZBQ@I{jVz8+6 z*OhK-f<#tugNJ5BLEC|!>YaCJLcy7diE^p6$N5`d9>7AJUSk;mogUT)K2~L6srG0t zhWHD~oYd)R>ldI#+_@y=v18P)!Rt02G46mG)+nuHG9YJVJ)g`U{*-(ZbtQQJDeI-P zk)%qHS|;gmZEbaYT=72ej}ev6(~Sy#E-g#xMxn=oV_m+DjN9S#!jg_-2(;2^&B0V8 z4ugKa6<0#`7u+wQsKkQ0zYKGVXNqx|m7P1gz9LjP7z3Qod#g`Az`3?mwNa*5CXuyl z)#nlLZXt#zchrjJ-)khUDd0xx+%wQ9WCZ;gJi`I{u*moljfz*-`J*||NIDNGvD?|Q zUb9_mERpxiGwY33wfV3NpiWkP+NqCQi?2{juRBSq&^$OiOzSXmNID<`WMeSWvl#&_%E)~rXQM#CLm;6=Y7h!?O1e1;s@cEUFGxQq<9jToJTvm%}rK-Oz z*p4%SOx@%7FiK1AM5BcDe*HXb?aUeNnqpax-wkq)PJDmA6q${TgcKdc9?pV{99gJLfxBzVd0I$z`eK;i?yeF8Yh;-N&(40N=G*R`2>e z-nP1(W!cOF)0!J@3!F9CK?Dm98WRJ%yB_-X|)Z{MYaG6lLeGf04CVCq+G@M-F zd^UlpM*PJtqdo>zrW~UJr~iLh0H95H_Y44H21RbiM#4~Cm^~PHuC%{DUo@3JoD5oP zr1VWd|2d9Hqo7SI!1)ZQAh9{!ti?v%q5rIZ%t}`h%mf$j5kSig;ek}%!3V}2={%sm znL=C^128d<{>BZ3*8BBpT+sSUPwKE}M5l-=5cpz9J~Ot_tE>9hc4dBX8_N=4pqd1- zI=yh2<+vZ${jVzVn;MC$K>Imcj3_IX^*pN~*-e@;3IHI}pAy1gnj7E15m z2bzyl?|G2&yN9`5=;GChP>r0>tD?O&0ot00fl{O64&vT8kU#MEeqDqrJ|8M_XRj$E z{lL60X`k!?IRv%ANBP1Ge$_HE%E^h>&@3d=@+B8~@!s*m<1)fo{o-=A_Dh<SYT~ySY3L^CffT$b{TA z0ET~gx~U$>Y*si~#H5YFRn~0vbU~L336gpx*jz{Q+f}0Qy*Yh(>Xl6*lSmT+F{3!s zL}imnjlqSI@s4LQ+y%f~Io#($m?!{CT#i`CFO!Shue@pS$nZCDA%EGg@(VtGdhF8z_u_J`3cP&iqe9U56KwcqI4Z?s*iiy;xfh!?lf4*ZA=h#49XQ)zKru(-ZxmEf`2YK6D{faA1cfv0^H8zPg))e-tFE>l|`LZ~;4BA*zU5jCCupd5QV?#2LK5=ve0_1P+ z{#)Bb1~uR$Jj#UoNIbqX-o1NI)FTf_Nn)*@HzfR~a0pe`6Pm$l)Pp^2CZd`YKWP<3 z9F=v~NQ8VDrFiDGs=w!bxDgq`YK51sHQte7JM4pq@lrALrxKK+rijO63G{B0D_^H1 z@lMQv!Nwo}5*~qAq_rs12)MmJwDpDr-ss-H=Z&OwC5pAv-P97@xiGm4JN+7o8<~iu zcp7%o`Ha5j=lApu&N?tqOd^IPaJABIt%YtdKPMCh5hwRUdPmpSNLJXt@B1nNaV(<{ z1B0%-R)JfOO1nz9H*0I*?_XvtW62y{qYQA57ck#Ix?-flz=#ECo6oZpWOupMYi_a& zT1(wBlbV*H%G2-uJjW*#T!?W$qLXh`!A)y(KRBm6>Q}@^b=Xc2GHqY5Ao%UrMb(cdPky|{{ z-qlAWJpcW6!*46?Zm#VS53P-bLfq^#O z&UovFwwVQAuXcfsb>Me+_wC^fChVtOUhTmwy|oS~$vq&VU?^*L2Eee1TwID0NmGiC zXR~DAV^hEqA=g+=5fmH(U_ESJxMdsLp(3yw$~!nPv0;%yYHGOAN%kuT*G?Br)u2f6N+np3pJUdobhbA5W{_=;LS@!LnH0cM6T&L5i(EPsa5sP-UU7|=V zC@R9&$V00d_LJ+|$F*DWu=rIm2eE9W2)@*7h!05qL9XGkgUbo17(andT}<2YV)N^8 z5=(z4g?cr>bO5jk<3R8zN&h;UULT4=f+y&Whth&Z4>x(Aqnt1ENgRuO*AJ)}(4IE# zF;)g56*BqER$CtG?N-v*%^=UyacDRO2u5P2;#4SStd}}GAmc_jKM7e`M2B6I1MDn7 zjO~X{2GGCFV#B+4-F@=uXiLsVs{)c>qGV?MPX?=XpmyI)gxF6N249kxZ3D}spTqdh zR%ODO%dDI2^$1Ael1k*cVuh@qez z@Ddem;R!hHjv(w=U?>=s**iKO&b13ENDv7)Qhnle?~#&r{6fZxRw9`f5?yDr>U_KW zc`)a}Pa}~Evp-77RW2>lV?j&mgGD7US9=>+lcfvQl^$9A4n!v>t9haI^>;uVnJqJjsXAG% zdf5t%0SfZ&1Jw-aDs>hpQMdZR0CPiWmcQOQ*@=#Jeh#|O^w`WU-!x!HzUj%Vi+O7^ z@IVpk*V!FpkkSCJ-5wv1FZ{qAe|amyMdg{x?WK;X7)e<8*I-S{Qy%PTV9F=4u(J)~ z5D_|%f2J=e*N2Ph zQux_|KHBX@dGmTz#=YHP_5lHQD@j4i`@-cUpAj-}&u=bz;}{Ss^qaXYH-ki#HK**e zpe@nFQJAzj`|G)^r-APo#j|= z7yQmo)Iiaog$tcl*FGUU31JdbT8fRU(15h6C$=-tp2p%hg$?EX$HEd?PZJb) zwWqG$$N^i0Om5qUOEWnCpdJ-X1`=sphq>~2=P{_K*UV;T?Ch0bzO4~xzGBt#C{D83 zcMobiiiQ${%xktY5VJP#c->U@-p&`;JAj)3C7PLYo{UEM^J}?YA}1$TliQi=`no^h zDLGwi^?GTl-DE9hw`zn>m`3>Y&)|w4zimGLIqQdG&G<&s?lUMn)>v zZH?g1A`|fW@l#NAlgn<}Vga(lyJ8Qt)gMGXuCyZ`40kRfUnosSA)8Sq7S+4MQa%@}@f5cA1vD_0#S6TVY-5E8;RTLm z-SBbYn8t2cUtEt{yzWRO${ocp^W1_G2Eua18oTmkWpi_mzkf&YiunKmwD-y1gMb~Q zYZ}-D`pvFPBdbq$q+!Xqh9s*E4qJdV0}uo{KYvMBKSRIVki}u?OpD<#GyY95j*zNJ zPM+iG_=Mm3j>zYEhaFdd}-Y|U%Ep*?l%I6ii}c~u4Y20uP?p}%GV=p0P^ zrQFazU?A^1JNxA9q$s&U#@nrw>W2DAf=azYCgAJQYw`wEt@o0$fH4tc*lB0vLC=$g z`Chi0d|K;uf$7hr*kDi%HHmRUbW43!*6D`Wn+GJU>#B;8iD|A}Yin!EX?tJkx3I%8 zb;u5VVl2HDMEvrPU#rh^7QbIK`1D2M;a=u)1GMTRO0OyPZos$H;O&iH!nwv&AzUbn z?fZ2hyV(%^b&U6)$BJbbh=6fumj3ZYMw`E{eeCu`o>YAVIRaU}kZ;$A5eh0D^-@hb zlA3TD`Ls{2WR3pwI_lscZ{S;$k}>#KFU_*2%Y(7RUoRKN6dc=0mCc*ltxAe=!iAaH zmE%J&P@OL9Y%&r`#j0|{Z0<~U!`xa-UPKxKjz3X&ySUV@wt8&@i=6{HAivM!Z}*E$ zp_dnQ=1ri*9MP^l$`EvUtcNFpiHnQl6(eVcHXU}rL9*>6cg&Z;1}c4a+rxxTu@H)L zDQ&3IN_8@FmQ!Wn78=o!75rDv7N(@;*wUJsTGN%Zw0OIbzIjXOF|(d59_dAuHdF0- zE44-$wbDX3{+>^=vHYVVjx6E9`CrwEdd&xw|H$E&VgsD?PmIWpi^>r z5Q1OF-@kC_gE`%yAl-I0!;T*V17Y|56?v3e3(hVs6kDy|-=SC7L`wXb8yY%XtS!ME zGvIYS=5@^48_S~8to#+L>QLq~k7LS#5I#FlIB?HX!=zKsq|+pB791=TShZogJd{|1 z)@iI5+%C8`mfZ{xI@5!(0-ZaOi3ufO-7stZ`hf?PcL`{tZ9owMU4)1`hImmP8?Lt4 zC-J&?0Q6~y@x)R}JAzfkk;Ixp7tE_WRAZ_B?}<&5?FKy~vp3&GWVv2Gzv@r!?;rBD zd4?oHGdKW_c`r8`IHYqomj@az6dZsM!@u2DNaqB=xVSjm$EvpL3y63cRVF6xq}3kT z{|NIAxvb6;m-5>DrMuCOp$rG+r&lYkF&&%){5uo~iHVdi0eSxaoK&hnw}qVR29z2P z?=a_++-b|6whu6$iSH<0a-^Fl&t3azyv1T0f9?J^aYsBNtA%%l#PJrIaz9>Vz$G@WWEA1b&Qx;8L+oQthT5SF?hqSOUtf) z`7hOfK)?&Om+gZ3eE%I12pixzejg~rco-eYjruAH329OrUSF4}2|9^Mt;fm!{lk@c#=$qdallnuqE@n4 zVX)TlUAC*%b_t*bwVGp$3{|qgSryr3C<`)-z0Tbh>H{k4=Wzqp`GxZLE+l@cQ zCK>GhZUc(#07++}J+R1UN;H#LrxZBL_ui=BB_qF{%Y-e>o zu1Q{gt|v!6cB7;O-JMxCHm$?(RVX!QCyv3GP9HySrO(cXxMprx)K({`Zb? zNB2WN^h@u-OCX%XS$pkORkP-tMc;+evPyOFk;HGV|YiVx`ZpZHQG z-5~Ha!~sK!RM-HmRT&VmfsgGmTeST*Q)~!7E71&t)d%OdVq-aq^8S(Y=J_( zP<7Ge5(b@;%Wj9h&|{{xKZeTR%@Vu?G%EE(t(d~Vk}w<&bf6ET$a^%<#$IX^lE9r^ zFV)u3@r1~(_i!K8>!g}d64a(DQ`@Xv85m8Pt@tFBV5U$XToH9%p4Gp$r{JL^M)+QB zRFc)PW+i-u&>ITIGg}|37Y=DKfh8v9>+bPP^W#Ybu`e_R7MIg|X`i%A(>U6Iodms> zk@RnQk!3PjF-4W2oN2ULCAw>|-3~o55|5=0tPAN~#SJf{FFp+#k5dw;69~5`<@?E} zT4Oqu|A*OBImr{8_N{=dRQ6Nfm}p*2$R+EY^lME(vHANuTogPWzl%T4HpT5P<_rfQ zwMQ6+nFnVOWeD#&N#g8T`Iy{c&{jEuNn2^Jl6VHX5p+ zmgGx9JGJCdWdP51Ag|X<{0g=Cq>kr4icL;YW=*bWXUZ>x4`HWgVW>|Lm=v>cp8$}@ zc21Z*9T-3^)nk$w(faD&ovk(V;yx>@h5Tycp{Tuye$!6-!ppL@>cb*th;$~b;CWqel2`@6&}pvn&&V4-cwpdqQ~^? z`CDdbk9LzoWqBpj=g&ZT02-X7%H-7W1`-AlghZ;isoiMgM7wj@<_!qP%cO*nk^w({ ze90{Og>nBZ75eWHIP?K!qCp8~qBor>A!r5r5bujLhHHw;+kVS3bq5D+Mu^{VM6~ z-Z?sz5IXS{3-s+3S>qPC_mtbJnmFnYXkEBp7B{YYd#h4A&rP8#-bfIXx$9kj4a`So zSsI9Eq_BMIOAO;0Fd6tlOiWA|!7O*msx6~I6V>eJX@!ik?>6fVc>Lc){GwO{AlrRX{x6qG!Ha-IP)~|biD}Qb>t?=7;s@oL+V8| z*5^8POQg|IMvw`E#K$%fqd@H=i0W)9#l>5mC{dyFP1pG%FoJsPp#LXqKb1=^ zDk@Cq8)D7Q{c^bKm~C(Pb<7h0ad8-(scSbgcQud*9=p4}pPXJ(=~tWI9p z+e=pe>hwB+ zzWsEr(Kv%2^|WLTGj2jT#YbY3S;iL#50vE9P|)JO^!xa9-@FqR&RP-D1`QPH@3}DX za7@U__oTlhoT5(_S$8q`iSGvgkgDH1ZtJ$Sweh$;_z1dyMyXg&2C*FQx~S6Yj| zJh=fjJoGY|>;G-v6jerQ4d#aspYCXYPdjls)&~@%h<gbLx98b0)Cv6wc02d5^Gi z5{j6?BditLk`Hw{Z;LG~mX>%tw?~(IC3JLnHL45Q*P5GEM5q4e^ZuV3^bb7$_EjPh zhjMC51}zY9eFiGDe{m3^3BPmHe}4BL4uZ`2<@L<+{a~UNx#=aV$NCeU>`l}C1)&y; z_)42NXYIReLNi6|Hs2U!D>zAk+R`yZ7D_m=@k5sb-1AxDYK;n2i(Z7c9UbqBJw|Vc z7CZj)E`JGoF5%><5+t;wuy?z(pMw$DgD1b~GJsSZTypCEA2HI3=SsLrvJYUGvtJmI z;39XAK(N1sr2dBr0mN?dB(DH5;QVR_bYV!MGi{9P0M(!-3(~A0O3ZHj|XV*RI!3e8a<(uXjRCs;9y)< z54V{7$q}FKFoJ&17>D`It)ry^6-#Q0iNkh(gfpG2B4KW~n^L)TG9a=LbW~NHSs@gl zoKeE1ZzW`76Kt+ws!{8$p>jW6 zN5kc`c(}rwM>tq!1w3RR2iZivV9{+8ynlKGmC@DB3us!>|E|04H3kNTr{^;$%Gcg^ zb$4%rj-i}f8SjdZ?sB8E_n@jM1DlEG)0(e;w`VePY%5vjoG|EZ^!D`ZY=!JoDN`@k znL6HmpZ2@N0pbqp+p$i-SJ)oZ2^Yq(zuZ$Y6IUxY`0yd-fe&a)6ad8&f1yRCR&*7x zAG^nM6`R#4DqofkomLZQKd1o7;rH(uh2Ohh9n(f~?J7!SzpK2go2B5(cNTJej;VYU z8{g%d3B9Z@E9GiK&_tuYip9%+3dU!2=v@=~?iCt3RCm7Z+i^fEZ=RuCqPCc8P0W-p zaDN3rZ;XGh;MmgVubTlPvt?+wVftY?c zSADp=>@lz-XU$9*W2p>%C{EB2bagndrltn6I4zb-u(@QvE7s4dkXKUS9neOzroVj0 zLb2@{EzcQF(L(57d-H!?P0f0z*RJmjT)4TpO6`39wU*g3iGFwb56jJ-{V|+z;o9&t z(HP4A{OX=1zE&k>y+HHlUffqf_Clfe7XVredwg!}2NhjMwwJMkf?J14j_lge(bF@s z!Z^$_T~8Q0Ir;a&y~)+pRlqE8xxRvXb637;Cg%YJh#=pcoxkp0;qRNNG`6iUl(L@5 zlr3H$-+bAAAI2EP0J?BAleZqS&uX#UT(L5p5SKl#RHMB(RWy&w;l{?qWH)@IRen}E zN&b))^SrZhU`Di8CLI0p zxQ2+|G!rqG{Ol_dg=&D=6ee|Zj7V@i=sOe#|Lnl0QZ8PowN{Afi!nDd`)74*Gm5pF zIIPDE%xQ|iqC@X)j_^C{zPuuMP`5@qPq&}*B+qyu_raOcV{JLx*gG;JtNfe0A+M&U zW+p_kQq6&JGZN^c>gww{W1a3ddLjfoDr3>n)z#HO-+l)UZ*Fc*&$-3J{n6u&`TK~~ z?JqQbXe(P=jT#U4z_m^SZWj{Knp`LBtOcKmS@QTJ?s``9F@vSXI-}t~LBYY2P>0y; zHWTSWFa$ico*O4=+D-R87KJk7A^ZzFKnq+{SK{mITgY{2q5OG4tA~}4nXd4nrUY@U zAFL9wxH)o&=YOyO0*U&Mo^c}S4;|@PrJj9CSa`QZb z)fX>qhhIcMfakmo1a%^B6htb_yJ(_1Jg)9>F?<+PI{6Dd)e z8$_#2Q`=klO7QSTb^m+{+ec6#)WTIKrz?DUEbHDqJ!Zhf8#F_@tYwM;n#1mN32*)W zL=mI$TE`jMfyGj-g`VDLlZ~D&8ufIyA5HFn6f>Hp`PucV@UOT34i0AOCTQgbc&fkO zKLw(niDq|K*y5ZLokk~X!a6l|b?F2qxq~Iol~z#Lj3UXroIlVwq=3pR>*;#0-z`&H zTRV`#O6Oi_x))7BEF9XGz+8~y4~6YJNG-)Gt|evj%cS+yJt$;SIGmvu0lnh?)hqrPvd z;+E452(&%JOiT;NNCArd3*}O0XE8!#ybPhd0aVoy``)N75m|&RrGK%rvsjC7)C5U23W4nf=R*p!H zy_S!@!dcVqzO9RISqs=Q+uXsP(8?@grU##co?meiP=lN4!D$L2eP3))d1b@9d`;EQ zyM}NNrXmI|Q!wfV^O~{iIf1EnE!~u`D;yk(JThp|g=*Ei)T0A_wGGcCK@oE^+xWt&&MWF@K zmP-um80~AcH;xz!g=^u^*FSe{93!fyS}U6yTHnW5`bpj#5lt5VEZnxB2e|7y$T(MBPq6ZLwU=@Kq>TZh_E42B6t8buymt%A7Dv1dfg)2kg}7L40MdvWtNpGD(dcQYXnA7ybY;O{nQs zCK3TA@xz*7i(sU&w&QtQI7zC{D?Gp^M?F=MnqHBHWbK&%=@pD%^sBPhC*wxLJ{O%* zqW&Nqg#-)W{jvbUS%l!Fg#6SY&bI~=dwXP46)m?Cq8vI0_LS-95arrB-nG7DZ2x?e z%-5w~jDO15(eeeL29W>NgIEFat#i^pDk|#Bb98ZWab2DB!=n{LmNaO$kB!|8;<0Nw zQgJ{|Ts!_dJ$(&01#gfZUo$h?+uNgE`+h^QuDaREDkUm&ed0{1U2|Qr zUhJ&wY=^Va;SyfBwY>@jp^(b*gR#v>WW}ofb)$*2ZtJTQGM1W)Cbdp+y6aa)KE9Xj zoEJ0aY%*_S2hh~Atk4O`s)l`nD-fbrxm%6<)BHzYr~L{lSK1Y2)aSvbQUb)*`hD%B zFanm5&;xBHmDCm@2Zkiqw6(dwIU(kW(rXFt2Hup9_UDqjMkPgLqM_%sjlsd8>vWbH z8by`&DwKa{s7If1vdGxY(?F%VRyP@8ElJf+t3^w}C)6;Zx2A2tRhCQ<|c56r~ zP8T66tg6a}cG^pP=bgA`7&|~3SXry~NVQv~g*CDm7P0L9RAEFN8O7_EP!H+fz2H>9 z(LGHPM-c+msn~RjkZ&p)PnpAi-&e@ zN@?`t?N1|Cc_er9s#*m4+D{LzdU1bS=dAG$g>2i!-r5*W?kY)1$xsbNLs_1PRwcyt z<9Z@2bjah_>JR>`THpVfh$EN2!7>`=m^ca z&=6vA`QXFbI|;pYZ3~>d_>HmB-?=jQdqTGKisJfu=^3@05~g~!yd>h<3)ulrUYHNJ zYu0*{UEI2RfBPT)*@9!30*jaeJj{XQr_KiB`;d#niAN*aW=Q16^^u-@)}y+4&thM4sm*f+1ooSb=5 z0r#<|MVuw=WPa?8^~1nE5fKp>vCW&k`0;H7eiLMLY+zvf6HwvbJi-8j%}((wO^?g5 zc;I6Nlc%c5{2avta0K$0aYeOyyWTdFNz;vfoiE||M=*jE2OFdAPC$~`R0x?y2c1}b z@bLkwu=R>tz3OnHLi*8AuXj;HrN&&d%xTg=AVZRWO-M+{T&<>3!bVC<>pwG(&Os?8Tu= z*8kePKs8Hw$?dHY{N>YO0c(j4ljWkAs58{HS(Dw95C3ZJhl)*8{1%_<7lBk>(%!3D z`OW;OPoeX5+dn`=aJ!vl%$X|GUOm|GIdSSLtOMLSjV2psC&8PFPhra~p3_Z6$6U%& z=UYSkDZr=1Vu|18$NlYj4r$O9ug67clDRJ+KW-1iNPN7bV>pTl`}u9O#7*?!lU_R7 z@OtL%IfqctJk$5FzS-UJ_;sl5LCgk&OL#&!@nU6=(3i~FeUXrmxWQ1L|7KxgdND|) z*J*rgLDkHw9jzlFASLP;UGp&>v~Bu_qLO*t6?K*oUza8%%$3_WFf*@fk_UJU|KT}v ze6zAwg@a0=4UM<2JWw&DQtF}KyPU0wu6)KErqgy0GKq9WY5P}PPCF;o`od<*)paVz z9_9R&mL*u@WHL!yG?q(lFk8d3wH}8vr%?|ccYipn&34Zw|Ni~k?#C8Qt7W+8HwcK~ z!Ve3X#^=BXm=EG^vQWurWJTBY`T(29Y~;yX`2F37e*$MnrnT zf4%BH&&|C6EZyXyu8+0#(_bv9m+P)qALmne>RADU!G}mxdoZ3O|M~|K<-CQ7$yB=3 z_UGyt*`1492>A}+qYIo^E#}LNe8nfIWgF)9`b0eDPn-NG$(F(V zh4|Jw?(B_FAGWXPb=tFa`+e%R@?m|N!HYdL*|5-(>J6jwV3qm#{`?jO)5Ij%frIS> zx-wJtAK#|@2>*UjmuWPFt47jr;oHrHupD(URjHZ%p{SyOREMiszu$zH!17-{ z%xJXoZzMXnM2ed@S#O-2^`6487a$&SdCRvagSvmOR^$Y?-Fe&M0>>3pR&!NsP&ML!pCZe{)4M`D`M$No{2`1#x@RPT8tT?!+q z1$bYk*7AWMEoYK(N2prQ!C|{at66O@niKZiGE1ky64ii^%wjP%KpAHLw&B-s3O8DR zBD1BjN|}7ooPFWh#_mj>=_--Xd}UMz4bRfj@p2Qu{pNrC^rk5~`~SWQ{1T1`%OmqDM{ zIIhp^9G}jRxVhZzFp!*pueJfiJ18icByJ#6NtJNCr&g1iDp3zm^EpEcG9oga?)PAW z-$(l3@9X#O-A#!$2PYR-AuvULA3O?8Sl6rm^OgV=6FA9#o2O;B)c~gyRuM3ku)x~VkIQD7d_^qr`z$){(1=Mi`ftVgzV;P8Rdz{1ZAP2Z!BZ(6u~Ebx1;$kbg-SMl2aew8~IAsW=7=nOLvG zk#5-A$KCdMn*CTJ;lqWd7NAaPV@DyCIB%iy4u507jFIDendzRh#OrxS^P738tq&XL z{<=gO<7r+v#&%`%yjukRpmazh)!rW;V+g-}4wF(V>m`b#jRo%qA(Kj69xP%6F7OHX z2ay8!F9>6Z)B54NtZcYjN|#!B03OF2$KAVkJ0nw5ND@Gxb)ucekEJ#Y94r#!<6#6n zG0r6VhD-Sxe+f*|azhy~GYm!$UmxTV^LjXG6bkMtCBlCns5{k+Z-b0^UY%>Ya5c z$8dwFmgDPl|C#^{V67ZBlFq-m=Y4PQcD9r3tF(06&jPTZk9S{Q1v<4}cC$i;1mHu# zrTCa(jybmD*1zu+tV7eg1xWy6R0hN*aJXvw5^-DmnR4Qv&tBY5n~X}NcO-=m-Ae^f*95&rg>nJz`_P({7kjHfB@Z~(Hm zJcw_Km56fdVEh${zsmJsV6@E>E(dTvc7LQ{Do7(?X+J1Qu76Sj0+Q<5Sj%JX}h`yP(3TP0_hE`>Mp8M=U5 z8dEp$>$fO66>avQI7-v_PbusB+tm(AqwTi}BBjOfxGa2H0ucS*p9ZXlba(>W`;`4! zT0Krw3&RPPnuG)9vvMHBj}{saw(hjjSU1^!ph&v7+(G!ubYOq`_Q&%nxab-kIJ$Q%K3<~j?WlLN?cxlr{?Lz%Dkpcho+GL%yn`E<6cER7cOw7Nim^{{e+%*4PDqNW+WjWd-ZIgO`It zsa$-UBAln53RE==ebHD*#|0Q+1(Su2AhoF}(Q$h?$=1$5=eOz6%hmms|G4G)yX-A;l)<6PZup#!zR^g2?!>yA=lT%x(;tIMk5#tNY(~vLR`Ju(WQp?&afnY=~4Ws8*-%D0+%uJ%8RPa+%|4 zal1p5K`!=vDvI8ICH*&5mMcZiBKZXtN>`+Aex<6SVtLi*yVzidXj`qT8wvAJj%j4= z=r~_vq_Q>8)pm?Zt4Tsn|8;q35$Lmk(@*b#+PK3J&sVdD`_~j1avpn1XI-rUZuHGLE^_Bf>)d*??Il3`7Ql?3 zW!rCEGVg2?S2A5}a6g=?3VKh2YLPZzLB=k5eRcYOT6}wl&pXm+pn*PHwX(2y*fWfiVU=&LQS;*@%UiQG}TQv-Ubcnl}>}(yS&|B zO3x^-3N%xl=#lx)cG(@X>uhTTeS81RSL@ID4L9Sa$>TD-LuYy@anUFdZ#%*zt{EA z%*oc}In91tkZ(Y_)o+jQ%PiY;1adq!ve&jbVdRo)|8>4b9S6jH+6K;#vw^pJC#9vt zP*2a)n_j*_#0R{!j;3X6EYMLyDyj5y&HplRKAx{bqF7!d?H3jd`1?EIS%!DkY2?!q zYq8qH)ahn5T>mD@Iz^EIz;!KkT%R`nURz36Th)IY;xPyUO zb@F?gF-I0QRMF}K)ntpB{jPKBVr^K>5@bwoK^#?qfhy`0xrGzRg<@2G9((vyX>BYx z9y+elwT(Gn-8_XI>uka(6(^~>k$3k7jD)X5vTP!9>nXII%{5z-qNm@m)mNsQ47xa_ za5=2>buv0yXwd*9Lyj_=2;yPw()BhhqdT-422WTxp2cz=3llRJbX)J8GXtZt`|h~x zE;47*GBSv90*lOjqjKmV-$8;-2}wVmV>B%V?`bmd>8jDao)zhHqzCigYj z=#Pi-te%7l6}ZzSNg7RdETL`Z7~~I6ho){y#r$YKo}%#UN_8%O2x!Z?uR%7iQ~h;s zVOM`dD_1m7-5#4tGE230?ES}x8??+C_?P%48oyO(vFyHFEHzFB%f~EhTL#q_S5x3{ zJ_n{R?2%ujP*j|@rmfeQsq%PssS0|7WS$1(81jF6N?!8R68S8BMvx#S*c~%|AHKQ- z7SUy;eTmdEWuXOV&~pw4o4ZHVVDJ)O0^HG}=WkW*JoUqAx)kMnc?nsQXi&w8Anl&V zc0^mIrIQ+v_KrjEa<)yZN=aoO+44S9r}7yS-`~wDr(9}V&%u-(EzoX(Sp`}JMs>TG z6DB`5`j&|5?C+*Rnj#zJbssl#n%?lIOEDT3?|yPlrnl*Vz&4n-Q9Glif}BjmwZYoW zbG@aK#&GVT6e5}3Lee0OQ_2`tawk!HETfTXaTbD|C8^^fm|eNmin`hF`!y&zQ;~_o zY8rH|To5-H-?Z~Q?5a>_6ANNrPEB>8jv=p;8StoQGCiB7e9H3X`U@F7S*G-``}>J}GB}Aw#KS8p zJtQwlA~M4+XI3Z=eG9dlb7B~YjH|=lV6~;X55I`?L5I!uVkT`d%7}K*JYM9VPb{MF zvF{|@PM%y2Yu8wuB92%QeT@{4wi96=>9`jPGl11^&QW+}wBN%?bCizUf3pv%`J>dU zr-IC+>}+%}K26a1=aaiAE~Q}0*VK&Sa+yt0rEh8CU<6rw%$?wnn#Orb=W`#%J$Yf$ z=QGo613U@uQM!#@jn?O!<-*>w;rIfz8ip57k95T#tgqr8#Fo8zwFVGALF$wX6dED!pO~IYWcq* z(>#zt0p!w*2rjs_hZuOonY?=@{0)6wQS*ivFSzDs*q3HeKH=S>W50}O4&r1`kv{B; zX$zMB2B9j*1}XBG?!MIzJoX9T-wd@OzvPER3 z{Rb-rGwl8!aPAY!H!Hchx$`v^;H}>GZUfG%Ho!jD(mn_7@%Ezp%6Zev!}_n+66FK( z@9yamc>EdQfju%Z^7`=}oJ{X~js7mo(k1ggn_C8G0md$+gR86S#md>Bk zt+V=%(${9a|a`sq>UHO;7GNO1<5IM1?grn`7`l+wMtQ5q&6P*kn{E;kE5Tu9t} zJkz+=0rRUu*s->DPv?1JriGJoLqfO0=E1#jK{R@`P;Af0uo>jocw#*l{lSarU6+V& zGHbC;gYF_WA2th9zRvw$Z&$Ai`PC)v`tsO3xS zO_k=W?JHEz&N|Pp%r#=El@TF4>>ZF{7z~3^nt(Mg{oORddVvb9{q6+(Ixfcy->TQf z{&aDr@vLIfNH*L)z1euz<<-GbU|0%|$CqL>Jk0q+4OVPca~7KkRiM)c5>uElpOawY zD26R1syIT%;Ki0`zSB7Qy18uVT*kW=7jF z8KDsl=DkBpbpFWQT!j#Cz1l+Cnkk5*Qyhu~z2ymU*aO{BuewB*VwK~f#ARj%gdw0lrH+-Jj>87arO^FW&1R^P+wuTEPi;@pF=a&*S{TNNh%biroX`0-R2+5vgnVD8P zDKa?IdVXK4d!XI%c^|NjCsCfKt~30JGWY9(`;>DpEOy&^T7R&f8wT=~OgC}XsIw|* z6GVSP+FMO-ZI#hQwifHEIz=G0GMBuO3=QfYG)1^`aBQ%W7Jc1YJLXqk$Aia?+RyOw zk;-iG!?kn2FriqIgSjVz^+CqZN6-13vpF`)r-%B>y@tBSCaXW-r0@miMFeba>EFxN z%;)VpIJL(O2mZorn$Js!qq+>mwX{|h#J%19HU_Zq1}ZoSd|sFD#^2Deu|I$R!b?T9 z59UT04JO#%l=79Q!Q;);m~HNrt$(6bV|u>3EFj0?bP-&1fg93lH2K4N+=tdr@`$_8 zV&C6IF>W}dQ@gQtYm38LEUXw3R1s<DIS2kzcbg=J+@gum&EIO z-er&Ka6I;!u;5{Ttn<9wIzLH;EsXx#n3Lky^Qk{TkYVj$!++y%)3FB>2D~6K3X$49 zT^G(vq5==rQ!kU?m_wpkx z{rvsijM+*B+ZMBTHBG&_#^0m08~Lx~`q_dU(0gGnk=CvT2d{gwFs!FOy*57I*;&5G z2*HY+6r`#!0DJB+nfuZe$#JEKUMpr&mhxeox?thG)^IYsy?xBH{5LAaG3Mbk&=UQ_ zoLC==&XX`%sIQn?+IFKPO*C=oKkr+?|At(Wh?a6%cy-t)`Xr?~7dMe#7o0{nhBj@* zD?M^8a>a&4Yk6XB9yP*`hFMYriWfGUv`lt_ZBX(v^-9VzSv5ghAH?LXdfq1r^+)%| ze9CWRkxt~O`aVj8K)~}d-gJy@5c0}D72_{Wx{gmr-*PO420Rk#8taA!aMiZn9x6&} z7vXU~s}+md0>G?*DA(7OuK=0;E8st!uMJd(gFwP25Q4=z+LaBMjiNnS6O@64kef!f|-dcy`xe*Q-9;@T8`Mt(=a@EIJ{3%bRD>yM-MC zi}Ca^|J&>1CFKSCj}r0aGJbFuQN>A9i>_+dJ0YR2TAaE2J3jRdzV~r0YpO@UJoszoos zU99a2f&AQMifQ>%Sb1y>Rg+U)LcQM^Nu$N`gTu}%?0dr}vx~63T@7_G z1WGeXHoKH1KS^#>R~OoJU8Y-wE+?3-$&R_%g~2*lt%$={Bm~C#@w6wcM0-dxJ0{;v zwE;RK-}*@0z$*MqeBa@eOWZ4|#h|JxYKWn~cB%`ope+_E^MHTyxBl1=Qzf~&TI-{g z`Bey24atH@L0`DSGeHr-+9bALnf3Lt)%DdZT^~hD8lKACgO0~V-Z`Ib9Zu3|yyc9s z7270<_E*w2CP1)%|8UdX+L~6EP<7GlxV<^?;hpkSHBL39%5nSNX0Eo!J>N~=`BVsz z{wFkC>tdX=qPQJ_e?A-K&Ui>Bht-TW8ttr+P^qBI6n`=F28~ECrjnC zO1^B@(9}C5yn3zXZtXgwm>1V(^FPP^+rvAml?Jx}LZt*&%*WIBhd3g9E@>r7$unOk z$0!jZlSW5J0TYUUNR7pqVGi>2PCH1a+ZW+zS)1NOW0-dv8N55hy5n)_v!e?M$@Ee}q0&pPqwNiij2F5nC2*sTD4NguzsDzuD zBxp@Bw#{KHQO(8D%w{B#tO=>hY?|e1XOMYm2;Kk_ar4=HIQX4W+KuAQ=`kUgkuY=T z1`z~;MyIDny(~)LGwyb?vJ`|dT%cS)Yaj{^^75xD!(YJ?F~Ve!BH{1VA$!wS$#IpY zn{QwF2Y2QS^r#m%E}!ST|88BV=FvaYcOSM!e!KtI-HYk-U#~ppP35d6|MtcvVhH^( zJfx77fa;q{H8AJzbo`DP`|h1mSPD&x^L=*}6%sj7(}R=MbKxe{$_%Uek%fU4BcmYj zJ#{{fL<3gHxNKHd*U2-9=RupSC2BmL$w_MS6I8w`@CstdrPfvH75*&o6{~ua<<5U- zr4w1xvGi8XNNFIv_z%T5XPGkErwN*O4kxNqRE|7rYkOCpnvtYwc{ruH0!(QM)q4QO zYbeUnAg=d;<1-pr`s=` z_*MduU(gpar~>sI(buU-hc^BbC>4%XXldAubSL$V5MjSd*ar9LtTO#n`{VLWr5MJ+ z;jYpePcKsh{?UfTLVdrlsIlpu8-Id;ctE>?CA|T`RN1hiNcMiqU6Aa3%D~=KoS;ig zL7EF08ddisG@naRM^{K99G@}Qy{B1?n7A-BC6Pq;C`!T`I3Wj!DX3M~YkE-q*HUYKvshU^F zQDuEmvh0Ot;)yjPmKkq+t@Pe(%Lbc^8&wnpmnwg|EX7Wo%)bYYI9>uGQ%%>9RB1Ey z^mKGS(a!Z(xs}HOn2(f-GMiIHTu}^`MI4SIi>1HMt|BxmHBJ7?YmFbU@39Kj)C#Aa zQDW5e9fHo&#rlD9W$r_l`6lb(0HvdQcwZG#j%k@2%6$VcnG?*DO2Yc8b`j*r@L1rs zSYbzo&(~M+6d!THc(x4Oa%pf{2N@07a|)ix}~+a zxE8vDajTu@X~B%CjjVacoe5c&BVJle9Qi!w^UXLq)DomY+7K3QE-u8Xbcmn1zCval zi9R0!9gY`{j#g=P#&YFQV0Lfb8YdNUm4vIexSevnu~)p@?4KE#8*kSiD%_<~DJhVz z;xH8IHw=-@wWt5MFVRc zNo@ahLr4#1TFvp#eLgCaC`Qbea2d$ z4vB^Vg{9OTOxVbg@j-DHjn0dW$t3)(ZUW_~c;$AaUIH0yzKm#;$esdBOiUKb^??~~ z>rMs2U+4dW1(Y11k;HAW2=@5UQz+KUQOWSLHmGIu`!-oD%KrWYUG$}vmL#SRE31(O z1WeXqhOfE&?ZW8-;~aE)jGHm&q@%iNG9s|TyrZi~*c==?aJof(Wk4lZ=Mu74XZyId zhUD9M=&;)Odp1_F*1lnyF=y={vi~%rC!P2-D9*X*-3{eQ`#pd%td}6^+yuR_<25q5 zEo;naaTwFP`#^Rq!@pVTcMC&aSgF<*?aE^4Gn@gXQ*F_wr_go3bf|}t?Y2}eR_DSo z#*5fVCe{D2+!B1GLc5y~AEfeSWjzj0V|gHv^qxg02ze1dw);)$4D^H zY&SKG@`5b%3um_uG0m-(NUWMS1d7*lU%)(5OnZD#~3h6TCKd z8b!Z;eKi&X6u{RA($=c@TJ!!jb+gVfx)fcoTn!$s2zm(t(}1{ljtg%_$-@BoN~ zjSWn3t8shV0Kkvi`)9%S>*IOz`+b`RA4ySCpQ+!)4-!urG3WUn-hRJ@K&{zUNpDj& zTxun@^id+VP*+!XzS``U7Nqq+>^nG|z#1`PiIQ?25U(i z6;3ZB5>8BK=NR>!{wL+!w4o_{V!G1APkG*RoPr=Clr}tV( zU_vaq7qp!qfZ@_J4IzW2TJjR_-_sH z)%z^GSX+oEt4$aBBDZ^+j+liupa_kM2(LMsy*{rVTn@t*HlX4~6H_EWS${r~@_Clo z?8IAkIMwNSMJ%Lwyc(1cXX!Cp&Hf}JuhZhtq+XQ|M1yEAHT~yFtgpS3Lx-Hr9+x(A zB^o~r@T@m~O3aE%iw3do$5QENhx>JSU0_L2DVHQNn1B8p3#{MQ$s~ofg$7<>(5N>G zD~a(Qa@d(nHInKDZqaC59xmdMiuw#`lw#s>yIu=*OqP1k*i9EJIPO@9WxrWH?GRJ= z6pR;ggLOL~BoW)6|Ff4yqb^&&LAe@@@?vlNcwc4v-KB{*l|HN92BzJ{KzxDpA|OIm zs+GGb{o%L-ntJJEHbWzoypxhdMu0pp7`M#;sPp49m*dmgD6zkC-uIvc$Nf>5$4_qj zXNV+$cv|(BvdQ-4P=W$s(IBnC&cy%d3Xe0$yPH|V zO8L$4pn4_hnsS*9TF1FwafA9LwoD2S!%(D9crx^Cjibu*Yj{9{Q%AkxpD|(MUf_-hTeKSSY^bM$i!3?n)4Zp(>(w9dmKw!uilVfUmYvf*;l7g?a<=V zYrI`8e;)Ud{oJK1nyQL&zIZvIr3C`Ms>N*HM_<{S%lTJmqS@CNDB~voE0Cu{lt*WkSNhV`mpE`h3)2K8jK*RRhFgU5PoW_~t`$Kii>y<0#oHaQzUUM`B`hwZ--wHH) zRve6AjjC&2{&fQ`vxi|i+b)Xo+6z5#>eoB&H3}L&R-kqYl1cPUP^~oHW;5E#qO4w9 z?6E{2=!B(a&>t$;jiN_2(NoXjm<##>%o%htZIJugp~b1pvx$TvDD2s-Q3oFyzh%_f zrG)wBYJw_-eZ*r!Goj-KmXU$60Wche4y79E+AZ+e!cZx zPp@*mL`Bj37-9U0bSo^Pf8@uzfrTBm(wcAfnFkHRG5g|gA3h>4#hm=?sFJ3JmZX%# zXY{_o-fVeO+DW7ny||J?;;>#DA8AT7PsvDEr_If+GN>Z=+FUl*+Dz)X6hzxwbY5Y! z^__P5qPx3_kB_lJ+`Z-P2U+MDFT9C1k4wYMelP7We}Ajg+6=*OEYc zyoyf3u`w|~00{p=#tv)SPD@YHo@{`2(c${w8v#vjrey08TR7CfXH4^;asdNO?k>)h zUR*9Ggl~XyFh1h#SR^TYLRRG^*3*ng3|XT^Vd@ZR1A#UKEaPs6YyFR$!(2% zojGgJI0J}m1&j8@$A_R5DTm()7Z*YDcM?d#d+fKb23XCgpZ@hjPVlM!Yh>(4eXV>#EAZP?^+x{7NVfSZ+yQwRDq=897>__4?RQO%A zv0$5U=Fw_@StnuF(37gnVA` zEiQcr12Av`{LY&4^7rRE%T%%<#QcA!XfUts^5L}})FV0^6QGUJz9YsgnQTqp2y=}> z@mGKy9)cQF#nKY79%x4>Wrz#_>T59gTWabJVBiE4DViKN-)HqIfW7*ktJ5OJ0vB?& z|H`#T0;tMg1n)3v(VaY*+(-xR+q1JeI_YzB{NFS()Z2%6`=io1$>=E zf*Iv&yW?1NudlA|Jh;G-?jgzoC!)c5SZd~Htv|`#=Rl4t!s-0D#5+V2Xtx4(r1i$H z&%i7S$eq8T4+`=BGau>acf*5?r*#mr;D>QLbOhxjroJsY!&*B2^{u^nXBs$8#n39y zT4HOsHW7V_{AaDa^?)R`zz21d#O;k+Y=5d`=Aj_TlJ$Lt)e2_Av$BN2 z)dgZzE4#bH4G^ZMiUo?&va%(f>cT(~CX#GVrAlWfUr(KYRv zFMwU(=NA<8_D8|H+^j6hcNeQ0`5J7GO6;h9f7UU|L16sd^LM~ajy99=?={nhL;X9i z`hVdHu)zzRmy$`?^Oe2%{UP$u;jw>TKcJ5CU*_d9i{YmF`VQykc>fu#wGL#3L)RRA zQnDe7(HR>zR0H23E=LNUeb%wCxhj~;jc!{$cRW9EL@@{4voy^mcKi}fPY3e5g96xISks2SL$GL;K$2J2zhjYMdx7oaXZHZE1 zAcb4~??Weni+zvzeX~w8g#NYfc7kCK_VBq`v;_jAMtWvi+VCh<=&;+t(z#D?!dqeC zWIij?seL)8!b1*=;oe!kuE?&?juc;1BDuWx*Z^^Z^SI5;?FK?Q)jK?D4NefC)5y_w z*X1i%D78zp7Y=xq_|j|*%-n%zu%pBWjX0bbfKel~jf|D061b7R_*uz57bw|v!>*Ddq>$j@lybIjeyGo*m0F*TpZrb-AQ_i|jN zmXT2vuu#z?Nd;mVA%p@eu&SBz5+IM}dU>I+jgGkA<-)g2`scG?CUR{hU-*79v1PRVenVU&AD4FE*Xz?oQ z6SnD8XOO8vNZj^+X=uG_&ByKoBwUt(l>gk+d@c`5M1M_|g}@CQBW>GmcLJK?*D95! z*VmUdv_>J(E-)c_!A5&g^uSi?57tNGsW#O(gYH*^dl86>jzJA^!g0Q zF7u^+T2te(T02rUlnq^}napB~nw-hYI#KgLEz0t$RT!FdP?kw>SQN=Zq5{Fs}PlJd$3+2hflq22dsT<}`y6uN)sar46J z|9NQc{g)BmA8cd#zbR7S3EL#OV{qLa|2-ir2uaqYWqeFbB@)pEpk?x-+SMC)w(QPVh|=%PW^Dm) zd%1G0Z*N>1Ee~|S%9n_uXLsy=Y++#$1^VSUd)>3eN_AL7Bm(Z+b2&`Tt)D;@`$QCY z8}ixDIzCNb2l71u-n4gfiFZdpATay6`%n?l&o_jR2xin<6}LsT0cYYPCuhy|qZ5nS zQthcyZ6ID==bp@honpjSQ$(i>)9$cp#O+cE|Vt zt`s>ksqU~9qhS1T*(5Hji?JRu;eaSwh2D`7G9XhAL|i`XR_F-x{*#ZP|DP!YA#A0G z+#VQA-;UePr=o9cA^_G%rVvInAFM0+xtNh^hso@I7ve zlY3uapA7V6^SA$qT7c!2XrQL~{D6SIP$V1DQU>3qz8P6Y93bl(V)D4767;EsL|dBO zwk8X5_KS*&c0l*q7Zne>v!f0iB@YfD%&qh8-`czvTHI1!>ciHg6Ti#GF}n;BzU?HK zD8c#A5%`R;lcH~sQc%ciYRaZDgM^|n2j_7wJ}xdbDlQh5 z=Wy?Ze~#?MI-&Y_;F{mx)bD*H2orC^AGY%F@Z8sT{F^y}L9wS1UU_*v0Jp}w#`=8| zLWv$n%nOPPsXnu<-U}il9`_bE$VG@$>>~PHi zf_yi?=s`oH-ce)Q{oqO&?4fsiL8VobFUDS=H?M=~F$@-Dvj4wPKf8tx#)I-Azj*xR zfI_IFQsvtA4Ejjk#{uDIaL8R`@W2V{&5zqNbyWMd*v zugnuL*OJ(@x9eDQ!kT11S-JI>(DW1LvkV7N>NJ30p%tvZr z!6cCVEYxcH3w9xcx|^mEghEE zc0hGrq+AeEU44Rq6APx*IW2~f=L#mxJ3ay4mdRwZ?#GXQZVMVf=w-gz#$t0sp9Kjl zsGo0Z%;z0%X5)=m4Ya9Ok%UEs8yXs#9M4_BAbY1|R06*Z4*~$v8+SQh;%SLDX`v!$1hqYKU4>=wH#o#l%VAx&xF2IJxS#D4V;c3m&ypW(2f3(r>n7{E zmi6i0Ty&~j{7e0ayKDFuu0*YAQ2R%iGHW(jzf7^Wr_tZcWiuRvD!<_pgX<}jG*D(N zWmLB-M)S8=*^Uhl6LC8i0-Wiar#EQ9(ut)i+QB-?_%G2{%LW4{KfAf4@VSqDmD7Fl z5{1QD0r*-e0_ zPRG;;Vfdo&E;N~ReQWQk&}Wt7P6Kjs!!xDY8P;pP`sOLR>mfym6_U}kZW|lo=Lsez zMtvTQ?$^duPRlJ@x9zMT3(Cq~FU*o$h+&h>fS; zfTq}dqdS^64r3AlkE?u^gu;&|gSi)9zVg)910Gzx)wPO$M3%W)!*rpOWM%`V!R7h6 z|A)%KL>vZT(bVQ^GgAuLMcNPc>)<_a(<(-!%E2l+N891&z#dGaSjZ(3xN!A(H~Vl{;56!V@;-ll4YK^D zgm=oXvEU3@S-v#@4+TdIG?W1&txxaX`4Nm%`_=E5n(0x3-3utDt#MoXkqp>;xBuen z%cQ|28=;7X9C3Vg60BQ8T*hsq{AJ;*_VUk)Y&1f?qovM6FJDyAo_YQTz|W?2=XHXj z0w)mW0rM9z&jH-+y-*ebdL|ST1HR7{ohrdBF{N3WR0(=vS#K?Qnml9?pHAU^!$Evj;fyU>Tt<%B`a`WSLi z8Sk4;7ad_lD?o)VczjJ(5pYV#ZR37>BCU7^yj?&E<~K(-S(wW11_c?v4?0Pn^&6c8 z`Fk%5xM9ye ziF$z*;m9yhy^E-%)O6>BK+1euKf!&Oeeoh2C^0xXInUSGY!y^IvF`L-kyzVwL_&Hl zn4wo8yt2C(l2r7Z|1ylu!F+XC$DhJ1Es4+V^`9zA!eOc5ky6m-PIH!v;DRBLW&ti~ zvFuRs)esW-FJQM;eHLJcUi%Lm32q;x(|09`}P4k!-~g5cYi-2 zjdZ343N~ZV%06fddwF@u5(}PuKd|$UDC7JQLoa9ivzI-Qv#7=HP(B)SUG6rZW=*UXP|TN_BG>won=VRvi2Md^Lb_!HHadTlepXQT`eL~ky{nHdvuvn$+ z>9?IeoFRvuDaGnSGZ^F3hqzv656Xc%wcjbh-h3SqY15xAKgynB=)+gcWd_x3E`O+Xj{)16dPU7k*N#S>hgM_hc|!8mrv zb_J-cyH6EMj3?8L+TVBw`gzYeAH6{h0+R5`l!^XEvF2skhSvzenR{s7UtTLj8%CK{ z`&}z3D?fKWu9!$RNM)&Z65&9*_$)Sl%Q714(RZrTxoOi(u&Fe6=pdNa#{c zS{f-negbmO5P(aRk;?Nx4hCEJ{>rxUqGT)G%hMBt*)Izqj#9LCz{A5ob`K;OO6I|44eQsRMHrSSi0B2@mp-3ht1k8r=4 zWtP4uz896D`D1c&$lPF}UjGRztBr$04QNHimeVj?DncN#PJFP>F>j9O#6EmAwl33o zlfF>v4s+q4gJ8FBm5bpy}$qm#q#Y)#) zY+;qquI}!d>byAwJKlAW)F2D9<`<-|VFQk#dC+U5@cMq|$-)2Qht1-dn`Qdr{ zv2ViHnB_^E=qI~?pfBPhvJ{ycne%dZSU_O@#YmU(^@N}@b^jmPEjik#qr3f7P5rhk*z5-Jy^8-+)Dh7=%=1q9NvsUE z=de{t;I8StatLb3jg2^9)`@g`KfwbS?*iW|W21j}@Bmci^aa0DjAeW{%}x^H93)^b z;Bv6!J=FxPW@lj7chdiWs{oW~qa2-`&3~4&r+m|Fc4i0K!lcSX0@iv9H*Rf$SorwU z6^13BKEZigpX2?_G_wK0#RR)Dm~Mc8KJ$D72f*kCkl|vzo(KTRCv#biEDHICITNuP z9|5<%7w&Ez!xIg`nw~AF#!}1)9;T zxlu$swul+R77Y%2BEA(BtjL1yS7Qybnom!5CilQ-2leX?7vL~LDH&tGH4muW4yVO; zz8<)Ec+oVf-v`F;l%l)6(`x|wpw?mqPlUs$VLDun{hj#_$Z$^M^W}@y3h>r_$4v@= z=ODeliK1@ijJ2gHEFIwC5f}fl4Xor2EGdUpxJN;RhmRr?S#-0XH<>#DX=hw+4WOO+ zT{POpvHg4SXtpd)msfyx|IN)!zTvOM_FQHSfG$Ad3z_&6YyJy`rUq|e`BZu?7D z&8@z{<@rVetKkV?_zQZR2UU_HQ_04ATAJ*o%tp3XX z{NbtqbTTpF1muSk*-bbeJrY-O=?){c$EF1x3cJB=Wk7Z+Q7R)t-kWb~Fdm007O4W6 z;(;VmBpf+$pt(B#|A$BXOanmfA>@NTJ~>IiX8E-j38;8A)Yb8OoVdbIAqXnw58sk0`H5W$4ZxJ=p%)Q~)eB`(jJ>4~~Tw zt4!|PkgM$npxAUVdxDm~MzSPn*GtW~XMi27kFPIE1S`rUeNiEpfyuPy7H~bYT>g$` zHdBemVoh=1=p2voZ|t>7uyP|6X}Jj2W%@Ef`!O&SfDs>l+Gu@UnIHbt`brfg5TMRT zBP$ebzrdEV9{on***ArD1T>ld0Y9-)XdP+OnJP`Q3eLALng(?Y)+KP0piwSg8BncJ zsr)#fZD$hIpTb`NRLwUWFHhzsEf##xi1Lez1&mkxknOQC!vW8me8I%nI06v5tWa?k z)*01t`ctXUQ)b%k@5Mcv53e>G%hmQp-=WM%X74N3q0|%L)t(|j17;q2q zD<$As`_M-?eP(h}Hc6-1)hQfFw5uDF92q3qlhe+t`3jmzNdedl`OF!A!sQ5~G%5GL zy(n~K zJTK(RFNMFU@ds&veX$z%LbFRKx?USqQ0k{CCHfM@s)Sx{R52)77^7k#?)OILafzts zRIcZ}*atH|D-2?oG&Lq(@$)wUeQ4n?qJN>#O|hhVrHY?n-KPkt8suydu0f8sk4fZk z4_+U`rvqw)*T;Pj>j9x&x!JXIs!aEtBzv=md&~}*GK7N3cPkk-J8^O0QM+51gS!AsjGq@wG0gJ>8lSa9+CGQwj^)`z(<&ItmlRvS0pz$|a^QVBN@^6L_I--0 z0%T&_8AU~Av4hD89A>n1m=?Qk7e_SjYjaPUE>DAlDHo4`lgz&R-Y(IDVj*Aj50mdW zSy`V%tudF^0$JmY>7oW{nncj?#3dkDE&xuGzbF&GIL=f{z*qx*FAVCPfIVU@7KCRF zog19R0>CPHs#@LUizT!yM8Me;mZL{ ztzXPqQ~Q`76TI46fiabz8xV`#f^L#F3t!8oM5rkiS)-$juvr5N32-0&S*iSilx4;6 zslgslop_AladCu%WZa(wz|TQ2bV%k|r}G=ymVl2~r}@Fb5iui8r%?Rb$f75L4p?-_$evm$oWt8+LRcNZ|&qi_gbRf2#r&0w4 z&f~xeTtP+*^tONjPqY7%7u_vCDqICmPOhzp(*Q9oj+9Z*9Vkqrd$;?d38jifL-OT~ zzP7`af%3Xu5Qt|h9bh4zVV(wf_u44YTg>HS&zp=F(omr0gOCHB@hY2jnYU*a^Uc5@ zfh6L)-=0bm1h1YvaroCqkFl`wOG>D&LVA%XKezR(HR}iiGdRo`a=e*5n^^F8 zpb~C8clZ88BCb`I^0L>)ar$WU+v{&A&-!t&WH~aHHpABMn%ScN=Glm!9vYz%4l&ba zEO?;Di$C)HJXx$MivM$Fh9ErUOlo=-?kGJj%(*l-05LXOLVmURnJN#H9h?{NT&dhghfJ^Y$>McadpPx zuse&~a~{?HS8?`z+R-z(4?tr4pI+9A6XGA-6KH*O{VPj5(E3gzU!o_33JipRgL+*1 z>z{7=f2WVgO|1U{7y|NJ#boOa=_O6vQH;;;8=M z%SMo-dzJtlbQJb*rgjf%EJYwWV9X3k=B*AGHjtMe1A0Mp3e>tE((h)f+TRGtok7R@ zByoniSkL^IMbSz4o>LS&v@vXPyiq$7ZEJ5=Ww$7|*kc4ZXf(f;y>@mdtIxmZiiN@{ zq1poc?53r~wfYSA`hc`ei}WFVlHepjiiiwlQo*?8Nm-=fkb12%X!L_FO8Wl!C>5w~ zab8C3Ewlihk7*}9LE=kVm)7kzsVBd$kRP=+=&&K$V(uDG*u0tz^y9SEv$7Qv==JV^ zg=H107T{xr06f-IzUAcewM!@L&$v1mov)Yf%kBbWOeo>?gnU1m0Z1%OFxg;th#>Lf z^C?g)C{%68w_HpQj4ftkWgUvAgEU_~Y~arPjJ0FsnV|yS^8L_-ZY!%W+LS_(QgFm9ctw!>+^ETKVq-;|)puapI8(dr%7+kw%^GO@9vr-eu5NhtTTV? z1{Ej?zw0O1=I9GjvbkD)fD`_i@D6P|-kQiQDA25RZBjkeKqLY_Q;?E5KbZK3>?)Im zvRALEDa4opnr$u(cIuCfC-Udgba6l@n}E||D2iq@&Fiwp{3nLR&^+ad!Tdma;=D$fX(=&>&7b#2Zsld*Ow>siiI6O^ED{AB8khLjamsyawv|Y zPOT2+8 z5j-M)7W9h)c7@NfKrr)&2ioaQr-2xpRBGV%NEzehA4t{_;JE-ie56`0rMx1HiAMI7 zL8Gw)^fpQ~n>?R0w=R&pRsmi38GEArwofrJijG6kbPmA%utRQVuEON-JDST0QEx1h zpg;o1obd5h%c@0AfeWz@8i_un46EKZl(5Nt2YPb?KfJTGH45NsndAf62;Qdu5t+8F zF`lay8JOP4UHG~Px>5verffEYSMN5HzrWArtX!`p2>nBf84V!CYR@*FB?j4A4b8h@T4dafl8c?(5%bH5%@-Qw z8f4Vp-fX0>8{R7)UCM=yTlgWQXIMoVSP&9DG=feI4ar_j@K|VA`79?rl)?L|yRjb* z`e0jzdygmod2AZk6k>Wcp@dG_(nnps)97VGs&5it~WC5R;d%zH2N76Dr zA0UR0i1&jBxc1FLShrYXVtisC$?)PaGsdOoPi@f&zecmP8+%56Z}#!*E_51%__4fT^4f=9j(l^>;aIy?5wQuN~1#)NXf>=#&b?O4(L)efz@~^Aj|-R zPUERuaW#Ie?>YfG4!;KqdDmKc1*oLsLt@{gB_)*>kam%bgC1I|NDfJt?RY%ZS!0;_V$k%z&^7#T}Ys@Sp&0C z5+b>b{-~JcWJdHaj25>yKZu3(em6~`M6r%osz|0)%x?tC?QH}i*JP2ha+U;pS*r24 zvHkW~78oqn6+v%zG&Q3m{|UuC8gYVi>0MM1`;`dMOZ4Id!hEV z3MuI~>Jo*VdBFF3*UobcMQH)bS>s^8y|T1=UCQsYR4Y9)W6KKarR(uNoLoyMUS5h; zFlva6`?&Puw^^i-nb0Tbhfk!1rW&=c69S?OI@lw_A89n(vKUOpGNp!xe79|JyR5go zQ9HP&`{&B$CH>(f(1=+e6f^Z8bqNqkUf6EbB9xVv7c18B@i-qr0e@ZHwm-QA*i_PD zn*nu(`r{3SoRAfRB|v5i!eb}2!bk3sO^RShL_&5s-Dz>%B*Tf_0|qo$nUk!s42E=l zPGtAr<|-FBuNH9b9s$KzD;zTMC|z11-_R%pIOPe@E3GmgwguRYkWUCMuldq*Uw426 z*4e1iD^<#;RU3OIObutLVvuTp?f^c!4x-BE-9h#GXeLb{B&z!}fE^@KS67=E?XBM) zVQjZU;*iPq8Iz~e8r-@DLG#hSM7hPOH`9tPhC##yhe3h5nh$i{y$~>j{CnerDsVxQ8!Fhk2>f&q=PrNpx}IM-fp#S*zF5N7dj1&c zy=SdT{j5#f^4Q`U+XGen?AVgtHn;Hx&iy@1aZhP5gGRs~cRumvFG^3i0A`hk|1 z0l;zmaS(1pn;Osy$aZeI1fEm-eSZF;TB)IWYOZO`XKoG|7>1VF>pD10>ZTVL2UFko zd@Xt1oMZ(OV#0S0PVS+*jhZ-==@aLrnb%cixLG3AV-nBv>K~eUO>iIXj=_r2&m1?Wr$gaLEr#Y2z z#iF0j*|mjF5$J^>oE+19)YQ~~Aal_Pm{bPA1hyMfS>G^%qlU8yoHOi#t3H%prt*o@S@}svs6pVT+?U{JjJEnxGFw~Ak(4GA z6q>J{T`$*yr30S6Xt6q*$%TUle|m;YDFcUqiuvgt_`=ou%#7go3%+>#`x|fxTH$R0 zsHk_}J3A%6zJK>0w$E_CzwzV2edfEbUp+x=z55qV`V8T|CCE{1k8rMXO<%og9WQ`H zzqJFNn}ULZ!UTZkGT-Qwarc|8Es~A*&gQo5VK@iB%Ik509-p3=l2V*)uiT0flIg0|<;jn<_Nce)_OoZemyP9U?f2$wc4yDYeKC>+>|jTmtmV|n)=#-((pi?NqyUtwaMQQD&>{%P zv_Md6uE~ZMcp3}&UZ3-OjxGA4k)%+CegHeh@2j-%eDt1@XK}~eik*uJPjpnrWxe4& zqYg&=w>m-*2_c01Ky1B`!)&HUr%$m6(9u9Jjn4a!)3XHViunp9;jEC|kYt|A%gcg9 zdbL_H1g=}x!RV9Wj4ph3b245M7V9YdMSv0y zH@RTM*V&%zj;@0~X0M?iuQ(|cWkbZ^GX|C3#qS|RIUBnjyW(GH^JjQ6Bl(+ncYs;9hKO&~AKl$8 z+&6oP-inFASm1F%jMNn2E?AwMG|nQTdb~NBW1IKBNVO(~OS_T2c^@_ncr3M6%hQ!c z44=(5N*9}4j;EVU?nq}8oOq>1qie!}IDMb$Yz#=aUG?7PdD`H3n1e}Ey?^@hz zcKJ2V&sGK!IYHqbu#2FT2R8{!?M05EU^z_GSD66ewW{GcH_%g}lEM`o`u!Wb&1Ld=BSkZnNGK?D8tJuql6LE0tD}=^ti|dISnXS}nVn)`P_6U} z2yj1!j)RM&SfTPtNGt$d%a;DUgTuawr-Er=O^>oK|#tk z@}X4go5^JHLxhJtS`Y}1aBTZ3HRv0;U7h)7Wo3E1YTX#l(33bnTm?5^3Y-8sR?O-I zivp5*C@6t|<6FO39g+N2#J$h}4D3>XcE^Zie?;f}yoMX2Lx0?GxoV_nSyff^+a`;> z6wpA$VN~NXnV<);p&7Im)(_XOFHYDwIZ4_Oh2s%9}tsGg%5 z?d**E=r#IBz5tCY^?bjJDu9^n05#ib#f(Cr{$x6vndjagC}=*)@4i&qq0(b*6-suw zIhz+bJ($8j)8ukGb}B45y!j)oNl!+Z4=8g1CBSATC9#$?=TW=0{`hfWqRwb7WyFRuM;Zfmm+= zGEIw?rz_b3OxTm670TauBj+hkc8*IMS3}XWtW!A5R5Ic-&&gxD_UXt5@UgbfaDUpD^6wQvG$Z-W=U>guvh(6FnL%MjtMw*}*wijg_G2BNY<>n}wD3M5P)9QTHiHoZOi9*j@IZ$CyG zKaL^DCV%R*y@B~8lGV;>nV1r^L|`u z3-H7IT1^6MKU0A>A;0~0E?fR&ZXQVt*q(qE!uR0SyEV1X&U%1V7+QDwEj4<6<=7d& zSm8FPx?I+TiIkawq9a$3k55ftXM05K6~NJxr9s*zLEcXjlsm zMMpv;m$p{vAY*M+X|wYc(b-MGvlx;U!*wK-k$O5<_ae4rREX;slN_1 z1j;#f<@D}@NXqSg<@oO1k03l&@Nwh#>Z;`PWeEkdZwBJ|B_#$%#B?nUx$Z8e>l6AV zRZ{PT$NHb;y+9BpwSt@)6w*Ow(xgKyW^=;>15Lbq1aTFZ3KRH8_IKHGC|as(DpqGE;54IRYgHUZvn(_JCo{+(2wP z#Ux$}cMwQ25r0;h#2TigL{Mb4C=MhrGJ2t6%+=e`<#nBG&J4LN`(Tp$IBbuJlj%&* zD}(3RjLoTvf-WCQeZb1yb8~&MIv9Nk9WMayh(WD3%o*iqUt8!B0~hcuGVATOrnbxx zW#eD2=10@1%^}Dp3aA%<_dGxRkRwyHvD*-%EFLw!AW8%|HJ{6tNnAUgEhyMc({HL3 z#T?C%-WtuZ0OC2Bb49A0NITY^lCd{Dck@gcqJ3$i!T9mtC%`o>HyGdn)}_tY7k%Ee z^0_}oG-JhbfwWv?E7D_4%PU`GP)~8}nC$ZK8;ablJFxZ>7QT_2}K1dZnsCs7$5fYK`p7>}}2XNb$h30e4>J4^g zBei7_zphrrGvirVTZAq*s=t7A0M4!h@}c7!yM+0Ihev&RPHkKPbK1w z_i$79fCue+_GpT|y**&Gde9m83>sLLYI`}D%&1;(&>#2BZCRv!>Q4~VL zV{L3~Y*Z|fEmQA>>w7kk0w{p-7%9cU7P$vn;I-j2N$)dbk=(-t|80eItKFRs?iKt$ zNqs3I^0J}=1y8fm-4FK1NptUh{y$U!^a9*uOKa@smGo*-zhC25BDMuw%q&5pv44X5 zaYW6I>1cHz?3V5YZ7;oe#1P5t%^Evh7rponQPf+qCyq9oYWV9f4Ps(?Z^br7sYqps zr(@_NJ6?DX=Wk$;%qQ{cL(&3t3{K7uQ7?9?vy$D)kMNcW9v|!$fw>S(+ts^s{xUJR zc((Ctyrp?(VVwFpAZ%PxKN_}h^lf3U^CH@#Qq$$=qr-RZ1#f7Urm0eqeY1c)_5NVd zgOmM_7hhUcIiotB5IwVRfOK_#eYNUAu`xeKCvAL@%8iMQh2>y26}awzaDsT~ejt44 zTCJziS~vOvB7W5L^B@*QA!!H*58T!uo*r|n_lw_B-7@~!N^qiG`bSj$HhJ3$frl!8KoKAI^#|1srjn_;vO6FXh zRG9Vtp7Rt>Y!9n-dQVl4%}V}R>SaKkle}eV1TL{Ok%^HBddBk4}nYM0zsWGzLMU%|uoMCo2HSowbR>eWyGK`S_X!D8P&T@QYN{N!G z?b|)G-B3emXO~q^wMffU2&Tn-cbhG8moPNVouJ^1@V$BUd0HJkNT{NUUI8sN+fr@5Z*R~t^B>s zSk5SwQJ!Yg_Td`^0vB|F#;>`|m6iNMVoaYoc4hp!!p=j+iGFpavkc|Sc(IDlw!P^Y zZ%lDxCg$M_t&-g3HA?1RAAMNyRNb5n-yoVYaWssjJpV^JdtP8vsU2hT7^%9g(#Ex% zxng`p=2fv)b#W6|9lb}obUBMp^rrTfeSP^)=_?(jC(zX?ky@^YD6fO&)f=oWrr>hY zbOE)9gFCe}R%0a9;Yjc2ddB8*yPF$@48i}!E4eJHy8g6=A#HG88Ou2Mrk98&mGZqO2^Mo+WNIq0579XiZ*D#3{_5Siy zc{im>i1VixA@vI$3C8BDClq|LKcV(5j2tpffo4;bU2ZmuK|LNv%zIOn^qm@Z!!Ke# zbdPqG-ELT1kuS7FGCdvST94dAAJe{D-}`7R%@3!UXY;ePj*B1{m+8mtOY;wtXUyb5 zu*h6&uzo~Jk}A6S>vf&_X|w=~`GSrP+>|H~zigG_rqP`(1-Cm7 zx92XX4c30Tpw%j66jBUv;tYvr@wm0Wc-d-nRx4>oD?y&;Hf?Qa-d#*#527N0S3 zLXu!)wZwqbfT|ep-jos4t9KL1=2&NxteYsa$6wrsBvGWA?id%FSG;wZ&+BB@IDKF>k5koK)9 z$L;eyg~xQNoJRCWZat>5Nx^g@aHV>7v z#WOhOHR_&wfTvFphw^K$;SG%qi8R4povC)hOKj^S;wUoBdy(xy!lEq#R!RXeRtwOp zGR1hx#QHcsQJJbrx-np)L0IvEnS^vzze+oryfVO5JuYWJ--;b?L_siiwF4KgVm8W|J_Vr^Q6ZoMBo_W;xo+jPeXLuleK6 zf8%4WPe3uDtq$>6uYidXDQP~CIipm{3ykTWYSgcvK1So+=~b+pu~I7kIVx=9PB1d$ z)TIqBOnf4adIN*g;H<|^u(Vr`?E(Aj5M-crv83_XpL0~UNbu~UTMqfQez3o7sRBJy zvgl$ZFSbe-gS8@*Gk{7m_BAv$3;k+!ZLyWNMkh5QI3y+yVZJ%f{vwrU%|Xv&n0+Rb zZ>wo;Zts`IW~F_9_Ph+C3m|u5JxUW|ud3+kwXmlw%=tZ`|&%WaG^Z{=9Q zKvCfsT;YVT?vhi$U6ujYEb}7eo??5EYyKwWP07WUXzDFWt5L7wzFPJ3?bX2U*3(nb z2629lm(=@ES+sc#0gGgIm;5&2aUQ){?GdB!X~p5DVjw2K;V(`D%eqvdafCXgj1Asg z4{XVilCJd>nkM)0sdMqdt{c8Cn77Q9&rj4Hbs_0v5Ow{71w_$D8jf{MRxQVIS8rUC0sguF=`It_AErZr>cb<+w`7e-y(?d>R35axe|p zs~UQ-9#1BFPx(lt=1p~kf;NKoRM^$1p6N+ng>V_pUs4DVcw{RtLr)~5>sy1oCsoOGb$re3TZ-u~Md+Zh> zh!#)hDth;CzN-d#KF&a2U+$ITyCS;g|0U(k-s_FfDXZ)|jj zX(6?z;%09}k>zB*7lufWw?u9Z-IJ3u##0_{I^webI(36?C7}nc=A0`&Yw_W zVN>SN`(CbywL9Sx@}JpMU++)LdRDs9Xid>9Jba7LBpV~3+cx9eTt@w$O2B_JRtt~+ zpdg@$re1yWOX>}~o`DgKhsWkiPELuIY~M|u+gWOv3k6#T=neO;!1eqy3S}9fW>bnstgt?M^xy%X6D-s5U`b-h>FUhN)>dkFwl2yekkeuz zTO$7DuEO!bfpp@;&0z`0-Px~r<8t97FPiN7$eYph6xt5XB+YCc92k{*X=LXC$nEUn zA{m;Rx)6X(_hhPL`D7nR;!)A z)bHyZw|7{`ygS9Gn7Cp%99ntio0k?k*_yJlL)z^=7Blq<5+z;;byA4}Zfik!0?o~! zqp$(MGS3$M{d$0HV*8cYY-`Z=tmTS2znESf!D~|Jb9Oq^B zxzSN-T3Sv~ewzWf8~eqUIv_1JK^33L^&z8d%(d*Y%G4{6x}24n*`1@UU1%O0#-?(a zLvJp8GlTR3JrIlcQHZRS&gma`0grJR2(>V7uiRZ*-rVFDF^3<3i%hk|aiC8>!ACrf zD|Z5jEhL^O>MNi!b=W8-C&dqv7UmtV$SZ%d2Y z2J!osvAiG%p_l%mVvA|M8yv46$wen>`lgH_>iyjI{_dtf=GfTlH*X-&5js40W@cpp z$-Ole)Cy7Aoco{=oA)IlCS=2n8n?}bMDbLnN-@t}7Db!E z3^PSUO`H&>DVVXmd{;_Xc$Z$(jXm$!-5n@_@!JmQ6j_=;@UB!KEpr^?U4_e7Y^i6U z(6x^KAoqto+7Y{DSG$9OYC{6Ana$@Iemqnf)8d3(xU@56$)A8*= zU500SsM4+RZYgFq!twMJv;zSRaMD2C&Lq3CNf@mQpj?S!ls=ES9i$Qu zf+a%Yx|3ypr+m!a<{0kk*p-_XF3_JKYQi7bF3TGJdFD)5`{xf=r#Ll>(SzyEJEVWe zaE0R+O6-lg;^~B4F!Olqqc6|#2h$Alk?jDmo6{y9L9K46tWt7a5<%=+aI2tkPYWz?C5FX zjeU?$8H4?%5qodjc_B_ClY>(@jT3FX?o?(@@=Z! z5W1vxko1B2(xougpdT;%E`UD9($(YXzB%5WPz`w!ATAflD160dyix zsrF-1`B|6B2oQqdz7C-ebR3F2 zO0TM0_ZQDY7soP>X+x+nQ4nY0ci*q4KP!Kt<$1F7;XW5Igye>P=jjZstUy?-$TMna z)zAH4Sa*hti;F;U!|uM>XcA%u1(qol8Zaj0s1=xk0cUh!yQ5aR)WOSxw;(KFVs$z+ zWo7$e3S?$PL`1yKu3$^>IYZfDy9I@TOid#OJLoI+$Vu>#SZz%W+S+=p;V#<()4pDH zgzrm@B38#qFccqh1*(gQN%)-&x6a&vm1G&Z72?0eiZs7D!Z z{j%qZXS_RN)DV zH#SzFhJ)Ouz4hS`ijLWOm0D2l`o{`oe?0fsKxydLju?L1^H61Mi!FsfuT0gv(Y!=y zrs%flyXA@rRd{D-XPd5kNkFjQ6rIISEro2>sv7_mMw1SXF7A8A+)bIkN|~WHW*mKt>fYQW|*Q^zm8R?z1Jd8ogK&eUB zFQr6Sju@X6fbz^^0RAW7f51(bfvWU%ODRME-tX&u`?j|xjY|j=z@|GA-K!5yFumG1 zQo*fezAY_XKy`PA*qR);Z`2Q=;y5*V(z+F5_;lZTfv}j~m5w}6b;9-c$%bQfp&;<( z#b9S^yMBq?((rxC$oo*%lARN+kAep@Sc3Q=Nk-Y3u7*_3?iAnO->*JgD2G%qDta7d z7Ns0C{{xq>TYv6<#p3?nUYTuGWv78NxpQKG7xGm8(N;Ik1jeFBVf6*@>qWr(Y&Y^? z=H~bL{-XKsc|TkTlwlfNrRswoJB1cJ{iAirU(Q|fo^_G14K+fXVfswGtHK(Yx$*Z8 z&*Fq!*t9ZB+}I#>Ch^yUlFr!vVk=hkw0@!a<5Rko)WnH#r-qZArzX`3PBJ(f*GufG z-^WkQu!mNY(*lM}MP-3TXD#}_eS7}=`3TO)rCb0xrW@6wtAkRoMB^%pgDvRG&I zEw)(MGG6|}lyGz+qAg08-!@)^yjkMG0|<&zOLSWYfFLy^=?VvHYMTl-0GAf{B;OoO zFhR=6*nI<2rPv|d#`W)oLL4A?LIU-cnJFB=nAOk{b-2we`&rj^^*B{&HSrt%+*9|E z1m#2}@C+@NOz_5mwRv;ChtSj{d!|GAqi%)y$I68`5j35rcUu$MbIIqey@Zs@-_B1wih9+F6n{!_Ewr)2o! zX!#hPy-#vfvNV5Qr)$e|beA3`1g((~ALYNoC;vQGj%1L1<`?x^-SiIq{1h0URmvQx zhY#5gHHc)2Q_ED4_ssPA__QOllIM!YkxuP@eTXF16iu^T;Nh&PTPP^1e|bV>n>&VY zsz=*pf%Vo^&OM3tXNk|BzX;p`JkezeM{21}o&Wx`0+Xa-bYAL%R)zp|^IN9)0eF=X z3cBL=8;Tdjl9s6)q=RaG1-+z~tR3+WF61n!%#Q#f^y2av`i^}q9{rGov zf1F|vahSn})AV<9_u(+xKFvMnX$7|hwU55PD&5O0?##br2hL^pB0IvLW6#eC@9Di9 zANjEwdZ2WXZ=7MN*rdVhW;FjEW};p$3Liv0;L`Z|oLQSb+q{lblK@VYP37BrY{mfe zpQiqsN;5?YJ2coA9n)aCIAO)NIN&J2bSG0UtI4wrSCG5qD3;QutG6^8{WDbBxaqyv z!rv~7;$`;D^cLT;p$yLBHM0jzAoWV!RL*Oqm|}g9J*WI$cH0cJd3Nap32(a03rF9s ztbHr$=P>!LJ4d?QP_n9hEX=WQ>)P}WY`ExnQ*hTJ=IPvbJC6R&G&u#0iS?TDoY|6N zmBL{hx}%*xkvuEYyg6k>=_PCPh87lic0bF$y^;}Ju-#Q0 z5yIHeE;P~BktGqJ+$NdyW2~+6CmBkw+%-jMKU%qnOTFw#)(pks{(<@Enq)q^_mGYR z>H1#PJ$kCplV5jhy?or^3Rdw&S=WS4OKa;T;&5-_Ze^1oyVVZYL_=OO z9^5#Yarbev0F{7{P+!C5ItZicT+tEN;v_N@_BkRrO6@0T7uBoC#Y{dI>yoPH5cmd) zdcJmWL61@GDz^eB+3UKc&drY^<3sDAA&{s2Sa;3Qb*Xijx?SHIN8DkFiW^}WE{H~#`N?mcOteixUUTG>@22_5s@7olCp^nAI~0h52p z2|tCU_0F4L?eM9-i;j`M5&Nv1k=VY0W$L+Zjt)J|5`W)YO$kFCQj+W8dJX&m1X*lOh zD3iW?bPn61ybS~JtY>m<@0EB{^#kgi1~j7+{{y7FK=EqOF*i{moU@G8rbOk8a-em0 z>f1HdEY(RUzvBhGW-2Z{=}I>x(9e787UenaCNOKrniR=3e!>gd)|)rF&v-E*vNg(0 ze(p8;kWH#Pxv(IYRdm&s$~`O-%_8|i3<}IJI%W95)$ITeR|l-jr3QzKA^eN|NsaA#Eu|(bUUS3((>SBLG*R79F9+_x* z_vJnz;^KhIQb`MwHcEQCKi~6kJ;nvju&}r1A5;p-GNZ`LRqeaJkfSD4uG<7!QjA|R z?k5e3|MvCNgnB&eU%h&#iC7l^%jV1sdGW5ZEhY8kjsD7@Jk-XXt{1C? zadXHv>tLyBng$CGPrk8#4L+i81!>EGA-)F0yEbU?OVj!^gXnf!tsEsv`Jv-kvT^Ji zC^PUphOwbLA3=QL5t6HKMW0LgO zX|a1;fnjXcMOjt;Zu;Fo_j6(Q^Z3IM$ zP1A}ct3+1mTBB9=O)hv_n>f_G&eq#;EZDJOOt#jpzTsI`IMIBmJydwtu1Bva#k#km zzo(s$o8lb!TDb((e}2Px#noW9>Fo3&CmCUT{@GroJLP*Jj4WFa5}&P9R6&@1+Q>`U z9xs#+Ed$%*tIhlJ{ob^M-HuDz5pVD4XVukmKV7(Pr7q~Y5u%o#gt0<(#Hn__5Js^P zXUYcz3(So6${qUJ@;FAPpg*LqguN1%o(_?W%yx=2VA)2)Zf1g{jBIl-k>%8@8Yzv$ zIXTbrdo;J5m>CXXe*K0Tbm{QL8k1S^!@ry@lnG^?+)Q`m`pB&oMW19Idg?Z|aP*+V z+v(iTBPdk8%@&_Arf}(1WfNYEpjcQr*~2ggX%_o<<^Y6PH!PHO!Idk~P_&6XD{` zM3rW);AjQCoHq}8Q%V%$$}7}1FF1{?tgpv7A3dd|th`sYlGY>F1K~Bc z%7X+y?l)EG&NpM+DwiS*l7A^{CfJ~{9XnG}?Uj0bduauQ9N`>4S5g?(##FF!w;l1h z5p=u4lpIN7OtB=q%*At>InG^5V`fF>1aCSWx*e4RCyGUHD!VP#H$y)qeFc~55}x6Ll9p~r?U5zO+g{H>)xx(B>}5D1s%#!PUl!7@^Ls5(2r;>^wTxeS zvshbJT(Rtw0XNo^2$few093vxUiF7?)gsy1_GR2|(9Q+=$hK=}I2DCgBLk}-rEFsJ z8S$9u5ddHC&) zg;PXa)b$^{a;YequrZaXOLsw>puaUSylln|TIdLkl>i_Pitw zb62XJXF8`(U##c180a0>V$dfnUu3zVZ{D{?1=0rSlx;EmE(0aY%FGc8KZEAvk52U- zyKp-?T}JK_+B0u4t*T7EI2(U5>F;v$zx>Z3whOIGSCElh92%*1gKq1#gJoTLDpN#J zSAHFw;WO{I$u6sA>qz>_NAak6r!3d_1SF}v&c4W^0Kw{a2Btu5GEoPxTB;#r8HA`o z_qA9dOf)B`l9@_lEDi&IGfG2RjtB@-vf}p?+ypri z0&Bvknna+dF}EmO?Qa<`8PL$g7)l1rw0)}vxDEfVvNeuhks3DburK)u5m{OdmAid* z#WRS;$&8*%rJg1h;3~7#GK!DD4r3=v%PCL>P1^CLUi)qqKmf`KZO;8n#Z$7$_r0uz1v8A^6a%+KWSVQG zgNm((!fqQ$`J*9YVX(k#6TWb<%^=GOzOr&|&6SKW^i)ecX87|npMcAVDWLW!Z|aHI z43zvY0lq`0SLK1#KRg&~2*f}hg;008S{{zSIh%;m+2fEs*;!geIymRnRvLa&5OF~* zus3S>Mlx;Br8GKJ=^o;aMOAnW_I*oD{UYI;F8njk$SgEjp3hq2aBW&;-D{c$iv+!y z>&~6dy1Kho5u83}D0K2XqSl&+w2IBI?GpoILh9^SSvJY*0&o`nd{?i29=B%xAp14$ z{}iiFQ!UjrTQzs10brf}feQ+Y)ZgBc@r|soT$>tOH7gQaNMkFLeyclp%4Kl~J?6Vk zUYa1{3aL441hKPpd=)M^dgU(jXV09`$~E}dXr*0Z_mNdGVW@24niWymqN+f=*6s;o4N5S z8K$jMdhJ;IU*E6stM`Dwis)}`MGx(5llPvd6&aoxRsQ(Em3hOWe`1k9n!a1=x;ptu zGJxNv_Yr83l94;t8O2d=K;jD_lFUC$p`K%B*IVrA4)VcFcN$}c+s2Hb$JU?x{OS#y zn#Q+5OJ8A=G>DP_=nyOFxl;%>&5YeNZJffs+j`P+?S*rT168Y2Y-g|hnw=^)X*T76 zHePrFstCp@5>%IOVXs`|-@VXg1E^K%5&aE)5B_k3BE4u?j&y~|_vit{Z$3zXA{dibZ^ zGaq!e&y;21-3H3o%E8^rrd{0Pe~}f-yHFI)o35Ud{f9$T?eZ9FG@peb8huk~U^Obm z?W@x??RXzMakW|EHhG-ivxJ&@w@-H6t2(5Nz>ZPslNEtuT!W2O)E%{SRZB&l4CDJ> z?&C`wr);Ja;yT;reik4eL%fcbkg)TwROfV8HD*_3u>zCkbgr_JGQ=?y8X2sz67Mw* zA|g|?mwxWMs)k=;Gtw6r1cCLRzf)Xnd6|NW$M_Kq6|Zs0a>ITL4_3nO0&+y_Q_+e# zET4^`4G4TrVQWjvih!V~*NTQxdR^T7$v8mA(*i;wx_mwEe&FLVYrAy$vZ;+tJio0T zvlolv`~-3lWZblXX}ssa2w?H!cF?XkGCkibx6!KqgV%m=q7*nj7KgvQIC1LyyLiYu zPA@XKRthoM2S?L!4@pI8Fz8s_2J=x$fOuGr_-eJqWo|KByENt46xYAo#Zj~my8)4_ zKK^EYZ388Ytzyr6Bp;9NE8K9M_))G%2&CzT9>%o7ZcJ5!sB~3g!j3XoV1}qj-9NPe z+k4&Cnq57bb@4I}zhP&Tc--B@dNzsfqWdpSS@xS3 zLp3T(tN43PU{DgubER|kXMtbHa2jGs?8&cpe_*20RpYzbptmRFxp+5h%!4zf4@?_o zoAi>E!}i(eX*|}`)3ZHRaCdzAhl5Eod)fDl?oi?;F|6PI6`3nGIYjD>asw9Fq6D?C zQuPpO22<@ZhkK=wK|zbZY3LhqfGbCfnzg}mODg!yRI8GLYs7hF96=7F5goT=gN$Uq z8N9eM!2#XXVWpiNzy^HESYs~}4uw7^O%ZGbj#FIz9^}U%1YE#i`12ndm&wV?+*+ea z!NlO6^oW=g#8x@ko}kDx4*$u62M>xDd+k9Z28%&VEV}Lt1%!SMPfV;I?7OS0^B0L( zE2}z%br4t;Ar`MpSp@tp4Unsfy_Nko?AVHhS)^2zrUnrRw^-?uJ*hov)9*YFX=}z7 z78VYu{KK>#$*={8xUI>YX?8d#Dk=)zlMmixl*Bi~Bk|us(&5}azd2?izU_436tR{h zmGYL3`J-AIwL7DIk);}t`zZ_wP-I{ZpxpnSY9EEic9CkzvuomAzrGrw6ULl5f4(i6 zxj9xa@9#ShH4gDzHUml1pM1zHyVCDEw_Itggjh7?OL5}f@g4LnFSi?Pj}29vhVUaZ z2;8mWcyw=mdMK;E)8a=(yn7(6py77D2^d7eFWpSr>S0E%;jYuP7Hi|O9h50J)FKWb z_3JGC++~+Ohn6Hn=y@6;RsV!Wl~4&}pxfe*CuBqE-tyLiLqHc2_Z#Q-&zlM@(m6W;pd2F&MW+sf=?YYa>SHZJjny7f9)JlCf?2zTih4?h*uVY*N zV^dRLkJ^QjO#LRUt%r!HC~T5ZEb`P7)o=bEQghVNHJrqp_c&yp68|!ZeD0&C zhc5K=^t0Wz?-VT-2{?6vK2Fbb8_qG1x0iQRRg@9&<|Xm-_4RrAM}L1m2ldiqD-9Ca ze2Go@y$;Rg%a^ZQc@G{~US8frHN|+5K!1N=PEuAdPj=R(;pPGD2&f39duZ_V78M{v zZyVLO(|R{EM*N|h=v8F4zjF?E=5j2LYsit*;y?A{*p{cka9E=XG(XJq_^FH#fE$BR z{o6|WvE3ft^?AFMK1q{v1&wDjI~T^+wY;L$!L>QJh4>KxCUYCvo{Tw5qIq2>_p;y^saBW$L3Z4=;R1M&7)spY2g#DlhI>@ldC+?4~wgSKe#i zNRCE^yo)vdm=`1rLpEuxxX1U+xq;H==GnSQ`2~1k*w6;9DADDXw7v$P%wJ znzh7Q6r!qhdcB9AhV()g($JgQ-C#x)5)imS9Mun^38^I28=JOp%`Hk-i#gm1?PFBy zju&-HW&R45cm@%>@8+QkqHdS=s)qeTS)0Q-`g3dv*yad2F%KsHQr8#0=Q?-vG~^OqM8EgJD8`4{;x2q^GyIOi|2Dr9R_3SGVW0dU4_t{0r} zoT|M0*Va+&KbeLPm5o0|)nKxdsDi}Lc6 z4zi)W87f<+v8AP@t&IyNjb3}@*&aQJr-Yv?H=h*zfW}fn zn7IwgrlNd)rJl`Bk*`a%$N?F?TP+K>fZ5wiwP3oc|Cz&6J9 z6=9Eamdit1GJ8A|gMLC|D2rN_7N+JaLQG67Bv3-4cHv;7za-BHR5oj;fs(Nag4Ne= z!GaFP3Ac^P0_9g46yt9sm{l$es)O<>GfbzRFMH~njLl0TBlPao!GZRNNX~6FL(3RG z^l0|X_m7^X`6gIbDe9%tV9VqvbYNi-}OIvl9bY=rNXezf%&#f zJ-wKrF~r(*3C^nJ=z*c0iVAOL=hRZ+Fu^{3`uu6WzK!`9oT%GI$OHQTeXkA|*|l(L zYdaYkd{RVrcjLK+6bK9+8WJlFlm~9Ei@q@dT>leC(O6O3;WzO?EVU3}V@V0nEOh~!&zT2{4 zp1yHOX{qUVio$b2Rt_FJPSX?mU%KifU)L%(iMcFPgrp|@>5*Y@fBkL;an*Wv<%Ir1q7w&UrAD0NR(kWXHC&K=8imm@Fq{1Y6Lx1O){J-#FzOHT_8DYtHy_ zwv%LD31E5NdK)i*<<9R@1$Mw z5_VZIwmC3MBY;x4?L;G@L0Da>L*6Axxm|+V8H=W6`1|jXcYIk%`kG;JX0IJbmpiJb z1fMYog$&H{J$a=?dbG)34c?0*;atDRRu6pz*a0Iv9n=CHT*jmVXS%bDdZR!K4$2AY z^P1R~MZb@Us`lR0L;JmanHm_v48DU6n%f>FBa?t4>lWHQhKM9c#WZb?QYkc7BK7Ny z6mR(IL3=f=1OrR6hzJshgW-yRL+3A(W}`&}mtIB5I0N)20O-~~a^_ph+b9!T*zqHRVWU(LMuy$+8mXx} z+?x`IGY3yT)MH*}Un(_i?E`c%!$mVDra>%$GkCFY-Ab7u;tODx8}9pM!$LY)knj?NDxK{uU6_z#y|#mM--LnT2yi{v8AB9XSTmDXd+qm`tIw2|V23!=jn<=! zPRqFiZObV2HpJJ_pBxdYMIGVo134PS)|!-DTAU_m=Q>`(q&KQFqXAvEU{&)eFkL%63v25d`P7&`c8}BVLEE ze@~)b%7byVigoxFsQSMefxtwKLUVi2 zc9Q^T4`QUFrIiYzj#|mV1tW9yan8Ci#q-_Sn&{qyx(+4FYS2MLok72rqm|j-%FYKt zwef5WUw~(2ga_&0E=#?)jeO72?W}U=)%C(cEsGVk8B%ys@p1-)cA&+z53Y^t^C4r$ z6K;7vrZ^N{#3?9AfsI6DNp%8W5XJj_b$f?sZrIE27)6-vZuikv3SyEbhwmBUH z*l>^R$)$%(DF#k-ssLBN&Su|j6irpv@RZ|^KgN>n{9O1BJvXI}W%Z1$A=S>f&-&84 zobw``XRWtR%7So9p(|n&K5X^rNYS_5I{fqV>8<%8(OQzd!#P`01Ex1*M5J|?V{Oy> z6q}O3L|dio<_|IAYD}`Hz8`cV7XnHuhUW l;o-YX3IzP(6!AE7g2c2*cSy_P>^$+`A|w?aW_eIK{O{arffx4#kU0vEuGh+@ZL;6nA%bcXxMp!guw)_ulV#{(Ko3 zgCr!mY-OGEJmy>>-{iy*;c(%=z`zhCB}5d#z&-*GAtqrUfIk9+Qs7`<$Y7Epg32yw zr|BOB&}BalBwBs^@G-iw5?QeCyj%73ytDuO@6C#dk*N#J;=_ld-(trv8;Ix57i&Jy z5U3LuZ4YUw>FMdo>G=En6QiX$Y67(4$R7m%bN`6%8uqcj>e?=UG4vj5u?Lzc>Cp=V}x^ow!7gDan%>!(<)6xqdy7w&ob z%rN!zl2T?m> z6s_ALi&b>mToh9Hep5&UM?KiMrzbs@sIH0O{b#3k5x>Y@jahWypSoRvCQC@5mzf@R zlf!B(5HX`ClarL*Ob{WDTC5KO6DJ7&kW%dYag5*+KE;oVS82rCyb(vz8X0a*2rZ^g zTx<1wvs*||2?+_YF~^|d(m(e25j(BLM@kl7a(r3jsxl_qBgLG_GR}XH3FFby-s;<$ zHmigzASqa`RA%w}ExKxG1_|1NK($(3Wh`7cRMt@-f1>{gRG4t@*L;XMquXwUb#b(_ z*W>`&9mZ5`Y|;Yx>;*LKVW5Xcj0HwyXtnxhhyStGs<})(FiF+8yGaBapE~}}QNC&> zonevd?r*xgeQUjZdR#B_)0U?+{O(6FG5YLaN}j<&mi{i z>a91L_r=)~m(z(lu|h&lZoU1d=n?bY3lc&4Z{!a9kz>ox31Mb`JO}2BZ1NDLS4R4G1a4=7_0Y=Tj~LRi;Qe_esNP&%*n}_W;uXX z8_$G+g=J=?;kG&aE=;nsne{9GhMe7U=^nI}3S+%eUt`Jb^YdhUY($MAJu)mzbP(l7 zL8lG$1PjF{9#@wKHKEo3qlhjNir}M!3%-rW)0O?5o3X;UpB;kt#zw>T-hz6+2x%7) zQ)`8Yuk2TMId%EkgZ5SBB_@)i3$h^P%c%*aNACjn>Mn{)gMVxfBT(}gJQy6{9Bm8PD!P{=7RI`(hlU-j6w zEgTPLFeylJ(mZQ3&eHdj!VOC6Zdik9W36yNaSRxOe#OApRlR55lxLq;N|`Lj{&4^B zyZ79@^~?;5_x;o)C`DAPetNH>?%LzhF|iPGM=BXZO^zX&l1Z-6rZKJSXgtEFr{B)E zIpy)TD)x{_xl&v%(q^`3BhREmzi}bx-ZBCPzRwf*C2ALF1<><8U#!=&QBzk3%C2SK z$0C2>qj$Q9yt`Q2C@d~wx0tS0Qu8V9Ro}`c3JK}p^S0v78E-`!@qWagN3gdt0wl|4=To*YN5+8shrcfqO3g=ES5VQ=RPL zLED+xIo9t@Ln9+CEp1|bVp0hHb=t=yUy}C`?9ylE{QjL6AJwv=1}>cYCR_s<1J#qH z(S{%-U)et!RE_1c7)d?#D6SB;^F0Flkoe$(8fXc3{BUxB^x{;?pwnG>(HV`hm0glJ z2D+mG4^%B&b&p*5@-QXJ=X`9lI}w~E@UAp)KWDy(z-!T{uPDZ|z>sO%>QyDUgXzQz z)$00Yu#hm9vk-9V|3MVXWAgF}?)ut1VJwh&3j_fPNpcICisE;_-b|FgK$OO1H!}_^ zZ<^KGY#tP~Q$(d;EHCIxMJPV3W3J(ixm|SXf8%0d2L7ho6Lv zvIJbX-{a-^=SVZzC6AY>nqFs=ZS4N6n3R>zXw7F=hA0Q*IWcb+edgUp~(}?cg$R!yz+S z+*Qqc{{;%u(2YAL`=n}G;|8G=2NfpMwi`w${(g7wFRiO$q- zcADdFG;7blm&oN}$rE~dynh0(FV%&+Td6w`NL@xO*XFXHxT5BU_r-B+7tbV$FZrI$ z*Vyh5`0i{iKYI`wUt+feS7ISGJbYy2BOe|UW49rgyZO^dyF@r~y{d|-Byl`6GV+*x zQb%0P`XFIWg6LtxZ6sro0_noxjJ2|`o<7jn>(TRqMUS+Y*PT%zL$0AB*Te0W;I(V# zY|nn+$!=znb~@XB0_kF7t(DreCXWw7aYp9fiiu9`U%%9sCXfZEmlSStsTNPq%ZgeVv8XMKF=239 z@toOchQYnXFZV^3-C2)?o+H$ zeOreV>$Ke-B*0KnaWZ&- zH1BTXbatVlEUd5M-2?mLrR9my=iclQ;rD$_UpFT&(f|iC{=B43n|B9Sb$*f|r?7x_ zp*~QceZC|MbZxF>Cw0u7>2C)$jI=SJ%%~_SAtTDTU_JRvH9(G=$gb>D)v!Oy(6Av^ zS3#7-!TU$^ir(=9J3FZ&BfZU$Xx>h$>G$x@YEzpa{JLYdYa4IKBh3~ol3*2yrOL@K zPKRA>n%E%%y#6l{CpW-Ftv{KCw8CFAXnRJ&f@*|?r$D&IzW7Ck28jlPRActQ=a*V< z5d_A#oSVSh5Ll4VQ~Qy2KQx|Bx6Ng`{)cm7;&>s?mt`U`Mj2z zXw&Ke`hJZf!7%o(vJ=twJDR>7t+Ak5-RRs$g=5&IZ^3y&g1`<`@_>f^m?cf;G&r&F z$3Hu|)keuQSFu2d(3%`7^ax{s-EA(dGvRa8C)+o%vE*xib?jj@K0!h7gn2gFV#R*n z8DU?@cfu!UYY*YbYd-#050Ds`efQG}%YIpSWT=DZ9m2H3z1aLWHKCT$B5;9`!d%axJmn??LEmg+v^H(FHP`zadP~k*#(uq z#xtGbmLj%&AA`DQcfDkT@%!Tvkurrxfjl;~lT1!$FL*89!A2qZHTK@s}mweL|H!6bB4$Bv!~mkw@9Zp zeM9rbJTi~S(+x~aTw+$N>u&QdyAjyZ874&%TK#X=eKSF$_-OcdYXc=70mDWkYQbS) z>g`qyrt4R2#y8+Fk1Y-5Tx;z*>#fYnXo<44=Sn$8JQHOL!b|cy1`u=)F6v7;$8a5J zzcHD~SjVQaa-c>#pw9yrnA9rN6n;E!{YtIKHA^ia$}4IY*n<)y6@2cNBg9Ld?N)qN zonYIW<$HO@ZR)vrPMfBdQnW%`*-6Zt?qqWv331k8x14fX@+~@$!w>wa=8((7RZUwyw;=~S=GdhK$_&&rxCHEKzmAV}x5?HsweX~vd~cMd$EEL7Zm!f)htK8w!HR_U$^kB9lLjqgB()U!`OYxO%*f7KEWjH_c=#Z1jF)m1cD*Tl(36pg}}< zwAFjq56OKdBO{~F;I`d44lpx29`!9tD|1H|J}f7Ae7A)*9!Yonx+yKtT@{4FTHxh% zMz#nl7E$PXXosEP9}t4Vno*?8E^|51c8H};X-JxZeWno9Y zqwK+eoV8ZQi`N5C_28_!2y=bu(0d3?b?Tjhh^v$)k2#N-SC@9+3$S-fDCI;niZUz&_ayqp?FkzC+}lC^w2= z_36G&?}<2X#J}i9KO;T`{)4Ih%GLdtbVNacITy z*!HPAB+MjANDql%3ruCB$XplZ0tfBmiJbX@rJ=%H%7|);+MIv-{k>*anqeDpXlhWr zKiGMz5aWZR4GTUEi_iM`ip0tsjnyUQh6&Bc&*EYB(mdP#CyG>DL>!M-1rea9IlZOp zksjwkoiu4fI&F^SI-Fxud&hi~K6WfgE{ZfSX?W5I{sKM+`ax-2bE!XxRuXpkI>PQL znJ;-WUkSEgJ?r~ssQPf;7W4rc%3`C|7cE6GDAM6K&lSI_Y_|LMZNQ1zxNd_10fon& zquT{$cinoMs|uhYPgBOmB~y34NMmwrJv*uLU(JRmGum&IN6=u&ir<|~=X&>lcF5QM z{YFAD5Z-3$H(!?2Vt7sp2r+5wxY13AqNrcAKgaj}J45gCbyImk+>O9uTns$?e9^8- z{+0Ia%}$+p>l&uvm+{+>j0o`o#+RA%VJa#rACOny?aXNdPf<~kZ57k2$R2`(l$4Z2 z@WP|DgbO(ZS@uKPy87gLW%~6E<2z~|8z~2JjrKbS#rkABil?O;vsX# zx4)lZ4Ab^om3aT39Xs)dF=^n}m;-c1mZ-qDH$ z^)U%5U}zt@zO#9UHY_YWM`$7pjzawS52&KV9;E!`x+r1_I_Ri#{S8JQJi7I=Cat0p zVQDA#pII{?ViZnKZdaxA-D5)uwex=*OCATbD5vm)rc z5ho>P7=vwhkHdY%;Kwrh&i@cvH3n*@D@x&pCA(0Q5bRg}5$>P=gJ{)QP0ky!oWxNI z*2gVErY{&Doi-^-O8y^7TME*$QzZUBcqp}!o@ zmd_KEqg^X;wcW=_oC*U67y5|vQ>Pv8KihugKI8>XOfVV>3it|xxFI2>e2V4H^eWTsoL|sLoVEpbfvBDy$d(Q+;0P`9`Ih+%G z%wt@~?hntA`ai8Q@kaF0Cj`=6&Fs(*o-ems%po!m93B_r!EG&%nWJUA4*uhl(ORmU zZl{Y=xdWhgrN^}f>rC3+t;}C`{C2n4XqUgw6B1Nzq=#XB2U9EOU(Z&YN5^n68*3Q( zlBgze?bV-OqQPfOMtdKIF-AE585_Z;!ZM=9*{QeC;0Ptwj~VHYfkSF0ixS3JEe1f#*W(zM#wfGz2-2G7_tU) z8_W3GObLkesY#|KjUZ#ie(=W8&gZb4HwBI)llsqQUslX!3z>{Zv5Ukr`8-3xa!+fl zg5K3yz1|9xsYrNvdFj;#?+rX&cP0BmF~W|Hhp~0cygEE@q-15OlnM|MfA|LkxVpNk zRalMf@$&HUDk&=TD3`wqRW%mQzY{mT~ilSvJm$10d zGn`DXyR#j$9|%)%Ni8KJk-dZ%EHx&PPGH0Mi!BQuH3plYLTPGnro>Zp?oxsURCt2p z@vP(p<)?g;IT2pH%uo2-vYAXI6=&@=UOj>A*6VgnqVu6wo7uu1Op$m$JDe}tcXtit z9#vE4N)|ZyUAu?EXJ2*N?Ve7X?6u^!x30X#mg}_YulL7NnTn@UC0N38)c(HYUFDEM-;aZS4SZm!ygO&JaTwb%mYV7Uf z!Gvz1QbS~ZKG~{|prCXDJwCHxrRgs#?G~r1nw@J{i|J1l?#Y5lXzGxo8bUr$=Q9*5 zn%MKZ?VjARBr6R69I|VSb9a%AjQ72^qc>nCkcoEYuZ#@WguG4XN*hKJ+S?@zaT<2l&J{5SW zN?ve6LPA}<3NRwo%C$b8?A_yYZ*OmB?R`1>gwL~ibkwB3Q((Q(9#5xfd>lt5CMG5+ zDOst)=W_W?P%zu`#i=LolPJ$`?-JFrKnE&?91agX21GA`%|qp6&!X?favf zgP6cT)p^xuev&`(nf-6@aq)3sa7K4kDVSaDJhjyNAK3MvMzwmDx6Zjp2m5$z4fr}CN?WMpK_mRveZ32V2ROk_AY zrEew2q_w(@;jSv-dZm+m{QrG-VS<%`oJ9+w9PJ)hTIaeSNG-D-_9 z0~Gw?(coZ~Af&!L=o0jnP^KyRqaUUlm@EtA(wU7y%yY(A6!LuYNTkyaB|@S!V`pb~5fc;rS!kZcm@T^GV7hc6=az-X*k5llp)(aS z35Lv*+~#`b8oNDm^nz? zzlX`D^Vi+Uf_|m(W~ZRUK~XG)*?b|B-lo7H=xS$x1gf{j;s~{HzAp@On^weB>E>P7 z(e}!=5}_t-z14AKu@@WM3lzTUz4?VFdjIE)NjR>N_v_*mxAVCH`WGgqkQewb4n)qP zp3M1Pt|A9Qxh_{*_?)w(`^Y&rg?(%f#Q&(OLE2XYlLE571oNuQS8}Clk)(21^m^SX zH9{kV*=kxT?CHb9iz3g}3-mwiRL_?68oxNRhZ2{3nmWF9tXe~|D$@Vl8&q0tc0GA{ zxF8@PK+dl(n{M8@JDxvV%!Z`Uih$KzrF3_9b$zP(F@S*0LHUJ|k&7HEXxm_?SgpeA zXVAI-_uR=deS^k~}nQLD*ru5YeR?CzN3LrJM1Y}fb@T?%_pI^w=~Bfr-x$It2B ziA;V;v2lnn-@#}EiFCOAeN0Tu3f&H$?CN4sl|`fmt0mtNb>*V#`!UU6eR^v>J-y4F z0VD;&!Pdt{7g@S7PWx%YydHnpG)8kWskp@!XTn>I8egZw$#(Ub0-ME^sMTi67E{s& zt2N&`%;bO;{hq*w^mBHr*-CnOP3;;J z>D3kgShZaS!{A$5I-yg|E-cJUPj5fG32ok=Eq8&BbhM;$-}L_IvsfrEugJ~G*&k2# zqy3_!R<0weVlkD&X&}IpFBLD8q}bn2%XE~F)-dXor{~lE3-op{mWkB$dO4Llp3d!f zvaIrZFkkwZ-E{DcRpy+T+h%^2fr1Gur3=Y^9}8zxLsaLMSyFyq_a7MvirKhWjrNLb z<5Uy_z2fGD$Crh(N_4Vw4L@PGYHV&cGc^WVodof>nzcNTF$!0Uds_2%KZQvdVi{H&#Drl8AUwZQRYt0(9Q`h$(H_JZ+c zm)GN)9z+rr+i&9E^5f(3d%IG!hRXkC0ehQ_^eS)*@!?vE23_}I)@VP_?q^14Z$oPA zB}`#f$)wOtG6Dkwb$L7NT>S|7U%8x*Nsn1Pmuu-X>$O_E+GLKVD>sCS+C84^)}9ej zP*8qbu3li&bdHXObIQobX7i(=p*=~ows~H1x?ZEd6uoSW<+ruAN+;5ftu8Mw%Y2sB z3BV{Q`njx9T2{)@b*{TXgtcV1xBdM56Gf`!E*YZ}4C-t|t-N%jQcy`L_Q~Vzy3QiG zRy#cm3u{%d!di!GUiGLC%yAem5DKb7TbHFF!)sY*X`{70IW^G)M+9?pB=O;Of5>*M zX|!|VTr9#jZT|!NREObEOisusrpr_+>)i-)I{a7xZw(?6=hk@8)1K!}4sO!yzY@e7 z=>+EPr48Y`gBQ-pPXSJ$IHDw4Ha~}tj5BTC9wX7frNg0RJ*5-JS@CMZONB|NtNfZ9 z7X`{NkHo7|i??w#uKQe5THuWC3pg5gr^ze^APcA49f~M+tJM!Z8a;uCn@!FWRxk>D zGQVxSiYUu0G`pTD7$_F1RYnkqv4nLghkX6~WMn?zaxhXN59j4w3R$nWmT5M~nVC`7 zIz;D)Hu8XtMp5G2z`avVLm?jT?3|soc@B&Rz++}`*m~?0&&j5K_2E!fQaV{IVj*Pi z(4SB9~bv1jQkU5Ich{_W8#>ZuQ8=m!Ito_v4c^dhe{afu#l0zHP_+efwd-Nc7rK$~1GRP^pp$n_2k0R2a;TE#je1)vlR&s(23 z%#>=#zv80%78e&66%Ey&ac7x$cz6UN5=M5$RIysm<4N7che?O+kIjT>UDNViXYzYD zx45r1*)Q}LkQ-uzPtd59Emu39#8D}=&A3h|og-rr5+Y+i0)?mMV0=us60C^@bG+54 zGiR~l9n5fYcD5Fn#$2<@P;pg+m4p=(u11$?PU|GY!xHI<2o9%t-5;v)!(Gjm7V$XU z&>!$CViY6#-R51Z2d?v1$P%01On#SwKZ+C z0^k}|gB@`@4#!RCwpV64nk|S4a`JnI=9O!95Cod9$4pGlO?5?l`t&J*>{=?GnmEAy z;XEuNf)~*CsVyz>Dy(uGVc_u*vP~v4$XP!`!?=Dd*O|Wnvx!2k7*Gg^tlQ}%?RH~W z8MN-l!hWulx0$l^sp8)7+XioF5|7wcYva5#%l!*d>NzP_NRsJ9_C(xpU*R2|61hQ4 z-QfiSCkXgB7uUmpVh0&Xd|u9X9{JbN=rLm$3O5U z<0*3`4PUq;KC}7~_=Tc{$?ED(d~d{!#c|9Rqi4kl!=z7Pb$7bp^F%=)|5lJG9z|ee zYz(EMRAW3g98dH9hJHwkMM8S=o5;7UQa|r(wJ3J+#HqHn)`zDWM6P(j&tJrAe7>|ZN2?oup@SuUu)b@YfCn~|8x?OGB}b|wf3G8_*TIFC#Z-TdV{ zlqU{S1hJA=kN4_-hWD^>M$a*KqSRsjWg_xis^13Lg25sEWGdFtKlXFU%F0ePEcf^I z0kpEKnG%aNG z^WeC4IGsH&+U|(xnx^F%W-EV`ZM9KE&@{OkNbDI}qz2jA@6(p9jfHUhla!-G7@YRm z(#04uWJK$#ioLYltf%P@Ml@bN*$ggyF^x6GSBU za8aS%^646iZ6byY5olu7Pdi?OLInGg&R!$H#&`4(3~mpZ3V#5=#xLJ(t~lO8{7~!5 zNIrG_fd|xNjle(cOgo7ZJ~o?C(tC0Mic|6jMo97vj>JTZo`X>h&l$fZ_Qme{QMof3 zFm2xBvI21-A>WNCLebjV+uK_Zc2X$Q3RNdW5(*yP>y1fXQIVuE1?wwf)3@SV+J6ve z^u?eBbl`@Qh*L=gWim2=1JO~x%vqSt|F%_RB7z652!l>L^eo;`A@oJBY%kX7C9t%A$L=7j1VDfPlWju|fDlFUPWkx%Vua`( zgAo6TNB{?c4mbEJ{m;St{Qx@L|NUqme_*hrM9540GYu0NXTU#nP62(F(}>KK)rb=j z16P6U?|uc6i;J@`HUoli z#7=Q>4N2X}@y>#r}o8PIUp2&EsV+WKnpkouAW8ws*^5FFpJAmzq%ug!EE=+yf zg!@YR%N~6K`RTF4UHGF+m(eZA-jCEeIkhE7r^)~dimdTfMnFJM!n9B{e%JuS8TbEp zc%(&C(bZ5K=W5hNe+4zMxyV31CCzX%DF-9tTn3`;|8$^+#mhn(QZIb{|AO~*o#!$FmSSxk)6GPIbXV@ zsL1o_I$tiGOJ84KM`wMmMAP0iBhz-NCLHg|@XIe@;T{=TnMMdf+qdm?KE52!7Q8WS zdR=<)ili6Up|=xI3D17w?Vuciyeol>&bnlbp;Rw7B@?Xo;@MKGK|GMAz4Te#L)gGxp{2vK)MC&3$rG>zHpUTY7yD`kzJ&iJ-NgKU9VCzD#L^OrUPKeq z+@ZopI6*7*=I>88CiI%N4y}l5gL{nWXU(_AbDE=QeA+FJJJo)=9bSm|T&JVSHALCj zQ3U)tZN`W^ygcg_>MaQ$IXoUEBqU%G)uPv4UmlM}vNpdd1f5>>_V@2kUbE=xZVW^b zN6w(UVU3vWglTsImXx57Zr7S?QzRmO3X~E_oK~f1^;Qfsm@f6pEg5w zF5GF`BcmjOJl^nT@0HSi*^=FFPipn=tPN+CwgXI6j6gc<6FlNR@M{nD7$j#aUpCdkY%Ve~5&+MiUY|O#AG+k(p8cu_5;BSt z=ENdvqk@AsLB!_4hL6E0iezs0zPOQb3xz+G#)g~aGuyMXeNo^FS3kmIsg@f|W$BYV zZZt-#cAJc6&{^wb>*w}k(5UFtxkV(gjnm?DJ1w`lBTR9ifN6_*|Ou~Us4x!u-@^m*B2UZ!@+O6-u{Ck5#L{2 zWb+sx#(SQC|71%eni#Q%0Q(Q46q6_WLg zX19lJ?hkiID;4fh8RC(60TZA%Xw_1!p-3U2PC^LC+zxn5+SAFZnaZsmz=9dhY_VK% z`mk7OyR%Iu&FA&%ay?r#^`qa8Go-kfx}8D0z57M0m6TEG(p`DI$=-Q0t4ree7KcTs zr+d@>y~{5omV6?G_j4%38dZ_2zFxS;^e&an?fJ~XeL8nkCXYV9YtohL{3&O$$ztPw zSpc`cwy?bX#1$GIa(qv3NM(nuFO^w#rKm7}=S`Pi&>`s-a(NgUA)iN*PQiM+JG*DU zOx47S1xDurKH=uebRD-=q>r3a1TO1%Cie)RgDcG?8!ofee!PKNTTD(oaJ<* zZP5K$HajXBn!@8}b}Nl`i{yd=W9mfe1l0BPw79PZkC*0Z6||c5vwd@pPoeQz`&%{j zZga!CdAlG;C{R8t?T^derIo1ZnVA-kr|E#30|-CgZ$4Y^0E`h1`b5ZMv$+>`@b+@o zQv+qrXt6U>Ae+f$G+dI%P;a$V{bL||&Dr%9_JV^#kE=IaO7?ipVq3CEcMC}U8$7{K%*QdkN2 zy&!zLU`MTx5D^f*FecFH5@4e@8a!PakEPIQ*W-09Ha(=J;o*@3CBS?)7^Od7s?K!X z(flJigfT$BS)96u*3MJ2?5{fBtU@Y%Qc}RYVG>$92|_t()wV<{CB>LOXI|A z)R~brGbrA4Q))Ng`d{sAeQz;FbYr=)z0wzg9jj5~_{wN}dw9;Qb#Mi_%)7^Kao+elfFegf=09e$XsCL^8LHm@S1ZLD29{px1!tdx%)p*|?rw zNsdrx=)1HRc*f8Hyg&X(Sf9z_!U@MnR?X+jjY16lxM_JQ2~|NPXX1kM{r&y2>0F3i z-x>({&=;qX_2!D_F1tu70h=if4B|^5;A$CUg^rLO&2fR68Edx#t2=RcOb4-eroKs# zWA{Wq5_~ni1ni|I83;&20IBJ=q0i!(n3$mb`0-sm;3p=6YL1&X=(WkDVqF4tdWgK( zKPafCIf&Z%EJYyFSc`}S{=5`u;=?fMXw}MT`=J3BG^phD@k;pmstcJ;ti+aX6>DBm zzcPt8ki~f1aOMw_OgO)p1W!g+ctz@61FKv{QxY2eTfFTKjfByn^_4C5oV?ku7%^X! zDKdoc+B(N*CZvXiHt29lBa7wkdfw83$01+D&#bV=YDy(A|0E{xfN4p0q*#U9>F}4% zT^JTavBq~w8XCY?wi8 z$Xql>djV)EiPG_?c^jjn2-UjR(**^-{B>etWPr=>1$w0-CpV63Yby#FTCDoWbuSNx;1L~JTRxRht5CY1SbdTM z_baDkTYH zmnbCPKMtawpA*c_tGc8t%I7^DM)wq!{G~@j4JtI65|LO8I&4;}Fm>=2Wa`@|-Yv@@wBPS^(6xduPJR+FgGw6?a2h2w>E1>YQu_x1M6rO+~3 ziHnNoy470FI05ix!FmE^KN$Am7=K+ZNf;}2w9yh42Yn`;0mG0_|GxYg?QbSwRl z`vGP&(~nqVJkjiQh8qTMDXRA?3)~g79T1a4Tv`DbC4i|Ync$4qIk|iF!*_s!nHg2h zP}p5@M_xwC*ArWk*LK@QM&{JV5Blj=;2M9C0lQhF&hBI2?*v+H-+`O!{IJ1`PC-8* zVPS18EvM7fki}1gT#tJoyQe5QF6M(F$|NTTLOI9ziOvnE|m`w zYiv`{@7qA*3IOS@)Fhd^upF{{keqP4dw>2`_ z`^;`VU!wWY9;TduX^)$QX0+{xhqU|4Ogde6dOx znw198(<6_qQwCu9Rs$v|A3z&!@9)L35pkGzw*zhfAtO=~!kA5z?IHmn!;sQUr=pJZ}U%JW`im3-s^rlhWUQc^koZ-N%cDn%Vzt^VY?P zPIgL?0~@f8jxfTa=^CZ#csdgz;eF(kylZ4g86JM|#P8WgL zRG8&TeUr5HI(ZRtI-P9qFL<})K`IJ73Ez;Sx-z=j-bdRXOsHQ0?+BR3hDJ=D^&`Wg zlvGq=ZyA&dMlHn$Xw=GiJZ_PTA(uF9xBZ)&as9i>G$XN5Q#KhSs)T8p<%9Sz1u(EuMv=rk_R zV&gGf@koNTrXSpz*T3$eA!v#Cz|T}%L>g0DxDhHRc?#KRCHzPrq#>aBNmu!W+N#U_e#T8S{~Ap$jDFrGtngCB0E&- z)ua?ISdn_vlObpnSJ*o3G4&818(d_s^Mv?mtR@A|*x%D`@C{#mDdN zpxPO3YXFN2@YneH!7T0rBFpt=ZHA7|p8G`a$3JDiRRMkSHT0u-_ZzoHy#=S|Gs4aF zeq}D^)U=|iqAvy1`1>LnhGuB8eXYfm!NWN(K=@%15QMCc#?x0uHwq0Ub+7KjG^Jra%z{nf)A5@i;c-{B;xx<3bqKpg-ssU#d$imnkO!RyRZO4k;Q!JwH zovt>!Pw^J+A=X-N1d;;1ag{bcysvKq6^tM4Il)Q^xt&29ki2>K zkT1Y#OtO8YruH2!C@zkP+e-ULsRIfL%wL$DogF$_FH3Ep*J^}GJ%~727#$mHDvi-8 z>#6C)LPsc*9FoN0H+{J$T&(m;pZ#F(4QdNfO*#StGA4)-~R#+}>m!rEtheqqk#c($G%`BM4U?AH97 zb{|(%>GU~@wOb;Apzn7Vppt*3_`1?fjX_UaLN1F-$Z3ae)wSwAVy4^f5s!<6K+DED z(|fZ`Rspq!{9hIzJ^3@0-EmOwSrAOz&6I2|BxGPnsagPh#lhqH~1Jjoea8J|Ef0nv0`lTW2G z*xSjR_Vef3EecoTX`C|vIa)OP_68)|i1L7SkIk)(aN!e;$i0weB>b>KPC9LNRpmO6 z_e0JX>z<(Nk6hr1rc>2(k@(ywMCdLyHa0(5Sm?PctBav>563hcE)fX0JQkOiLkX{u zg=>pi6u)A*<-9K_kI8xN3F1DNx7_BoRZ9ulR2G$Nj+yF#W_;e6pD}w}Bdqn+0kM ztJI&HEJQrU&F8w3#y>$wgwZK_Mn+vihYth<>Mo2plrmk*8v4;}rr!Xd6C?p^$WPp> zn^~^il7o1lHn|CEcX={+eYBMhh^>m&pw~QFtje8vds%6?5U|Y_kH^YIUCksQ zq%@KH{u4+qg{ORZ!Q4Qw1uxAeW_W331(9_w1z2jf0P7J57U>q-Ey|u<01)H1>weP6$#`7ZsLpI05-I$UFgK@x6?am>%E)-e603}lStkS^)&?(PN&>25)g?(XjHZlt@U>uh}E_rB-*=FIs6&Wtn6$O8}0ecyZU z>so7FYne_D4i}$iibRi%#H~Nt#u%)oHOrbLJ<+8UgR4jAJXt6sqisb^6 zd9AolB%!b$c=GM{%mPw5>n{L**Odv2iaZBeFbqgZ*$ju(DE9Z3 zHI}iaErqEwjpX|X@RcKnyjs0xYiCc_yRAKijx~HB-{G*^t-4!XA>nX1T`tzaqEZ0e zAufdW$?i%C9*R12CESn0eC6yz(E-KzHecwK`pv)-sZ3Z(s zMo*ZHWeoxg8OOJNsZ!ZiU0pq-B_TQfX>a#CG`1u1^e|L=A}0E)TH9@^PV~RMK`j-D z(XuHb4wKn<=69NkoU5M%RjA~0N-Y+L_mFUE>Y8H2O6uweA2AT<1fA+A+YEk{a)$v; z7P)4z8fc0)Ha8=^`l5-`brkc}{Lt!+KHx8%nqA`2Sj|`FDJOqOeF-|v`C99azGxED z`ANP|a(%N#!z(HU6bx>zTy(KG%5FSf24eIq^XogyCQ1r($hN5HPEAz2D+bl>lU zGGW)yQouZl?uKvT44`WR-MowAd_rFRlWQ_dEcmp8?f92zf&mCqaIm7B+*g_Y9ZOjM z6Z+Y`?`vz+nsYSJS9RShyt&yShgjtsM84MoPm}HQA*YYX>*qP) z%3q_(-=d--RKyCzK1pE?${n$2|Bw<9c{hcgVueJIcbBWbXS24pmTPdoVI^p0rlzDs zD$bk%>BDe+2feeuU#2{v-0-n*sJ~y7jg74lX^#~XW0Ad#L66Bmrz1Vh#6d5 z-lw&-&nlIH8|&0J*MUA6f-g;sjja>KzsIzkn)KTUOrn0&tuRu065IH8!Y%&^_E~Mx zJ7ARGH<0V`vh$GiE>g{cfNhS2^D)=M_T@d!{rUly@>vw`eTJvW)2u7$SrS(;^MNG3zq*2Up&+6AW*Oz)f7~LQCmFalaCT~}F`pt2n55~v<+nzwKB<0(&*v;p(OA5dBDvY^ z@!QBUXG51Qx|J;z{S;gO3KMG3}Wug#!@RP2nYxq7*%gm z0fz3E;^0H$#-sg{Jnp%eiyldM4hIr3_3{a@ZP?~#EfHC^)#dgyCS%)nAzMd@dML~ zn`fIge}d}L;ul+vzz6gY2|w64joEJ7*!=NHKO%}7?%(rOZ+u8!jCyhYOC0c8niT)# ze~JN6IPXRNF{$$RC6IUmjw_W{4{>C}Q#3=Nj*Hu`bdDRS(NTKEt?eq#kmMlF-^Jv) zyK(m{MGHXJ~>`w$@xV;`xHItP?1tr%&Nf4yu1|8FR+Lx=m`JuW;XaX9l9Ij zSbYO9u@>|9hW9j+aohT||Nh%}HyrV82<$gK7MxLUAZ+w*|7s1MmjgcRhYXo`ht_}S zkpKP%B?;IE3x^Kr?^g_1!Stk{Tm6Io7rWmN&Imt6~Q zO8~P}=qcvis2qjTTm9ov3w$2BFZf>j;?6z#$Ql|Nfb=z;F1#7l?f}3lnaj@6QUlNh zs#coWKir1?akFx{!sXm&HmbE)a-j+@Gnv}k`m7S<+#lt~k(>vdb}&GPWHkFm+38|0 zb|?Klxx~xMtBv2E$#N`1C_FWd%ku;0r(QWzz5Gp}rb`^DvDA3u|6Zxa!`+4JDQKHo zqtbin3XfwxIe%ADg%JafIn0>W2KqP!|On8hZm(uMfbvX=!QIh?9dG6Z2YIc^ouB z0dlx|6G}m<4%e65)jKofrD1Xw_+w}(dQimo1jR90^xLma@#uMEgLSY|5+yGP3 zU>r^CXt7dVgI8y>Nq#Dh!(z3!(dT@QmZ=XWEC434=vaTX7dzk{M+Sp;D(-&YO9u&^ zy6|MU*AZYgI0;zH=|YWPzY4JM&;rsx*+ff6ese!J0o263dZbcdu z2B18ZygEuuOiX2WJwhZ^DQwDy{z^bSO|~RqdIf7B}gQjOAh8(E)Cu+c)@@MC_Ys{ zj+Fn*$Z$K~lAxj=5&$25+I(TY#xy|u;$TkqF6>Z^cUMJtnUd;>87(TYe`wiHNe89Q zOnDnSG2FoY z1)uhuI25a5Li$h9LS>O`j)R_FjDNk0O!*54-}k07g>|675iJ7L77*08Sgkbz*RlAe z)jfb#EjF8*-XY=$JP^?nC4#j;W;L?=2xu>d<2hX;tx~{q`b1I#{p{n*M<<*6dk=K1 z_*>6xE*N@!trs;#<`j;OSKtqDf2Wtu>gIB_cXM!KE0WgzJ24*_6(cXZI5j1X%(u!^ zVWrO2aJ^e1Zi*8*4)g64IuI-W2!UxW*56-@0RkbWA4?GX01mb09)GcT(4|>)STie z6K7>*P3QJ5j!IwiTnKWD1@|4*Ym4uU0IU-5!{Ua_2lKnkTy!g#MG**V^#>Z`uzMLEh|7}(LcQ- z^cT7hFZD6;V&d1&u zKuIZO3x=VCk%X~&iDZdnW?NQY>AtA7wRb5e4(Rc>PpuW;`RpT(XQu1A{&RBgnmC2}@T$K}n8I{IEPF-&g<6C$zn87&@#;*X3N;a;raV(A+vc-2mK#mR` z^Z|Tb)yN*xpGH)$;OW*K7ql{<=`cnNTr5LMF~O}Kuecuyg)TRnQ&>`m1_%2t&4DGH z8ZB#Q$KbJCzp0cbBOrn|J58{uuCBRW2!uw;@)c2=K{TG><#_hn!-p@PUVzams)n{z z-Vt2Rqb1w+&^9Zd=!pk-@TmDUCXxxRaJlpOK*GT^HZ@gMR-&My!tpdm9AwPTTcM1N zx6^!n{BoMu-lUsoW7nvjCzDl4*=V3#t1VxYlo?K`h+@$HIDEKZl)Ahro^3Ke*=R4O zr7P6Gw)Ms2rxLiV*_4Wde&W{cTRM}u(f~497h*Vf1tNCQgRx(CO8`b$to7dVDH0}o z!B{Glw%pd{!!5wYwGxa%_HkZeV@2E=GNUfSE%5K+C!1RcYE*;hvXQ1qg6mTy{MRnB zdA0SCiD`Pc7|sOqC@?Wk*(&ho9SQiZq3P-lt?m*h$0`jYJ=~jH$yFtG`zWmtUCFbGbL7`Ykihh&SqV)*ig`nLJaIlCfbvmr6MEiS;U+AVVv=4;B z^b%Fd?fR}y*Qcf?hbZKXCbC22(zp#^k!(jan&1({@(T(ShmOR{HYsZ1AfVtIZ8l*S zp%D+ZJC7$l>4?Obp3Jka-C&a8N+JpUh6LdHwmv>>4opt!9UZ^h0qmeu66u`UMg?Xs zI>T3kQBsJDXgD;?TD%b}!Tj)hXOEs7Rq zw7}Omr4EM+9Val}WzH2^A2qU*f*X|~Ky~8Ju-g31-;YYUF@fUka}DHI3GUPLbq8lI zy3KJj$vO9;dvwD>uk{?X_%?q40=w%L{2d0#;;po@)D)1J27UP4-v=)#A}sti zw6jCAxm=rgc{z^kG2!`=&WUGbXG1|lqfsb`gJE3!O}IQCiDX@7)1A@^LpZ+d_V#u= zdwW(4x>!6siej&=g4Ri%)9Q?$917TsXn&Nl_;Jl3;Ph-GTTHY(EU6OKRQUP%CuJ`| zc{k1T*eo37Y5H?Axl2~dM639MO0q?`NJiBADUZfw-0e}wO3wuK*8xf^Z(G~j(^9pH zG*P}U5W=^;eSKx#&~t5MI+3r126j#LH>-NfPkO{f3O`>tw6izPi)>Y7pAZQ~ydz)r%(z8<&L3w6FN|U1LN2++Ps} zg}!E=y#tL1+;bxWzCJf2Uml0z6CkgjWLOxX0~r79)%xZ)9zMDKrZe?ZU<_T?KMW6^ zwaY%F=sX*IduNzRV@u45++RB?@drJL|9OWOt1D=H6Yc3A3_Z=mzNZ{GCFab>(%p>&qV>H3%r z9sc9|``0A)dVX>7!h&N%suh`B6Rku#{U9UbXGjz>jN#?M?(Sb9)oWfoJb|ECa^+5x zu+oj+*MQbMPk$8Tdig2=NWw`2GhtSNZYm3{ePAG%@R1D68$m%qVFaWv#4yv+(aFfj z^s~S(HE{R=4Qg4Lb+`6T+`Dfft*3>r?l*nb^(|bRoE#l<%d!D&|=xlT>N;@gPofj`02tC4Vf-=uhE{C589_)6{rOp4zl$ zPy(=$1w-AJ7ENNJBHPrKj#yducZ&I5OO)MD^h6}+)e*ODFN0;yN?EqzT@~?A?$6BP{s=)E6Vcry z4kK@&)GYp?3=HU>LX;)iKZ{thodsX+SQ7?{)0Rr1ZP83d7HDdex1=W|ZEtfUe@V^C z%5oV938NTaDdgajMwo(kMGKll+`=^W4A`0L9e9)NpGEA65LIF(EJKzSnG_{Hr0hW$ zJJ0XaORyo6*TVaD4(3runwhYLr$}?zJNxDtsR6dhJEqc4&$AD`{Qq2PAB9LWx=~Xe z`oVGteD(4W@qhec{`U!o|FW;~`VTke{~a0m@4<-w_hbK`S&{#DNx&u9Saz3s7Rmqf zU&ha0flm^4Q7k^aTyE{CRWa{bGTtKN;B>tk2h)Pp# z1}4YipPOX=8RgY5o9l0$C8(kP7{+*)=^P}V)T}?O0&Qhe*^oc+wkvg1I9t}PJb6;;U)UQabIa!&=fR|V%NQYJM6Pf04g@hsPs`HOLv zCn9(;8_%If^<+lkVJ(}}=_;|WE$4BCpH++7>9+$Gn2HPKy2@RK=HChnAs+Qtyh@O6 zu?}XtzyyY-8XT^6LuahXjz7N2$!)-5M@bQl)b`oll+6GKy@CSM-_`wnede>)a?;Xd zO%+zQmTH{w?5}FA&!=N4^V`aFCxXWHhs+mX9+xpNl7q52boG!#o@dX#Fnw&2WwdDT z#F!w);V5Me#B%q`7&YfxjW33#p9s&OF$WkRND3%zE{!+gV=Mq9`vgX zBQ=C~)i>8}^yK>UmJv^Xzci5~Z$(B~v1zECGs|#}SEeW8%V3{~;8J5ziw3c36sq(wt1Yi;@>8Dk%nbEdo$AUS)5YrU<_!k%?^Z876@eg!W6oNKrtTCT#YR?O zHf?3~Q=;hBlipngUUy>rL)`SeRDAqMwS`id&4VQ8!|&Rljvd}=bM~tJ*^9Yo=$tUT zlgqP0)t2uMwPcu>NyFhOm&eP%PB|P|=n{D4?y_4cO_?wXBD|Z7Yhq_^a&V@#T|OI0 zTTV`hD^{-|;CS~vEUY-pqHKY=gy*5Vs~hpqklDEVzBlkq=L8S||4ys0viB2}cQ9AK zI(amooocu|SovAj+Ws_jK5!{fV8#4yp*8*2{-kAyO#*VbK|sTNHiWx~urt=$?-go5ij$J(4zm zXxup(SP#2C9Z9?{HD5@~W65K@9Q+Ouo`SuWE88M6;?eOnuh#7MXmim!?eyNfh6PhS zgvgE~_xqFL(g-c#PO^0!W1nu6G1}m@Wv(OLg{L9tV{sQ>NC+SxzwgOy_*c0`kD3-A~_s%k$4FVw{ab zQTLD;SVx+bxtAwnvXVGU`xl2|WXSXZ#&A`YK_|{JDz8$$-mEk_;F?QrTRhMZvuN$0 zUq<}hd`_8#S6++B3+T_CO<_$J-P~?I1wRC#PS|=J%@?~1$ySV4?N7R&&&S?49_T58 z!6Abo)r6$Pi=&Aaovi*Pmp3jM+UefS&(Jv1NW|QkG#EKV)F_^*q~*g zjWd%>9y?l&fZ?FI0L^wxJiHo*xs=Y%PTr0lir#?|WhN{aVunxX4`ZV8`EAHA9W2#- zBk(wu`CjnAEZ84=?$1MV%^xN!c-*f}TaJ<{p;=D@3wG8uwuJ!6us8)qaA5eKaR571 zw#8rFBVKnq-Z*O2QE%}AEQ$0tqlKygd5$eL-?m<4 z(f%5 z;|6Az`vYL{p`K?m^}>@oK3u{h zl_|?vcp;&%A0Y%tACUCMPo$AULnMILdRPIw_zzQKb=#YaL`^Ptp59G3LsE)@LDj}? zpxo6F6AqM;6y;+}&w@t8(f>Mb^e7I!a=g4wG9nmxw9*tipy1Zxy4K)i4bj%x8Fr!H zFW>t4@$zCK&fe!cQ~1$}e?KOTo!RkA!pLAD$r={z3w}s1#ABnG{ef*H_L@Q;5?JIM z{?ZE^7P^ldb{FMywdtUxBJ~E=`zN()4r%Q6==m}xp-s*g*ic?(3yy8F&c~Nkrty-t zb3%WuO__TIiY@j~@Oubp!JNR@meyv6nobaFIQV4H&&OC{TETEbgXtl9b_2#xFD`2gm`5q>w)z6k*H-HzOsFyg{bCsr*Sbl#Gh0VJ`6#*S} zH^fttp*m-ILaNT`KD!thfp1Q*BRNy78C9b(tHPz)hbogXgYI)Sscn<@B||q2fqdD?V}k(aiZdbl?Jp zts)=PKfTUJJxa5S7fTg^p}6Qv!dE*DcTd-d7lE`sWyssDHjuK(9XlRsOx9Z)+HMJ0 z{+hzm{t_x2wjQ(j5HodD)qs6MnpISP^I5Bas5KJWzhi$tsq}=e$e{ znS)c<{V>5_2^<>Q+u>z#xk`5cFQ1v>+*RZnMn+1?chx^Y!BOwI9gtQ6_@rS>I-N#| zAGe_R8$cVzX0#wLoE|-AF4kBrhv>mVTdC#hQG%bO4DqO)0eK)ko-?TsUlEHI963F2 zY4SDY^j?$Xs-H30W43Zok)$#GRBqHfHb_SW6MpC$(ANEj>q+)1jycX>n#jw=hdkWgkQ1o$@ zJw{2Y-!WNErPif!)_MN<*;)+QZZ99?bulziS3iphL>s5auQom*G)?gi^UAvt+oZ~LoY-FbGj!IJvHUji8tgy zYwFM-OE-*TB410LV9_lwXit}KY-&clJH9vM*5s8z2n{(!h%PBE#udB27%;R@XGiK9 z@X5-|zI}RYHw|{VQv?`>d3H%7=nlsf zi=vwfpKo2mF#gN0$;POu(7$#7G?KsFes_7MSk=;!dL(&vc@7<0|RK&!G!^P#=gSqAp+!XS8Op_iTCn`t1DMP*+ zW4HxCLAQ^F!ctN%PQ1*vlvH|2u2B8$SAvGM+x~9+>TBDNzq6)i!O`?=dEdVYe_#LN z;XM@YQHegQKzVyGWJHp_1L@2pwHEs!Spf)lF{Qz)C4z4MB!aSG;A>qry{QPRWu08Ju7usZVKE7AY_LcS^$3zmFU8XXZ>52r*=e;Hz{Jt)9cmR9? z>nYXCS3&tOKkvyENopp1s8k!I~on$G^49>*(Mc z?GprcIA0R%huC<%AA3v8*&9G$5C2s$(B&cv6MFObki8cr1M^NFKZXntqd?vp^8ean z@+nF`X4QDwy3y}$+_X~6)q977(`0?e%LO0wXF@3a&u{UYrjqfhf$g6w`7?#)3iXS< zw9#qo+_!6YKg7~>Tznepw03Wks-9W~-$Rz0F5H4OU1dQ*`Ziz;qE78)wZfw2tXBBJ z%H#BfUsjdG+!^Zc-#T$6cTaG8v*e43a0=^Twar#s)_O>T?YU+r@Q<7lI3HnG=Igug zbJR6lXh%jz@g-}&$?s)lO)JSoiON&nAz^fE!k>AnNK@unW+^yHXBx1Mu7nRn3&-)0 z>C)#kF#kNEee?TKGMo41Uob$AmutOadV1;(Nw^}B!FayVY|bVWYkGGvUBWLYmIZ@U zCUYmdh&>FK)kwC(=Jz++4*!MdTcS^qaxM2RtJv;HR;=g!U;SyaZtvV3>)p*4Pf}Ag zx#$Q}QyT9bk1ZW7vm|VD&9qU`&|L3Fi?5C>FAo=cIS7)+vbb!2dtKE~pQLd(tcDhB zcT%nW+x)&ZE>*+Y!=9(Q<6sKdSr7lXeF_`hLj8cnn!x*KS}tT(15g2=)=CY`qnB`=(}hd*_=F_k@=p1m(~@ zt_~KJ>c#71_>yfIO_M>X)e0Z{;?BVWbGk)LMy6gt!RP`UefKBGZ`7$rMg~4edT!mn zZNHel5Gzeo{BSg&K} zk|5tFYvOPp7~N}fIKs=LWSM}p02x?&RK|M{7EpU(*1{~3IjtnN4?3zJZ_|$*OR~;$ z%+#791_ZtaXtuaqcFYJ(%9{95=NCad8A=`X^mO&7ZZ?W^WEY)qI^HG>nWEt>rwy47 zJfkWZG=yER?x!E3cSiCi41Yre#3@8JK_hlx{>skoZoxIaOu2FErQfEe4+si^#rqyA z0lefa1%w3hOpSU6o_H;h{XX=mmy|mqQ}#)io~jn)Ugng~cU110e>;H(M zFSoer?%!tZ(8g0}o=!kJV&^M2yxhPG>A0S>T>KrNsiL{4J>QN{utlxO5{f)aUch8J zCV4AmS;Rm-G!}2GgzaQOA&v#GFTD?PGl>%BTtM6Z%e2*+EggH z7!0dcyNwl=eVwbZ{}&d}arY*A40es+Y2N;z-g3skO{Hc(MMH3dg*6UEAj@uLG@4Aw z!3xh>6Y+TAa<3~oscNrge{%iI4;gI)x9b6uqy6RPXrsLARSi|}Hf*(VYmxCpGX*=& zIwPoPyxRltvFW9?x&sjE+_!PTHE?Y7cy}=hqVe8%z}p6@D{4q;n1miKy9!%rwO&e4 zu&n7Vr4!=R9`JM*WiHqsgq4*RVF4NR`4i_xrouI5)t+vz8E`rQHHPX;Az`Ba5gtL3 zG`g#PpOXk-bY4X~r%iqATRd)y@f5~^Evvu9u^#j@VVS)1$@+Dq`}H>p6EY&J8)&5< zFuAfRuS1Pqf$k~l{mHX!6=jz439cw`|G=Qsh5x1+%j*Fx8 z20q%?SOE+jRw|9(yc5j2aYRaZzB$VB-du4wOBxw$yoSse)Q3(=qTA#nCxu2SjI&ZE zLwXMnIXrTL$6hEDJpF^s{ty`r>(}E7J4NmH_o*_GD!SUXg3`I$R*aHJV+%=Jgwksm z8O(~8l-rB|(p;%`NH;C<{@Pws{G-KcYiF@*Uo0^JFdxsY0uEs3P+S;3F?^THB2lX# z-;DH@+oJp8q!H%WMzAW-^`f%v^*g#Nf|G9oieI)C52#QLzl0KPaaKE zoNkawg+c85DzY)TpPZG^nzQ03cIPB@yyOM)BK3E6iYZxg8B@k4zUZK) z3jNu7-U0lT6VGVIs1uW`9n~k|4uv0{oA@u)JRh_^-t{?tSbYU!rn%DWF;1;bN|tEj zeNgoR?bBoTD@r(!ix$x-6H5@;(n^T^0rNf1#YAgq%ntkDUr_lP3vd^6NFb^5wUx_8 z<-gcSIxmN;{}fREH+*dFBk=Z1Sn1yQ$oYt_tPHCUa^t;!ML`x=j^X)cyzS)nod!l$kq;4r|NN;l{7R_*OxOhP zPs-ByDYNrI^dUAOO8mS8Y?+TZuxBadQH@FEDgLmb70=3AXSnyRUwB`PUm1$i?P>r{ zsPTo$I!lN!v6WF`unB1d{4@G~hWNB)DPv=E281iXyrb@5{lYXpB0`Jm9G^B3Hf%boeK4UCrSw z9v-*JM(K{(5{bjqS(fEW5$%Ga@eF;~{T{Z48{D0vq8}jK`nD8NT2W*vkHt zN<(?Gdc^5sdlR?%^XC*r{1qMz`jG@E7lv3(K`g4V$a7%n z>9NR_lyrD8PGTS0%Ju5Dk8=e}I#jn*S!)9jURLR1VZ*?{n45zEtH&5*NmT#*Zygio z`?F(&d(-8(%-xRxX?UK~L&-DRF6MKEW8M$0i6ad)mM#u86@@xs$nK3z2_!m#DQ~Jh zmiA&+CSs45nwCnWkUCkl7mdnb`hcabL&bh8Ri)t!V#-3gdV#JG()u=t$I&+RgDB(l z`14aeAS^mZd}eesS79g#8S@+3=Y-&d8nfjW12k?rIyzg!son+n?ZIfn-#6KO;k=8I znJtuRpfK8YBNhXLqF?6e+ppa#cfyazl7zLbt*;}1fH}^uuSh9k5*8Y2WP*v<*f8_X zZZAV|)GJJGQkU4fiqSD{kh8okYo)NcgZAm3$fAkyebt6rCyzn8!s(hH6*dTQ*j=bW zitZ`zJg4W6ZU-h?0PUo>@a0b#{1)KXZ0$@{tM;WfV8N71(aQaX;knpF`tmKnd&99*$!Ga4si4OV4bAYe@(rxb`t6!c{>!6F7 z3+}_`4(P`vS6H{sSMi?}mv@(OBv~ZpXRaE~*L$p5TyEMsCmFc7EDmztWoKty;c)=r z4f~ijrRQ{_ED4j@GMoF>fxW51a*HPt*F=t_$z1*gLXT_KK+IgDu`mAMZuH&NVQP)m zY5&wdw&n6{lPfd_7(jgEJyWK;y>y32L_+d8fjK!G8SMwH`B};hoERnsFEcKyo7GyB zKFFS!YqVbSy_4)F&bHn9%u~ALilm}gqFkVW^YFVXvYoXeC!Sm%zTh}_Y~9Svja>pn_6WRvt;A6)-6S)1B?v zho2_P0MunTl9DeyA$YKiN+yHSHd|=<2`Yn`ocs)!SqR%YpTnvlw#MCE#u}`55h!`B zjVM4GVj~T*4>E5}t;c2iotn)@|%q&2fzdjUadi~6~jUh21VF#h$LuTga zpVvOu+(u<%7SHqhuTP~S?O_?dP={i zpY4h_A>}+pJT)RNTcaqdcYpc*JkIo(U}!S%K5Uoj<>NY~&yj*bMC7vj^DQVpzd1i2 z)C#GoxO$&a)YM95kEu4wLeP8~#Ac2pl9&QIs_m0=hQn2Bj2oQh z`me8@#xm#`7&ew<2KsOM)&W0czqbhalIHDbzO(L!>)F1FYXJP#m@i#kml68>sLVta zTX4Y9n!#akBK646%~dEc0Nqi~!bzmQUJ-AHAd5fV_@4<7vvch;VU9BOl#H` zpQt9OLz;d+@?8udmdUq8X@3EhiT(P4&H}-R4oy^P+%N0km`P%quVJJv={dWl5)E|} z;_9ZR7%B6ojHdIOlo9}Bs;ZHrZ?Fn30KAn>&r$HE3jhiegsE*7#Dq(_y=MJ&zs@SZsD7 zK3o$dc$=NESC8xWbG=Q<({K3-0|Bx8?)MgP$dDWz!u^4f z^8kEPN3(_ZmkV-`$?20i#*3M|g&4BwC&%nd75n1|ArWs zE?&6?x6*1I$ZIj<7<_yOUXCy9Da$?lHf(8rg)sO5CI@W_7^JDbpLaa^ehff^BMzrj z)}J1UhEPUETIiW?o+d6fCz5A|M-pnHt`ZpxUNp~?q|E#jDbRTE@9OC~nrj|jI;=|7 zI0fK`e1QfWaho%JH01}zmENySH4*apq2Xg!DPLeBD~70c4g$BJt=rAVxr<^77NY3KeS$xfBa~+y(O=) z(u_iF@ikAhYGHrXTi8(4{o+MNBai^gOyo@EYlx-W19xjiR@K8~|le2;dP59S8-xiuqJ6jzS zQxi(j|q}=koXWO5_oWQLd%|3ChE;*X;!shsXWs z!a{?avu$88IN$eo`Abj(E-9qjSBvgQ9wBUL*@%$K2d&l=ra5nk_uYO9#Tq@DXw_$@^-GPQp<0h{v{Amo5PKUQ- znqA|o@9eC;j+PU_p;2k<-CjQ2h|MJAOzL9)SvW$$r#>a@EnH#aRbd5$jykGs6#m-;d2e7kyj zey}#D#g=Zzhd-lJZSARz+82DEw61eSN`HFXY_!3y-Nsfl-G!smYi~8wlnkeGkS0Nu z*=So~7Fe*i2K(Y<54U+dE@1d2U4$kMnRT=s9^|C{`^2N_W-tP5c`NvxUW<-mNJz1(H9&`OM{f_9mxLxymih3X&2` zUoW?J4S3vNm)V~SO8)G_`Y1B`t@Lv62d8hMd9aD8tq<#<HZ#=(eSzbEZ>iA&E?|M zVt~+QqOIn#ep@AcS!0<>V@=q$(sEa*QO7Z0`MLVOX^sAvFwetz+2CTRRY&~U&urK; zPT;|YkDvCy`y!kC|DBcly{kBm2C=0r7_yHt#T-jRzbAs_d7WJpA@fmlkYya=*V-Ir)|) zZBlu#XR?PG)h9;n-*a_bX|$Br=$u6^U!*nbcKU|^zNkY;%Da8B*;rs9Y$=kjtf1Ad zP*yw~*~GOE4wYK_%@U&RkzYlRVAu~>_WWwevctP!28-o-Ju>7s!vG&GchZs&xCc3! zc`8K)j1*W(;ROqmzUCaH_~!Q3`wr?RlljomPVq+&z!LYJgs)!t+FZ3Rl93!omkx}@ zQZWVPG6H7JbC7Jq2s41$7lp1nz7^zWQ@I!_J1KpazLrp_^zOHJ-leRSr5!uy^Alb! z-;T-9ndeACC_v*mAJHT(ja$zNE5;T7{SR^T>&W;BE=ZNq2l~dUIiwhw7}mg;4|gP$-gEj--sniFVX<;e zq!biYjrMu>E71*F~V z4^X4$X8sPpx+T=q)hq4oSk}Jw0;WbV4D;c%BLI}XVWoHvLlfsG=?}gEh|wtwsgUEc zE#d^K21d{d5uiyS_)qgLwcxv+R+Jjhe-NejUyqnK7RNA45lLI?=qJ?yib- zu&k%8j1weQAS^xhqMpyM55}J(sErf{mnz|^I47P7PXmZf!fSH$z=J9i9j^gj+Wg!0 z;S6I7sVUSF-GCsI+uhD`Ca+;bUaL!9T0!KPFNKH5p~+#l^1Fy}psFMb^GgNUctxo$ zK~MaIM2L^d0z~GaKSAC*d3^QwLNAN?&5M|dSz>vaXoTG`H<3&GJ`SC1E1Fw-}1)A(*TZ|Lb-oRpN6i3Zlcyq5kd z{j&!D8ESb-vYUBfc&XoFVq#*s#7)bb`R*8siK&W!SUXN`W>m`*GW|&D#od^0I&DmB zta2|fSiL%ArePw6ViMW%)u1#hvfZW@6%kqUwdR|Go`YxqoT0;ICQJG?D+to_qDxG1 zP_>kWl~n|UV{$t#`48hKq?(=x_dyIES zPV2wZn^ehF<@n8c*_rgG-|J4$-G8S!5Svef$%ycENPa#L13g6rJ%i{9yy>Bm;$|W^ zzNTiB$01YoZ%$Dob>=J4NE-b>j&Rk@8K-9TuTDJe5sjj+l?ZNKjl;AuPhXe zr-Hz8YMP(Y{+vc<{3?dY6VAKTo%+n@uAE`6&PXby3a`OEDbWn0XsvJAWYLn51-78*aM7Jr?;OOF5 zTCQI$EG>OIn;RTYBX=#U&ws;gHf{m}>xGbxl&bW$kXnv0UdJVY>L*vFXe;ZyC*4Um z;}=tjy4zOgOX0Sqg=r?EMV-KhPB_DGQCL^_53gYqcg32Xb(mui3jrZkM)T!MVM7Hp zA+gu{Xe0>-KXKk;J8e&+N*WYvu!S0>^HHaAs^p0>j`2tJ`RBxM8=_AMWSP0pus-bi zva1@8tSCGDnN3#*p?qBKR<1|)Kg<14Nh)m!5mZzJW+$zuqqGtZ=CkNm1jJ8izMC4O zf*VQ<#AVYzWkT5h<0>6UZ-o@8H)MTnTil3UHAMKv>!;3#+gQ+^j(W8 z4O`z3>Q02?9#c{l08&e255)+#ZzBthKRy-W)xG<+1YQTs3@cC>U#3qKdEu>SFLaiQ z)t#XN){;hlT4t=bK(5NiPW+g!p}LTXmI98Q{?mSRfTM*P>r8E8(ZrAa31WEfHzi7W zCZI1T!IJ-MN}0s|u6iHD_`3ToD4YrtV}((ttpKUt43I2^43_d82GLQgHhJ2NQ!|2CToRiH4K~X+B<#^eT>7gq|DE>nik{7zFwm@vM6Ik`Td*C4{0i(0;t;9|MJg9p!%Bn5 z+;*$8Xo}Qosb{S9#fZOhLN2(w%-fM_+DrUf#$=+qoZIq}_#mgiOa=1dRi*I=WJ& zOa-P!LB;Qd=3`L0 zuWQaR&vB0PcfIY3D9Qwz1#>IY6e^Rp_Bi0j^qi8St#{LND4WAcxm}O+)JMm@JaNdD_{7_dbRs32 zi$2M%g;m=hf?|P;j2&_Y$GhnBO^#_sH)78UxUj55;$LW12>K^j+K`9)kr$LeH8)*q z(8S{I`*{&T$Vq&oroZg^dOv^{@-bNBzOtGg2nV_A&(K|e8zFpRph>cd`(hz4pRg#CQg}4# zc{s)pObfh4;KTHH)lbFw+h75Yu1s=@0{9{SzEZz_{y&3jT0+9>nLAXODiK@s?IbMd6{Us+y^Pa}W$%Vcrjs#PB1^1` zN=?F-UG44PD)KK+JI;!WkAGBFUL7vdF)>BJT>?x2z#afzPb|S(M)8MO(24YbNHXha z4IbkQmH7L*y!k{{c6RWxMhC2d>#jZLH=M(J=axwrX^}g3qzjd2XaLmjd((1+U*F9c zI_v+u8~1K&!0A|=hCQP}G3}1-HGA#iEAlf35TY6Nrb(HZ5e~<)q*(MvQ6g7zWV2cX zoHqAotoJ5478_Lnzw`Lm>_2U;=c{A!&KxrS`iAZ9m>a3V2#t}X{AC&Kj$l-1=zAoj z;MiC|X<&5j><8oXs`X}zXK^HOO;k$d+e`mtIDShPdG~*Q+(|+1d!8omhT4c3$C#kz z5#|HZdjKpcOP-hu2&u)0CShlPyCgj_!ra*jBxsGq+gk@kMMdr2@Riqm-oTY;C2r;M z7WIFo7*A=FxShk-)_ddPEN?J(WRnH6*t=Bc$ZHQ-z=t3S-5W{8VcF>qNX9?1<@LdE zHW(VmmaZUsWICre|5D%9e_qXw=lL)BYG^VI_%^=95lC~&!(e|MpZrENF*9>Da zI9(S{6;cEKgN3E-QnfkqnYgILig&9R`6I>lIWFyX$Qi5?C1vhlB12Nm#rZ{zyP!et z@(+ANNyLOK@wl6vHLn$Z7$KoYahiK9IY4Hiw)l6~2_%v2V3T-UK&7UE{jU~KYwx_j{mu*y zi+;H~<)sbITqGtng?B)1Rf}vDA&!VYp6I4?`hHjxm7R-UAQZtK!?txGnB^=BXxw<4YNRp3<#+b@mO0Ku}Xl_nU;rDDV1L!kQJ_9E>{F^u6bLnk` zvIKj$?GeX#imWc_=RzcPW0i;5iN1d4wOb~NJ>Ze0ny%GeThCztre^!A!Gnf6+t#zz zn=)YpT;*!5nR84_W>e*>7DB=3Lx+F~~IyMrJShIoH0H!^Z3(aoVPh?4g9_XS|zb&OAz(mh)OcTrV zwY&Jb9~OZ=VgCTfWT8SCNc#shqPOa1T3VXrR;4D`Fgn3})>rqsAa=9Odu_|Jw`geJ z)i_-{mAGMPsgx>It8BhoeG5+wT{Z5CLkP>HeHzj1VgV^Xfp3sWaJjA2|2*hn_yS&s zYKGW%yIJc4ggkw4$g9403y~(Y~&P_od7!ZWk%#n$i z4V8IlX_E!syrd@ib%VZC4AC~yAbbSJN1kc>+3HMJlJ%@6yA3y!>q{!3z$m!qDIg&q zubJt9EZ-MSMNz}>qvhqmFKs3Y-K{QA$Ob*%OL-oGH<}Rt7GM0JwEsG)TO|`pOW&TI zTwb=?f_nR=*`=|Ojob~-LE}*ZW%50FM?Lhrle~phmf^GtXih|NEklfV7BgeWu zoDw$HP)ANqelTmh&NX8O0now#n}LlD)aCt|JgKpZ`!unzWYf4z?@p-!5dUa^*92R;&vAou4r!{7bM5(-VgA25`0f7<+1*6(D@0(l0F`D|!wV_N$09Lp$BL=?K=laO@PY1~o+MQm2e>Q=aHlghzn5AL0O zkxN_28ul^+kU>ONfeO<490Va6mIbEwA_rcJ- z=xNUh$yH&%zR_sXyo=Nc*jsWu7BKklhm43nn-T#YT3?gdTFnvnn!ZTN@!{cUI>W-s zO6Dld&xh3V<>Hse7CoX+KU|QW-XglT^uIt(NQY|`5Efpu?`}nom^ywV*Uy^e4~h&E z8yrtKoDs0%YyzOojl19%!|`&Ej__4Z4jtZ~_t*M5p?qHr=WqWRtxsh@VFW2(KOgU* z?RKF4Q@vOuiC>&+k+74CsqpiwawAHx3rV7;t;vGXOPxpMKG=wB`=b?Zm;G#T7Zl7@ zB6FlCCx6Oxsj;#N>J$DXD|1AXl=Hv$3bX_j74;FQtlr>v(J@gpI3Dq8A|t=%Sv;He zVfaA!;_tvCD8A6~Kzte-f>HfGYIW+dW7o6WR#x>cO`4^O#+ zTdv>0_x~|R7y&m-TvfvVTPd0RtCSXCJFs|WULdqcy%VME{pIZVgHow~o|}6SSUH4+ zg+Txr0N>=9Q0)QRF_*PVYajv^z4~0F#Oq>>h1lTWWpmAas=R1hy{X+1{$CSUJz>IN z`_#reTC7>f(v^$nwl3ud*^EvgRbP?W&}x177cu-E{$N*7_t*c8h3odMhLF6ub$5Qm zO^t_-gBo~q&`jw+t-xe3t6XnJ4T2&My{-~~g=KPlT)EcnS5nf^;)9n`l`)TbYjkq+ zXY7ZSE!&OL4z@G&%fmU-tw3YY%&t0|2a%cG@d{&Mp`oj5tG|E0Y5|STZCV$rsY9+S z9M<>1rDGlXd%3oU3=B7cl76Pdut;#i;0rp<`hTip@Y(P&r@vN@c8Y0;x@k_~bZ}MF zTM^KErEZySPnoL-_RyNzdiS}J6CJQJg@uLDsMRjhn)@p3&?m6l($Ugd*s(O31y!viqOeJMV-cXV`gc8cA$G2Gj72>rbg zrR`oLA_fHpZk7gt`~AGSni9|XZTa>$T|Jc%>n3ndiFihZh3y$lT{Mn06c>Mey+AAx zcXRjT<_g5o-D&xivx`0SCfr8KVv~}e{d5ldcJj8yN{l6Y(~~EY@FTCexSArVRXl4h zE-p?E)($#cKtrPqoLvzb*N|7)@RN`*G1>G_*XgzU9d7Vs_7NPqd?8Tl4SO`NOm<()=Mvx_#{|)emc)i=Jg?R6%TV6^|I1=Ux zgQ*-PM6N zj{W^pMVkvA~Z0vqqkh|JX$ms3s+g_ET zAsX0S1$b`dCS%Op+=va9exFJc!bqeR02|2VbiLzD7vy!ZnJs@hQ!BUgsjr{Ui=yG2 zUjV3{$$W*re>K4Rcfz{El$4Z=FHttu_8r_Dm9UvFHMf^ER?|WLaeBhV!yVZ6`kSo(gd_ldC5)pBu z(ikVb0|zIzg*wNTRY5e3%;2Apk;>b7dK`-9q<7v4+9s;JdES$tF9g7NK}qDfxnDPx zSWNx>?|0VLsA>_>hQ@mkybum)WXknGKr$3vU*CxraOtSk+CAQ!WsOKnD=`~`aH269 z)p&waD!^El%@kK{Fd&i}=9S!=FfDexdSA<845?b)v<% z+#JAq40pb}(qx1UI)8w1UswQRS#ec*J*(p4;sOxNd{#H7+ShAV0)CO+cfy23L>lr4 z_5!gW@u-DUDv3KFgvSm52jQ8eBw2TCfrIXtxA7x@%XaCFxY<2OYpO^QjKU||LV2DSZy34~|UszLZsAfL{fyI!(+_sopKY3ge>r}ozZ9thYD zet`)NCWCKRCzrprirU+|vq`On(hXh#3#~*Fo$Dhf(A!G>)YR3jIWD_FdJng^rvvbO zmQ>OTy^oUvjQX|qrE0cXw8zS_8dUru82}sJ-ny6$7r(o!aq5UY;$8&3jdIhmQVUc+ z5b5XVakQ8=)yP$sPelR$aoTos-yVdIop|L=Wxq+%4WTaOM8BZcMwAOipuo}Qh7R5{8Q{fS&zHU+a&g{nEK zX}9S;ve&YUui-rJ^1heF^GGEJCet=K-*vA3`NQwF9*$D}4iH{`mDXCF@L5@%PZrEo zyS4*h##Et7liA}uNaL(DUU~%C)XmMG^cMd2@Eun~Z@b6|po?o=fi`+ei!S5a5G#^) zJ0~EL{vCnv<=)g)_X@wMYLjY}2^S{-ybQni8IKqOz}M*7q0!NV71-QP*ANSS1~%v2 zE9vX&Aj>m_w#nYU0Z;~o!9BFSdpirlgimYZs*FOS!d&mSSB6vgKP^a~hH}e{5%+*A z-x~=M8zH>_Mnlmi+|APyS}b4L9xxzKK^z?{=3i*(E8f4)crlBB!2KUA`DHJtRX?P0H$}lBsRSkZFny2=V*{}2DsHN3+d*XR?}ek zFvH*vNWauGME7XYYW-AjGC)J(835Vvl{$=6?Be^!hNK=9NmjC0d*6p}t?lBF)U$Yv zGA_Gy0Vk(;cX#}yl{%X<1Y8K>pIKgm($XQZv5J&)1F==jUN{E}S!zX#&TDIH6XWC8 zua|0FSEbOcL6pl+5SCB-(&lLLVlRru+2P7F$T;uEl5mXT2`EGT#?5;>Z0m;mmHAtBO8{oe4lz6+G1xHjGyi7SlKxPKCr~nY2Ie^MZq9^IA8D4{QaJ2TG|R0n5*1dDnV8! zrrPTUvUXRXI856S1%chR_GgE0T9h5fb>=yWo;W36?&$Fe$)0V)d*$L3_ zA1DLpO&Wl6(vB*At5|ndcL3eZCas?Gi>D6P zqTj)a2x?7ERBDZ!mV0`J{6(#h4P3zA>4S^|lJn^FPYJKVqU>F@gr5*b`(uR`@^T#- z9t*@P54N=6v*QwRRsT%`!qu4S zKv>}6S}|$=5=B`kJq8^Kv8`mK9fMb;vW~NNSvERN=6>1;K&* ze0EfHFBtgAdmf*b zR`1ars?PQRWaO1>Rhfd+;4#=9#aGja6B83Rw!8C<&RYN~xHXgja6tPf$RyNiwfzqS zwDc7g9j8!dTU>U>>b>LoNWOr(0G|5kV7%W;_4W+9hxNeY(IVs<3#` zZNf|S^}ADfU2h`D%Sg_mV`D#ZSzxTil1L@G+h69KAwS>lVg9}I^_297P46|Pj2G)Wz-kCGd$-os&IShp z-l$6s%YBm&6W=@DUu@VKT&UZwIic{PQLe7GnkfZ&gy2c^RoR}T>H<3lgYHmiQZb8N zwPSxAOVoonC{-}^H+oU~x$6xk3|uZ^_Pc?lbsguT6C5gJNL@ExDa`sRjTSIDAM$kdBi7Ny`&1EWel>n!O0jjChUpvtr z;fe?syOV;NZws(cQ9X#QN7s9fzkU7cCWOPP_Z3vQV@mcMCimAMe-ssDy-RDhJVNP7 z5jm%4N`wNu1>kg|xrgMz)&_>S=rm$8;Z{Eyt@vn$LX%oQ47Ek0L;)|PniR8?@0Xd zxg0Lpoz`EMSDlSzao8O0Pn4mPI7N*DPU6UjZ$N-jsTCRZAFI}1sxj+C&m8d@7@-bm zxb3A1C6?;Di@i8iT6tHxa`1}%?a#K>#?rh#3-_2?48*a3b=gWHPVvKs4`A-#{Ap$A zfxyUENu}1Q#@9pLM(pZv0gJ`pRak|Ok9ouGi#1(9S=AYeh3cxUFzgD%(p71Ip8pMv z@JDg*)1YF75x_VySWVNu7DO2bxs}U4n-{G&mH-hS;Oz~xNrpKsRRcDFHF6$l^%!oz zK>s7?&=)yCspvff3>7OJ4SSb63y$}%VDxm_E7c#J;Ecs?A$rP1M^l{dwuTZ}^k?Br zIO+!XJI&n_hIE2388UOVnIx#myc1!0+ zS^p+28==FCEKrE=cdkwP=H1yJl=V~SpS|&4NLpfMdlB4azp+PB$#!yIq4ulJbZS+ zG`qx~jry%LTG$5@Y~>AFZsFbU1S;J_Py;EOq5NFq29}qXLEwahgarK^vJ?v}2s zV*aP`;6?C_rfft*J!c?x&uzo5&x`A5vD?WFQdWa=9oMnJn}d zz9+Qs-oEB535G}$@gT_ZAdLI>tscRxV`E`bQ!nl<+detH=i$-i(JV6VkaDt|835}V zXlv9o5p#39953U666!zRtLGOW@<|1PAtg`Cr0tG0qN-)6U5e(@Zx9CFGn(;>m-qkq zgX@IAUHFH3z0hHfPHe-F_r%jb2hM9b%bO65h>$Q{^#K|%YbtZT*NKK@g3GG;=zMpv zRIEYZ1RBf%NmbZ59COw=AX@{Rxxr!eSbs5Cd^V zP(;L|d09R@%NGZ6SzB_{aRA5;s(xO`JiC+>ywJpMvX69}djGDXKq4MKCnr05Y#+D# z@86(K1_BG28&p{QUy(?9dB=`%R%%t7lAi2mnDrqUXEJ@DlTqpB>;tf`N+4WIGrS*f2m0B2}%g z_VY88kpaoQQD{`kUkhSCZ362U*lxZVhy-@e0Sr&R>cK9~+}vbwZmH=Jb>OGbtbF01?0&{FcQoKU~jN)Pz^qjzB;b>E3s5uA6 zr@pHNBRWBDgO>^_RnAWp=}%%c{OpKc+lwmF?hDs85&0phzJBta>mhE61;9ap0%F$J z(-RX#b96Is))j=CN(XqMII#-PSE6kh5`(AHWzoH3a7ZO6f%SJU5by`y2}Ihh?ONQ7 z3Ko8K=fNt=l&aVp9k@8SgZ%9&9!F0{e@b$HvbC~$V+qp3T=yRJo0D6@NCKtM9w+er z-nreBz+P&#GyakI)glQc<@k92K4@fKDl|!}!-M4l3_O*Bqz+2|qN6K{DI5j2E-AHM z*pAuQ?-aQ|DxB`mCmy_{)aq*I>&a2XdGu~97K%b{oh1@C;G-xcZD=@ zF>6q2TH$E1v1J;=9Ufu^=b9GNBgP8Nox&N9Lw@9D;+*( ze4mz1MkJ36lip|CbhDQF8A~0BCi4SwPM-R!&(JGAN^6&gRIoccH>fNqS!+m#ADn`7 zD5A#3uM6U)%)gzc0*e<$N4rAzCK&X~xJ{2@rdxEh1At|C4Axf!Zd?xMAmG;FfIRxi zVr72DCoC&AI+lo-7~uow{(VQDk$3RFLar>?i`k_$9e4_lxiwZagoHW;eNiTchuf=a zYuV304$%z|TCvT|UyM-;V8SM6dTu<+!b>-@=j@7#}WoW-83Xbg~AOuTR>JK-KoT*y`j356=?FW2`cn z``Ak>!fM3myqg|bptxjKFIOubGZ4qztP6yEyJFLY8pNEJqMk78BW-s`iXc2+p~B|j zrY!5|4a}U`YsB%y2QLoWom%I;O|z6w^=6OzA#E_|)C$bbo$;Wv$Lnq}Gms^Pi+2x> zwDpclDWI#gEd(ZgoGqRj7mCk{lp6+5HUk#wY|Z%mHWKCnzfN^7r~en`sYQ#|01vO{b)F+45)ZV z$Y>uv+%UY*fivtAYx9KrJQRs6*&&D?7*jor_{+!eH2vhYn>v^l{7C}nV;Eu)P@hfF z5-6&%7>&wxm+;PY329zQe&kUs&$a>0Ya(Q5SIOksu}I`39^1_|FGOWxY4IZnxTcc% zAMy^sD zeR-Mpqv-PCki&FwzQOUbKc2~Or&RlEN1e@~7V#=mp4=KGT3JJbGk}0g3x(pPQjAo50z67OTF)^BIHb|*=KQyo4l@=TTun|sro%{` zD_`VHVk4+kGJHGYrV5R0A-C6`E$SmJ##0p>{uw~wSt*U^Ld0b>9Vrzq;x?mEsPrvh zZ8)&&(^w5>x87@kH(UowyYMV*=b-pNzr)30-y2(Juh1d@yqk|8m%CZnQcA5>_w53< z;owIgnqbHU2+TmK_Z^>;I@L|vdwG0@vgYqjGl&Mf2%*5y9UhG<)=kMZjTx*l)jt9vFaxb z0&U=wD&`)I`CttK?nc+4H^hQnKn<&fpx!n6OgpDgJs-6M|7Aam5SiE?JR;bmx%v71 zPVw=FKF}DnfLr_cu)4YmbQwFT>+`*-C@QtW?|smn_~AI6h}RI?`yV-MP@KgC`lNQl z;NExv>j>B%GRUW$H~pR}!WeXun;1xT%cQ-p#*Re&EkksqIc%P+{E92*_o ziou~dyIu~Yr3J@jv$@NIrF!#&i8Q}LlafW}J9u0ZnjHcrV+>VPzqhW|htNx#ZLeTp zH1^#h$UB9B<^=%*9j#bp^fpI1Kl0Cv2v5nW4uB{p1gP*cOU3fQir7*LZZE1sC;^QLtrNDr8u7iB+>y^h*Pp> zm-xtrLF#UlFeuzcWer5|P2GPb#f)VEc;HZCof}2|_8v$R+B7ENZwpO*#GtBkx`+&_ znu?^t%91p9!!pnvYUE$h&;Z!!L{9U2oUAS*Av$c*Hho!=UW)EA5q0Md`41mL!0;(U zox{ZkCdbR&u}ot}>Mj70IXS)UocHnZ(Sr;Si*Wye2nVO0_zMz}_FfF9HjI##6bVh` z7XdBAiT6h_8k+k+SDBa1!Gm+7Y%9Aco56~YCMHM6zdA57fcM1b)JS`dn3Ys-Ce$OY z>QHaEn9jmrN_rR!ywaaOJSLbHJvcd!9P&@tZVv-0u?m>1v^n6gaOZ*8z&_$el0ba5 z3&y*21{3eLN7`!2G6^6QZRnB!-P>|>*Hiu*sr_`7#;IUDaJ}1Jxx9of@hjD*k5^CT zrF|6>8owj)?w=(h-5nt`HS4K`br#k|TOyvs=Ji($ zH2*mgx{)7N1N;V~O|}Y=I5D+Zt^#UmM>DdzsPDoMc)d$(26};=Q7V=m$CK>aUMrh6 z4x)X*taYWyBFJbM>*|U-utvc_ofs&5nfOUw0#q{;jdt$@TzFsn%qpQOBq;4QyVH@~_{m5PFrEs@4_fHM7ELo+9$_bl23B=^i^$Y7PalwKtg;#LLmmm)(Uk$IPNPEYdk$X{3nwaC3MNN8p7po_&%e zh$eHET9EcTGx(rBBBx)B>It0h_yrNM=3TokslZ08g@^1yw5%j7jDE2H%UOSqiTqo3 zbTCqr?NA{o!28f?%1eyV&`IPC=JEyefH^Xr&AC*NLMdm8%SrDE7#^TDe&khVW=7W6 zyQc>MOO4R?91GN!FWXc&sz};_Tw08HTIXQhlDh^TU|cSX*B*#Z#!AdT&w16VXSn~0 z8SP6zKde+gG&-+NcD&kOlurEv>5m2uT@rB>q_RIg@q*dDVPwb0eKK(tE3?3 z^>i>-HCX_n6?fiFTi`)XKl7(_fM_Xm%Vj7Z{#!Uut>&#z)UU8e>la^nBcJS4~!bF7_IfqB6m8YapgXzfEyIs$!1?l?*?6FK`lZCB@hLE?u?U z-tWg$k!nlB@43P+RbVGg{e=d$XXc*lWIMWDHc(S@)xC0cj4V=a+vFj5k7&#C<65L2 zjBNa~0(l#y8rLBdQWwbw!EzxrX3<&Sif_`=(IqgLt`y_FWL=?Dv67BvvRl}Vxc*3I zgakX8Z5{>;_TMY=J%h$!eGc#Q3sX{xT_2B2w@D{TWSXmp%G8+KEU?o!u~G&R$40LNLTB zjGPLi{U}nN%sO&A-P{C5o4HwL9lLfjS1U?8gd|(QyJl!$aLNPZJB>D6dMg1h z$pnUKQcps2!OCBj4&3qOwRjP35U%$(@02)S?wLC&b2d>v!zqA!2u*8$xU;=InZ`g} zJz5pQsz=?KiIFnqph)u%bmS8bNv$f6%QY{#pQ;DqryV3HwtNhIx6h5vuI(PT)#|SYUs)(q|6!qZrDt} zZ)6iVU!rKr)m;vU>6L0673gRunCA*i962IhooEV2fOgeFB~BDxC>Ey3!t7@uOqvT* zM9R^AQi*@s?SbCwo=*_Bn)md}`-0zk`L4uft#2Sg5$M)kgh&-^LC808X{r6w4Wmj2oV?McK?SMd?9oA=kRPGaI2?$LifwGfW` zGXUNm+0?yKzV>~LTv>Pu=qOh6x}AyHnU(Ek+$g%Lc1<@0ZQ@vfJ;+<)=!rTtx; z?6LnZcOvsMGMh)Hfd-~386g`LCrkL>OP^XS4ct!|l1<<9^QgUTsao zfzA}=!(jhwR+Gc}r{80&bs!mp{&{xYr>oE6u+l ztcJ3+g*`k}oKN68`J5vE`VAhWd%KUBYaM^p+<@nc0ZZ8aE$6Glz5W;m8@tDCTUUm# z0j!AWJK+#bG6?X`F~RLOh(HIsn+JCU1Emk87-QXTZnlyt?CX7U>U)7)qiB%p zZ0e0rA3jTmNH;bPnJ(6r==Gf5L%o&2U=dC|-B8mv4LzYmQPmh27_@rFw15vebI|hp4)o49 zzov%6O;=i<-C7$~nk*%7+P^J>A^$PY>v^%m@JZ$NTz@oOrA{ZKeV@<6*J!S0>bife z)5oyhZg<=VaOA%iNq?DDNr>+Xz?`XC`b-u8D*GY<(FOB6L^B))McYJ+dDy5z(VQQH zOOOS0>gI9%uI%Cz%Nz$xrHxFDlvO0IV8M}NT?$oY=EFNwry1hlLdB9jpU`JE{Iu%lJaV`(+jl4Gr_) zAY*0iOuUh3{)4AI&zW!I!S6d);3^f1_j|2=5gu_QWxGW;1k;2!s(X_9x^Vm`&tu z!SKEHfw#0Kk;NAR?c8yLpmgP#no}wI9fFe7zS!BVmn&G%3w6mTC127X%Q$nm9Us2gpDCLSw4S&G_S~)@ zOeWXEeNa2caRn<9GvP%{fWjK?mGMBiv$93|| z$7|ddbs?c&b3M%odd-Jk+^=_PNY0?r_i@VW9FtyPso>tvX@RGA(b?x6SZJ5gY=-Vx8mEk*x_j>GcWZtUJ`(0gwTA zQ`!M0)dF`u>j(-8eQ@=EpAq<*UsSX#)S|7m^+$p7;#fwURi)mH!wG&>4|1180=@ac z?)P00%uh?A2ccr%iPcD$CA+atnd4-G@mT^_ajDim%u1{h7!}Q{sB!kj4UYw@kmJO| zH5A7?K;uEQx&dfMwM==wsFvOft|-W*Fc4%iAA-^rb560>iGs}#4R~P)9bM- z+oIN+FRuw_Pf&5l9a{1Ql{?RclT2Yb|HACV*=CG?Q3+nkU;}x z640+N1pdVjmyAzLI$|DVquJue&H%&FMX-QJP}F|7 zPUNbiR;kZ^zBJ8OZL7xW(V}wgD^Svi)Ji%mYDeGYV(ufNHU>LNKkMfp8I04VTlMaFAv0(0~yfN;;9lvpMU^AebQi? z&Ek4_yayTaBip+Nwk=mJPU+q9dWQ?K7nd7(Ra!Hxqx4|S)?vAidLr#4e3|!z=E}6L z)WHqqg1Q*^h$ z@5rqWL=6oX51wZDp)BOg_N!I57n5tW{uyDZnq;5^lW7Khn*lQZ55DJl_s*%}nH{W} z!dEm;(*Bq(KG%5~n1-&rAD%D!qib{yglk2!8^jxs-JV&ILot? zcYl+}eIXuB8*)p$JIxl8P3rn2M|NIRb}RhU!}At(85a>%9lST(h)IfOH7bo%fn7%* zS5BFm{$RYc)9>^;<#InG2#<%vn|cu+f?hoTm1=*m6rLAxm)vL(bGQv zcDYOV_V1IT_W}~*`9CDTd8PjRs~a(r+rMv8e>{SKIkLTLXMTgN5{@gWrIj8LF`PtS%_nG z=Sp?09ksUnhA~~NcFnO*;ysudVtqgZLQv9?CQMWb3TU-ENMc3LH?ck zYw>XNuit=HnNGsWI&FQ7w4*KsXsLUn!+#iRrRh?Zg(zFW;z8iy_P76Uism$jZSlF^&xmNxJhi0DQYsx;KsrwhM7 z3P}^z9gLr-RB^<@io4jGL?e@7l};4^OSSXi**)+!%fLoxX!k~PSl^a2A^^u{v9#t4 zKcM8QHaKWIwFd_y&D_M-SPp#L-sp=e4MU}n6Z23QR9=|dk}prc}?yGm27$-Ju`Dn#ba2>6Y!$VoXx=!Q955 zjWWY2lQ18d=Z|oi<0=ON+vRC=ZsuU3l2MB;Go-Q6<$W!&WPGvX)F7A=7oGXaF6@s@ zW^TCVc>(Nk2a^joHAO{M2sq5oF!8;~!kw8kFC&Yy&4J})b^cs9SXjr){g_nP$dvaD z^t!!-9OBWmDKjcD!N;84)@GpTs5M=p+4Zd3fBc9CSphx(P%1B$>uZ*3^&})%Yaf7% z0H~y;5^>C6&`1h=bfA5ian|Yqd$v`_WHQPMW)9XmcUM#6)A>(U!P`2REVvuuc_=qu z^Bf)?2L67`XMXlbp6$`AH>+1>=5&t9-QC&XxCOdwniIJZV8$Ao$s*h;kZdQp0aPp;CVjSJFz{b3=~3Px>x7%KMLK<%nH(v(9O8LOpF6ld0oAJg!)8D^ z0X_jtO|6iib2OW#XGBEA%u5CNZ5K5RRx>wjQkB_qiXZvm7;5EuArE&hbd96c=4&5l z4(BTXUvCN&86tOCn*$qOZZa8S37pou+aYZhV&Di8oJ}K3Wti7X`KT|VicGg~b8~ZjM1AQIR7#i2Dg3}v7;c;~`~X4#FT7_;wIjr;8E>!lqQH8QuTa__ z$MaO;CEQqVFG2kF`G#*)n-nwZj-;9k1}haD1_lZWA*RLlFy7I5k*vXZwU35>RaBJX z!azJ**{p22p7c$l-HBY;op=oSL>K&pQp|quU5sr~qw|Cy8H(w2@#73blGV;=4p+|O z{A61jei5?pBRXH(Em`XIr8{<9~v1cnS*>XkCEcGkAKiww8t_2jc`GwBy@gzDFc}BO zwcFMJhDO5P7sg+9sJT{@jdkom!J>6vb-->BRbL)1bdC1XTknpGm19Pdn;gtm%$6I= zRexRCoyeV;nd!+jU+e7cGJAbdVqE4=@}GMn$pKn^pxHo4qKPh`-fG99Y?DWH9%%Dl z!3x2L(l_W3>gs|!eCC;~0CCg(b_2?O9k z?$tAOJ(#_SV=)!0SFUnVIZudN_#G%`Oi=bZs66-GN?U z=iMEzrPmMKpV6M!mQHiH+$Z|QkohtO6%$qep6*RFYHw5$&(c6&-xp%7;ZIW@u;>a3 z3Tzy;aZ^Y_R#-u~z(izQvY)P20m-fwOIw1eiyUBG9EKbF|sb zcJw>#$7JA4m=<`RM&6L`d0$wb(|Cueq1Xt!c!c)YwE+sCev{-v`a3!IjQ3zud&lGA zv^EIp17Lo*;8j=~1k0(I#@Se#xRXQw0f%j+$pU+_t7}i{-4*WkNZFS0m6B&z$Z38- zK|#jG(u<~X+6l|xZ3noTIdGp)%4Zjc zhp06;5Qz@i)eE$5$6ct&QuWHwiI0=~t;ml97-S(I3q|`ug+)QN*K@Od~Ma@_NEya&O6b%JV{9ckx4kVtH9OI7s|l?``+&xO4$GYt2F;lWw?9N**#bg<>htP9GQb4-YDSuy*_<$AR89) zr~9jWht=3Xe{WiRi|W2^+hy#BxmW95t63$o50>kzYhBQT1705Oc*{w{Fed}5fEapm zUmksCqw*(Y4tCpWdI?yGp7|Be#kmmSghBVt6>@a3rMw=hPvVy4Sjo2|F%WFVOP-9% zkPg6V+Ou>fnmM{aZfU}cl?MC0)-Y@ouTfvkqDLpPZHCAUSQma6`u=D+sVSff)7jgX z&_AiF#7fJByEQ-RXgcBq@~y^o<{>z+FeXq=z_h;MN>A`>$c_k~S*!2#vpG)7`Zbrf zOD`^$;W=fRJ(609s3#p3s^+lw7Y!NwtVD-YMclp6C^;j=*Pl^lxG7pFL`(Y$)Snb7 ze3RktV=LNxeX?}gJNEM`4|O|S9ZX{d>@-}H?~RYf@v>+<5^`FpU^i-)isO|j+nUce z>|EdYd3DJ8xMGMVkRn33!Udxt%B)`SIPkuIzLBiI-zN^iurxUVQk0XDliNmpZln-r zNKz05H!nZGmg~sx_Gke+*R&mrWW}DO*!T@%2m*@*+@_ByFvD!Z4uk55;m#_yLMvoF zZRxA?DZ4XLEyufh?3w1!`nzXeF<*40*fRYA+|)r32h5p~mZNPX`iv@}64~2@@HnYi-_Gd@@gch1sdkJCci4pbDpDjmC$1}8f zc6D)RI9vheO1(qu`pp|_9ZM*Ol|jeRFUo8tdCSR{^&gzXcFIY!ojxo<(&w$Q&&h1| z%^`A1jHme`X@i-NB?0lw;-S{LHU46e4guEy3ciKn)~IB!wz-K=@u)1d-cl)UiCR!S z=;Qo}m~sjV_}!P30G|%MWzU|KFlo_a{!P9n;}KyN@lxCZ(I#CbTfS5hm7rPRXiZyc zzrO&-CM%eJJmZ%F@^cKE#qSW|OHs_)29I#){3I>SkL_A*XBfnvEuoSQ<(M>@Rq*(z zp0>W`wi?e+t4fwB-^u@7BC)}5cMxtbnGx~v)e&pysB3LW_t=fL%(aa8y zLlS?U>`lc_k3rGdq9i6NDo(Asn-8KAEJQ52g*(l+f(ntUbiesGcN}Ac(oSlAY>p6O z1@`@(pFR7&64=xF>(%hW=DhdlkHS~`Tvr=!_IzKr$#i{C(Dy#mjFnsv7x9*QPrE) z8O*3|>!3=?odME+v$qTyf=SH&bPCDhpK0YmV^8*g7Fa=#OX2j|qQf4CxLOrm?T8rv z0^RBztASLJR+WvDvf+8?E2CG+P^uJVGI4USy~Ax}Fz$IiWwb;hAJi<#B%{n>c>j^g zXq%CGx^D+G0XRLWGG?!&M3nTBV-h3QG}EVe@R)9y$HC2dRu|U&`&M9-$DY;-s8pWKsIq zqz|Eavdia$?=imzol6VDjOzL6x0tKdo8&I`%#9YG409sO9PI*4LQnVMLqm(AfjyPk zk9AiQ?`Q=s9<6&w^#s0Dm8A9vRJL!Xk4dgK?yMltE-B=;hbQA{cOw%bygx%lqBgSt z^~rP+1TWc9ZAxh|U5DLWzGXgp1@uldo7B3Zhi-wZqRn-WZ8dRLMcWs2KDA!j;?Lf@ zr^$wiYKJ#SIXTUA?vdZ3NHE?Q-Iz`FzO!nqGjVeQ&cIV;7Ht-dhvVZX z5oNUZPJDgDik5gNF)fLovek0)IPj<>wQ`9~fj=Zd-Yw$Yk}cJ<$L7n&H= z^AG~j?8f_;j^)qP>Xka!^<_^s`r?c2QeC=pVus~M>)x}Mq5{S*Fj)xS=9*ZXWpL2Y zuG@7vxJImyB28r>BqYT7QgC;@`LjF`zM;*KA7?fO1A5AEwN zSo*g_WY0~km&ki)&vSw!qyydEDH5`gB33NfN(jY9-&<)ql^1E`$byJi;`@wH{=BwF z_R_{`1#0UFo|fw9TubTm26{6eP5Hq8?Ho}3J-*a5@u0D(F?n;}j-qg4aS<6gqW{I< z^h$X~OK^5mY!znBn^&k{o{dAByL#wltI>*F%l34=pJbCmgWl)kiu!bT!l)C+z^7Z<-@zFBvX zrB^65roKbAYSd~p{1&r(dN_VfXMzyv?Hdmv$nx!=F-Rz(Elul7{ckFNqHtzS=2VGD z-nCeDc7rnDJW$TO;sL&2d~d3>g6_jp$#eYC;%61{3GS!eLf5nuRc{^d*)n3#-}Hwm z6;l}rS|Wo*4+Ga1j6hC(h-aA*1K7w(rzg(h#c%De6^TRl39 z$P2u~S0z#B3X;&y!f2<%TF#vgZBQE744NJ}959CE7d~g~6J0D?j*$Dp;d1cWvvQg~ zc{JSt4KJ#OhI)H^`3tC~paa<2alX`{m0F!jEab1TGDABPtf^a;8D3Ass3Qm}I)u`i zwmUv^a@$N&_OOUp5wjo$t)n(*?3YHA&zWYDl%dn80(KXL#7SVe$X2N|YE6jgh-KHM zb{t%j7uLRXa9ABWxx5u^C(Y7dJ9&$0gkBkm=_~jqtrVR%W*K){Gb-Sg*QflZvE z)2y4*s-*quaQpsxl9<^*#!?r;?utho8TOH`G98@i_`CBxPB2d3#WGBQxNf`9Qs=sPlV_;*uuZ|fpLzdaq< zZyx+5C(-MCWMVdHjQJf9i5|XuTBm1VV9+bN&Fi?Jk^Mw?X0vGqw&%gYdhYpxq9Tj2&3jJZ`mUhcquv;g zxnUnb>?FCMDEMxPO{FJ$V;33x^)tQ00(HQGB&L60x3tggDgkq178~FB+DDjU&soRp zJEMwe5{j+4fg3}Ub0Vu81v7fp92kFqfoWrEo!(=I(HxpozqHb>8 z+j@Ew-pRe8mJS#9Slo^Z)j%HXx>a9*1%)2_4ZfZ|vLMC&;eT@s;<~)AUBmv{-g=1V z>5uX6*28~3-(33l^Nmw927}4gDow0UN2+GSN$qJj3=C+3aZ3!?4_njsWj#|JH>x8z zvCD$+|8Y2KAYY|V;40;g9!1&HkIgmro=tJQNCu13&l%3^== z*Q>$%XEH91!U_ADfQ{{=CcQn1D5{GwqXx4b+E67b>!CnN?u_H}nqK<`Q?lX(Jwypp z6a()!DsUJby}w-L>Dh7uv$1v|OA8Idc~G1Hb%x)5P`CPlIJxKG+60f?Z=f{&k=*zU z1kXryMU=$UbW_O&;)OcvmQ6=^TXxgpk%slzPtSG3?pkOuphKuxXvyxjgKYncVSv_ai}>I%!R_9fg95`ECB;`p3oT{nKW zPjPwaK(Pz!&)x3U)eqxEAp6tWG9rZ2i|0F>?7}cjlfZaL(KB~f0fvulJ&)b2Bm{)@ zaY#8MWH@7^4 z73^UV0{)8VIds>{I=7v5Cc-I|Kv3d)@^()^OKWAkdK}e^a9C8yLj^1jP(5WRb0%}0TbuZ_L!7d? zjCNvB&5V?7UdHPS5SnU~dsx*oM?)8P{?c_C+KPl}`pars<9jW9P`U*8rK8dEGjwAsBc*1ufy?UK{n@%+fQY&r&Gw@GOJQiFp)ywOl!w?)QG`S;R_t$5ZAkFlXR{4Pnkn`9M6(;gumN&D&kEa_mcT-@R{E$r%ym9N z)(+&976>LMJKIoEG?xWTY@oWFZ`eu*f+0uzjq+p(9E*G!^-NP#Seh)kfUTPA6?|G~ zlS93(c}&dzs_U^xLfs6lu=jP3tvMUm$aMA(gYF1O%F@ZLjQj-0@8sBHS)&jz9MJgu z!otD>BqvpjN?zEgR$SuIi;rbtq5qu|ve~*fwu-|ku%G;m5_3>Pl$U&ZGz|2}3PC+OkoAb+mn*>jPo^A6#+orT;8F_gM<4-!elwhyJ9cE>1s zO6=!1KHhw=BINwS%nUh~@Xcds{gH78S*WL>{M%Px1Sa2eF!wEij*R?VU)7u!PdFE^ zlTFieYC8BR@W_SS|Ii#wiD8cv6KY|{NJxHBz9b%@)=jlwwxON#{AJx8Si%qLdli|y z{lN``#vpF+I=odaB!<1f?fue+sI07r7)=o=d)jhJ_ z?1=f532AN4WeMGGKDft4R^!KUe2xa4@fK65GH%-}d7&CvK|w*hk3)@Ly?T`%PM6}b z(`M5Ag4*pitGhG!o1feg1>KL3;$;|dDn&TNfZ`DH0>NxKm{awS_aRT?lr?f|tJv6U z7~Ta>%(fM`v(!vJwC0C1Up7pGlbA4H)m z6HnY@3?)3hesW3r-2LyWUpNp{iQJ}xb91>#TkRbf<8 z^k*HGhaF6fe@YSFjVT6P=!ez9~y!)RZw>A^()t9!JsZI+y+<*YQYKK zLaGH8jRG|zlg5rXNCPUQAw>fgz)lQh&%hY>1j0@evtTbMg1<_q%hhbuE_GBL*o z?WDWtVx&^0BjgP#TsE3;aoA35&)IfhqXmWCLHB8_54NHq8*}O6#g5Oc`M`j>j8`8e zx$QgE*w-05l%L$k7?3RL>@gjZ; zW9Lv++T~!iBHRWG%~Zi01WzfAS>^llmn#+fR8kR<_mjgE2WaBsLn%|LjRHvE+dLGs zkKxKpxr0VJCCHF+f4a?Dp*Y)tcXOHDD3;y0sJR(Qr7kZb=Nml~wuDZT+c6)4LQf%8 zI{N8{E9u3LaVfY8fSPiPM#k1YBTmap*g5f;FPsrrn;g~(=6emfMt*n7fq|V^y{ge6 znV2ylxG-1dw8-T!%#od@BYWTziIYenBAvjMiKWr`5kxtHp+;HIdI5l027@^hNuoiK z!a*dQY=}7Rt)xLTTJFoET<~YvlrS7_n_aC&KsH<*w z>uv|#qdVXhy0qF`S;Lchn4laI60*RaMV*`oj;VW?@=aH27Q*Y7FNe6M9xP?igDlL& zF@iRq=A)Tv8bH*{ zhfBI2?RX9R4YmI{hz8XJNh+Ql)c8@Yk|G%~&a4X@!q5#{NsND9r$wqNXYwRaCDu)eky$Ft&H=+F1a}W7Y@kD zk#TUXl~%;+qYr+kM~yS?#b9iNy1i3jQt8cp^43w?9POZd?B((CQ$bGN!O{AvrB-2c zFstQ8xFlo9EoaPPY4Y_HrpbEw;|KTd1ihmW%3+WnZsGdYoc?`xRX2ezBE#MAXYJ%> zC;OVy?xW_=MyWWi)Uy*-<7zb0TO#bZ*dKVDZL|3CrA(cT)a)>c1A-sOs22JeuXzlT zXlzmSc*xVGwG>0_GeVReu`!mTvFz@$^t@&{CSkCyZvNIeOC41`Ii*+M-GXFqzBvm4 zrnQy0)&R2#Uc38jj~*QiKVMBNKIHQ`aQ5nU5me{zJQ*>`M^YY)&Gk(_HT2nx@FPBE zsy%X-BWi!S*HrEQC#*!kPVmCF1kauTW6^2EZaq@_^Tf&NS+&>1u60BGRwl1FTL1Xd zBZ;sG0XuOK)+KesZHXGa@nH~lQ%?3O{Z%0#i7 zUy7l@^I$yEJF?`Yjm+w$o80g22$b}f*-Snaxi!Orzj8wFnaU`lVx`=urgmcd(;9nu z_IQoxYfKLa9PG7H?tx_ikp(-q}`rB$fGCa=M&*Soyl^Oqy$zo8#wL6tcH5MQAI!cxbb9zHeu~ z`zf! zd+Xt{cPhuSqAfQ)M^pOAiScR0aMztPvOGBKdU^@`r32^kJ$jSW!^X6#?%Lt~KIA_t zJXy`EG{DW9*wik2M6$lKob5m_>izy`%H?9ocz91%Y!8LLkLU-Vn93U5n_vh5ju7p|z4OK~DloQ<57}G~d#i}ghONM@P|B@5Dr#FxasL73 z2g%RU!90s_v+*%u4T5~!G;|9u*b3>8107xI@04B}%1)+=&lftn7+70R%)~75Ife-| zy%BsS(lXsD^dqfPvB-9{7sVx(l}PH?YNMj&+b!0*1uxaM%D?892l_?v25=nhEO!iM z`S;CAx{DQF^Qz7$ zqgH1w8^vKYDrtOf7fIj3(A&CX2PuQUD4*xD7-EH0m4QyPg-4JD=!$-|cN1b)_SW zjCR{9SF8L)**QSeDUrhKfN5a6+qh;^-Jf+gprlzbT)lyJ$K21vR$x$?Z zgjup#zrt{7gRCNjlB{z1SbqB=Tfy?tNd+23qVxms`BSw+dIV*=_HDudo z32o_MDx}6R!9qYi7x9vijo{OkR?|9ai!yPE(#Xi7Av-!&#nll()v6}l*|j!?rG56H zqp9nP?jtYz4tH%Ijq5tz7K$Q0+I#ZWdkelk)$kY|03*x%>R(0TpLS4 zGch*zLxEKVEz-Z-H)BdiH z_GNyZw7LeNdbz-p{w1$fR7#ce!5+y@tz3J}%TAALzTBg77GsC|E%H~G)Qw+SVAL=5 zq^SsRaOA8`o4;IN7hQKo^oV2fr{7eM@{?H~rmoNpeW&F?o!KQdokc1(>W~fT8nipo zbsj7YZcYAT=^+*prrvhc8@=$}N9uLBZLvdQJ-o1yc)jPXY_})mvOgn zI>cQh9(D|Q?V9!UX1;z~{H)K%wHvEx-amuWDE!+taMz1p9++Bpy>nB*QQ2A@SFrMl zbS+E?2q1ZlI#~0$9e@ASG_?wgHhzt=W*9d;i0DEdZzpx0T&#KMr3| z4C8(|>A?MW@0g~B26@7F)E@Fpj-qSEM-wcxt!AGuOkEC#9ks9iA%#`YhkSkBV3!d2 zREh_e?Pfx*x)d2|E2+&b>UQc{Dm^$_jtNJRJK*kKw+_*l;8Z3j-WHVR_HmS`b59UL zSLiH<_im!A54S($=Y{#O(~Od{K3j^IMYXyF;ZssRM#B z0-f)9Hd_)0$_VlzGOlo5scV={ptk5Glp|b#p{FzccvCZ5_!y=x+fX*2P`89EEy}Z+ zmFnc!Exd}z$ns5*#cJ~L&0j>y$FBFn41TRGs`eF4pt@L_2gm59=fk8N80gCSRC&#; zR2Sd-_Vih~=WFuKhb)D=)k^2r;g60s%_}Npx@1~}RrHQ3C?RehH|Xv<1xZFqz-w5x zspLR1M#?j1iu6_}YZG|c09$5&MY%`}mv-)MTinXBRI>)>+4U#rv$Zt5GEULS2RSd(}q2>*YZt@y5qK zSA9Q)OGVaUro^W)$L~@rgLiW0g$l zBR(*onhc@Bd=>0?EG3uKcO;b~9lxhMZ|P^bx;3BX6`)@4`yip(L0#iZvhF7Q9$pss zOc?qDK8F*MHJ9jq==um;SEg(VYi zv)EGi00FWmSwhIG2>Y#mHNHqa$2h+WSx#1qyGTLupz1zw4oLdUo|o#)j0w0M?(a(k zRac)xwrdLJ`o`83(DjC^Ijq(EsC3icEISs)^KdKK`mUK~88__k$#`S1TVIBR+hims zx6N_s_yP84P*dFLe&G>-P+22gc4>2)&}g@VzWJ*}EN!uLo9{2*ie%JbbFa6ilkZ62 zuHKhxCvcB|kT{wum(P7G$Hzx(phJ6;s40QlYK-QNTmygz91i-xdMp{Yje4(D@Tz-@ zxaV{i{)&^kb8W54Qsd-x?UJ%60ANroPu0(>1&dQ zZelJ$kjK6+-W`ZwP?6L;7hhmFcw^vRr-!}Q$X?-z*-&#olV(coQqQOev^+fIkr>U= zslFp>)cT7DTq(g?QIy0cvu}HTU0r#PdQf8wQ!fg2JoZxVDL*2 zkz@G0Rt|G^lf(kK$dp3IKFjM<{st#VMW&V*6c%o;__(;ywU>2haEkA>IRu*%0t@a$3+Sv{f#h2Ag>O_NfLSldGa9Y#p4XM+~X@ z5QmA$52k6!&ze*4b`EgovUkL_%!krb!l_c2BAWA!J0qDDHM)g*(P>TzKZGw1IA$>U zLo;TCm7AN}{_*x?HiVH?RvYg;eDyf#VgS(P)8>%bVKg#<2RAt3VZUq(ogW@MOX@y> z>YB3N45^MrXVwD=LOP9S zc`Ic&i__uB10Mc_-YrXlIiM6GX<`T~PO3MoMf@@sy4dl-g3lzr}0| zk4o;cJN~M9Ggj%kI+o98l9znCe7zE0`s;mXD39T9|f=XOAv59J{O7^<}q&%eFZCvTi{gUKVlOIj9ErD|0Pt^z2J zMa~mMDTywM?>#v77K2@ljbfo`9HCTl)Z-AB4q45~$@%Lt-t9m$m94O?-Q6frFk?{h z940;D+8WUHSMiz4@C!5+=rZ>XsH%EI+%FmqtA6ZRI59T|^R0$rdF)!^0o=?Wpm0mj z>$sxKvF7#JQ2lDxb2Kus_#}ksJJ4&%DAI!Ocl_HL5g=7}65%z>QAU9uN{uoc^$s9u zahhe0qdGrc=74V3!PbP{*Q_!{V zl?f4}((`j_V9Q7sWdim!r6rwr1fY6WAubYrH^BIP?;cba1 ze_=@SS!Wc>vvbPp|7ZaT9LZeq-8xQu_6OJI4YRJ*nNJQq6BVJy?m%COb2qQ81uSxF zm6eOhlIgOtsfCx($25?soo2b> z+3K;nQhiJxL~@hr3bbGn&?!v+dh-rwf??#$nq`doFc?x{jy@KQ{9!SNnFY<-05N2MQLo?=J(VmqOsEvE?t4un-&) zu3$x+zyA();j=k<28ewEO!l>E?c-%wvuv9Wcb3BrN|#jrS!b_U!+VpWgif}(WkN*z zye1{hKU~0!uYUzyp1mb*;W*tC(i8j?8EzND-HY)^O8n{P=(Lh$=?UwnB8{BGazCo} z>29ATSl;w1>2rN3lcV?R1oSFhDI@YpK(vShXCBd;NIvW%i-+E$jXI!p{QDfpNS>E#dS1nVLWSh{8UlkDUVw za_^J#mr&nTg!M|NbsRQfC`YJ4R){?LXIHH6crY;+=N z?dj-;^@)timwo7$vpBqkx3FRVg#o zndULE(=7xH`9|&Zx%>cpcFGIj?Kk4T4yY-t7IW~3O zOYnL=lTXu?0Yb6_)2M-pAxVm^r{3PK;@0I={87a&mtIji66?lBg{!LRA+3L%In#A_ z`6w!03lV)LV~%}|hKoJM)5{#X>?rtL&4E*#e1nNVgDxR`HT-}qbh+GqVRCh~`o+Xs zY_S1l+wuBoAF8L)UoSqdLr3JSVCOAr$ehL<*yVf<*RTEk za9+rDIv7%kg-kf=NAHrH>x+g(Mw0U=l04VR4HeGa`b1Izrv3*1dN+S#U-Z? zVG5?Wvso85XY3bxCPvGP7d}Hr!K3~R`Z}ZbSV96~gd?+No;WW<1d9Mf_C9|6d&(o8 z*G0>5yA6$Ay6Ln!e6KvTlf}&;!~u}Pki3r*vMM5zSCJ4VG+d4u$d*gs9mn9`8?n*fgC5IxM=_f{vZe zaA87N8^+qw#5s9YKOnjvC&Xzs?YWrBy8+w{w%G;Fu`&b$-R{bKhHT&?_qo>@0iMsJ zW2-8)MX!-Ex`nOVK7v`-&C|Y9Rdc`p$m2WF7k^>zcBk%xJU;OQ%wRwFrvc9qdbXB< z-Tf&sT-9uJIJJew<@ewq4&_-4Wt9W>7VUpTC5;L&S~Cf0DK8N@^Zdidu!T#JO6%g zz_PVc(m4!l<~LB_7+=T1;c=aQZf)Jwf?9;)?;g(@#GQF;{j~BD3e8mFg`84Nw@Iiq zqXk}~t_oELE^Ba~lo|rj0y`ZIDYl!SQ4pF*=_vU=@~qWZm3pqbM2zFIal1{}v_MF&_v?U z_8!`Cg-NTVDfq{E{85XEdje%nGGWx2T1i?@2RfGPo(lWp)0OG!4iR3$U1HHnR@*WO z#|a`A2xaklgA-FcUb@WeLpsN6f6&IWVP!MhVR8DFd*1D*ZpE{FaGmM-VkL!`cv3@S z;X*){!mT0*+TMQAm1LX{j!=-G_1Ic_3E?OyIaE4lMP)pF*(H12-Fd#RO7mA@ zlOHT)N42g~2o9F7zJ^{diP^Uzt(2>XLz`*`{h^+p3@VunS|#5Ty=0UO>Ko6Q|9JWV zCE7XWLG{C^Bh+yHK6fY0ozl%|83@<=;nVfiFyg3(7cRVjoawhZv7c~DjI%}#J%=7R zbO2mN;-mp*5#|c#z3hd)qP!S$!=3jjn1e#EaxMVrg`QY3`2(CkSo=RfXiT^*domPe z(tEzEBX^+v#1!R7#%&|{{a8Z(9k_fX!{A*4L?@KJIhG3PUSvLOz1?Ef97+>J)R}tn zSXD|2D#YfVg%_8R8%#HgjhMtr{~Fo}a@(D*_r6AIVrWP;pjPs#dv{`WCc~)XGs*26 zFUT7;Y8?|i&p&*GPoSu#_?s0Z27KhW7 z=IC}t`wq$Y0-25TlfHMYHgT%y{-?S5NlJ-nO_syYQbuk#BxDr z_KMi|VN6!Rt^9z-j|B02X&4%G2vsdj3 zmk*ChmB^{mBxda>C<+y?M0|VsjczMf#SiJ}Sp_IX^(xaih%1bF_yjm@`-+)TT_G86 z2+EQ4Ra24h4lgQ>QeEhy=tV3BzXS#g$?A`sh@o35TiZQ^Oz3M%<8A|E=kpS<{Wnlo z&DpdFsRLFeJ0aU9C`n(NP7A;?ofLmyIo@YiR*I*gub-5UkB=@$swYc6e+QNf2rRVO zX)0y8i{J(|LNcO79O33B;9=?>fKW(_e5{$R^A4c;js8U0fKFHtA?NYbI4$&K*dQP> zhkKwgV9%w4^bBW_FOwend3BWXvxKK+!3&*I&=(YYrk)nN#K+4e=R^Mu%qCR06ve1) z1n4Qq{z3USyNMeDH3BJj7Nk?8uy7)}36kTgEQ8-Ot&vT;u#To&`BGie$mfQ;bSQEq z*<0YY6}(|0AFf1DB}6eR%5Ie6yOEPgTB6JLTdbn~onoUYotAbOQx_7_KrvOgZf-6a z&PX+I23wj?2P>s^@plnnjm73;v;h#m%hJsM zHyl6!-~f`>NWaZdT+BisFMGN3L>|Mm@TkQuL@Pwz@!Ie)`KgtM3zqd3=&Gdmm1TuU zsdBv(dYF34{z)$OQS*|^RSgcSrRRCc2f=GJ-wivV1NJ(_!hvGGw*o6OAaLF{00Afd zQKnm*ZG6RkmTozl)6OS@=1{pfuGZ&gp)YMk?n)zjEmuk00e)KU0j#7K8ab*dZor~$h6omtsuw7P6^`Meaa2tn&sOgc-@HjcfDNFBbu@kao9+#L?mad( z1rK}`K>ULYAZGe`5spfgmWm(`z5VNQA73=id4n9ApqEIwSZjNQQ6S}uhtuY6WJ51D zga(l`cYinxhx@|3@b(b)w5S2a#xKgMnL~FuUy7VuWE9cm<{Hwv3(8GEoI`Tt7*NbWvhFPUdEY| zhqblIS|nedop>*-%Kwuhhx49ix3|LMoz3m`S5{U>Ni`?9|Bv*zP`I;eixUIf!wvbW zSp49Claf;;%qz0pywfzpzl7Jt_gn@q{w#e#TUW7v_|IbO-G5VSCt|MFzySm%0{%>E zeE~^TF_k}}Z!y!K;sh3(>TU)2q*aT^5 zznAB?_91!=*8eT+Jr#JH2ZBvlBn?Ef!##Pr5WQ(BHV{aMfx#_jXwodbZC9Wt83Ngq z#sG0N_{Xo&|r+z z2{*5DZ6|TaG|z*%serSTsQy-Q6eP_ovpiB{5woPu3ta##0g#RrpM{q_B~zyZ(%Wqv z%h}aB>AKZVpdlpV0NU5unt@hu`h;~|>%{_VLJwHC#OETm4s+w`o{;P3DgVhcQ}DZ& zKnE_AM3Ux6jlvfAOqeiRY=LGz&t*AW;Jl7Uhwg|LSgd(-{wg7Jct?9oF(XLeAlUsY z{e6uOi+%vc2M8K5_k=Ho>1S%Blvk=dq99J^TMlGEjbh6}%jGYm1KFLiJPfBin!u2= zJyXvs_D0K{sCFeYoiSyFH$y_+`CLLMnC3>_M4QOuKUVGVvqp zV2_4R5LHvlb&uX^9fKigbQnNYbbe;7i)@eaBVy<;(&huoM!qq_S>^jH({y2CpKe2r z^%L+In$AG88m#|v(QGNIt2zogo-2zC#5x=4&5Z-Q*`{_|Qi@waWVp8EFkGQHfV5v~ z8iv!^I6J>TI(TS5xE3$qx-?YD@bF<*yTzNKQYNMEzw~i~K-g*?cH3Q%@CF??=k(?J z^78*Z*ZpvApg7y0$w(#!5GP*^{Rw-Z{W%~_M=r$%z$ybz-nB$BF<7Xo4#4m@sTX|K zYc*froQD>Gw7K{q?c){g*JTOd3Bq)=S5w|NBL0NRTL_l>llnhP#6xPa@)fT|1GEvQ zN|$;x20{p*uRn_kspVR7jY6;%BtcJK|AD%OtAP~=^+1rkapR%ho;BD%FfA6s^5ZDv zK)N!L1Y-`X&vGBkWIcBw8Kb!QTfr-mJ-kTE3If&B`Q}3#{zS|WNMEfv_E7NUjIY6` z3uV|9ECTw<9ZXM0tN=sA0wj%T4-(F_L^5QL)BglIr-3S*Qel%5w3$q{7fsMCP2_bT zqY7^2ArtaUl$dH*pK6SvUD>Z!6wm`ShN0yj>faOfm}Sl?6pwSYCbX%9ZKw2an7-J(hE zyy*j&5C}uWA|oTAMpDo-+UbcG*p!H3jw|~NL>=-fuM?f?#V~>wK~H)yCJycDuoy_j zS!OjZcnSB;(m-{>R;+-VN+#3QW)u*9l(D;z?q^09VWP|z^lwzBUB(+zWUQNXI*czmU+)kx0R@bCfT zpjnrTfIL!aHxsGxO8Wc~`w%i4&J^O#dz-UWV8MJe$%*aBisPHkIPOQX^rXr~jrDFK zzICF}<-n;jMNgZPlaXl@o0_PR-jc}lo;LY4Iho!EZ1Awk$SXDIV1Uj3}U4 zdd&usV~x2IlV0!z2^?yZ+AR~9kD!zgLO&f(QJN#Tj|?>+D0d$T`u=Gj<}s< zOIp3F$Anxx=ctPcO`8s39hocN|LDT%j4 zI+_i}lZOWL*!3^TtrjUYE8y)zYL<+Uu*iNsk6F8%{y;K2v6`KSjV(`lzNg%AIkJi7 zo;BQsCu@(TAhpQt%c^JwAXt}c6zw*lu z!~)f-%!h)%2~&wk(d*yw@WamKm94$1AD>zk9XQh2}NY=070ztzOIaY zMW(wHl8$GhJix%Si4p3|mDP4wfK^Ll#lt=u&yPhT0Q>mt?)z5*8D=Srw z%fs;kTAtNzPE!ps&}~F{8Ct=60J1grPolj3K3lE3p&X2T{N~`TAsdpGBaw2l^Zv zSiDrWoCIm+Hw}vg#Atl`uw`*44c!1GhQ7?n<|pf&H6DcW=VV<6&8el`=tJM6v?DX> zs7NL=l}?&?;N;3es=u!QgcZG}K|J3iD@(TG2cn;}s$bS6id+?nGr}=T;y!(}4hi%x z+#b(>SU-%gXI7*>WN9CS5C9zWC83dGLrC;rkQfp8!h&$umZ<#V;?pj_$4JK0)%py_ z>;Ecr@K2rlU#1fN=L@j6;f&0Go9plzTS77YxA}FjH|JkRyZ@M}`JZ1Cdwu>JJ-yi9 z=6`PY|5udk|L(DWm_&5%%$e&P63?DMitT@{>i<7i^}o%P{BaP7OMDyq!mUl^cL4MH ztR6viI`;2-7jOQFJ%0JeqyA5@g;%_1HnXU)U)*&a?=JSgk8k}Gblht>LxzWU09C69 zDa;5Zhj|IT!vM;K8pj?i#qHNpfv z01&QpH2=)-_F`)k6EGSr)YJw)=jww~eh;~{w3I3n7YZG|Gu1_o%Vm(HNf8fu>Z^>m zpap1xGi1cX>R%rpcPEJg8C+kD^yW=g5az}`4`ramm5PMjQ93J@CxCnWuvI5I>&^L# zx1D(V5oWI-H0aXwV&D@oI|;5ea1+;E;KapArGoL?wLCdKk8LH-dGQ8vYV^6L^LZ&V zEs+4(^*xm=#?!sNpAqsn0IKx$m#gEXu23E?&&*Up%e+9j6O4^^?VhA+;eG*ayPlq& zlIAg-W{w?XJkyd8uG#$c>T+lmu^Sb z01{YK^jX_yo?e5@qmrDHnzK|zqmI>abYYk|`3Im0A+Q(k_0Ey-g}oW1Du_BrjTA}n zArS%!h7LB4DpDVT3(V{M>uWRhXk6UYX%_3r>1N>NY{3+J7=!79OOcybkfB8_V`W~hvz%$VMexN;VWh zijD^z1>TLAUKx#@HaBDiZJ6zi0yDE})kw$#u>i4^;Yzp7NG1hq%bo(bT~aX9gsS?H z_>lTC8)j9$auf5|z0}5wUf7(4e z2uL{sCY3&eFqj%3aj*;|$t4tH?L9@V7yw5H0$P-QlsF##Rte^qtv@l5Z3 z9Cw_f9_Q3aDOBU&mrFV>KXaFoa?hpXR({Of7quM4WMQRLid-hQ%*b#MDrQ22!jStV zgvx!5WsR`ee(%*EzsK*dT^`#X`|k63e?H&W=k`_TG!E=lwbWqSf z5tVaqDZA8?>j;evAW^QYvB$U&25RgD*xD-J&-z37GSBnLIjw1G98ocPgHbT%>Htt; z?Vcv!tUPv@YLGA+;{2%**O?C9#VX)n%)QMzC|>UP;xe_wMLVGV-@cn1xEsE8`&N4_ z#)|CC7*tJ}QE|wG#xJI-vh#Ez2Ao|;&uu)Ibeo}z{`W*hMS-n04+w7!&w5DbGxxOI zS(KvpogCM-g)ldVKoiP z0AQcH$eQFTB|gb0q6CuQnC={aki7h;S}-#lm0< zbS$DLDQp3on4)snpxtj=zhcUuj+1mUq*F?LCrKizU>jnejEw%JZ0K;iKM~I3LfDXO ze>WD;o$a=i%v)r>M`0^Gsg8Y(xKfMNASi8rv1-zc%53v>vUIUVQ`iRl23uA_#u4n; zaAsIK&cGo|ZZKV|Yw@dNsdQqcA6<=%jvftP9i#e~hne`*)b6s$*F2Aq8)2>w7CUw} zHiM{IV4zmO1fcqlOcj>fAyO}Rbt8)VttUs5jJi2Jb>O`A5jT# z8_=vuAsW23xt8qR(Wo84PKBXtN7fsnpi8Jfu|#pKN!f!^%3_mSTycs+dbeK}_4CN= zQOgH1tt7{07j(Lk0-ZF5@O)b^3>@OP$O6gf6%3@iOMbrpwvVPj(Z$@ zK$Qhvn(p7dxkBRYN80K1?zA+*!%fio(t}5uZvK9(r=DE=lR)59% zMB*`xQB^y>Pw(KjBfoeRZ@1CHaTfjpQaG2>4*x%(5qkTcRfk~i?W0F+MGmc9A0b-8W^0z!aDQmO{ess+v56@?^rkP2H46_zU+`s^J;?R_n`Vr6fR0!H;KG^FIpKEsS6`z2%W#L5B7sY8NbFT zdwn9PnO(70LIS_cGu%*@2MN5Dm1$Vctq$DFVT!z*(T|u3A1*oNT^^pmp2f$YV<8w74Vq<;X zs@~bMuqVlLZEks4;}C2P%5hSfp3LUh`;A*`AOL5?GY4qUUBetm`Fdb9W}t@C(rV|4 zN^I0ioC~7`S#u>_L({WCEy;vXTNPOL{?L}z1Q^?^ zOXDhbSvs;uaVgyZobPzd)>Io7Bo~EDw?R%4JW-iZ^WCz)wxa5A4{ridrxbN<;w#N@ z0-9f?jFO;jO}va&{i(JGJES!jqm_3!w%MEz=r5ycnRqaBfkjI`{S-~Zq2L&Fq}&br zo~(6hTk+Pe14g!E;2hPxB0oD_*HPkHb_DZ|QoOwSA2z~_(*$bh0c7Yxk9w%)Z27so z80WG4`6Y+M^fSl2P6%Lo)M;{y*BKC>#uK_fKDhhtIk2akmlz9y6f-lM6OiDTfEB!&|3>v>lb}!s^rVIldQd# z@#d}ik^*k}#Z1Y84T3$#C6n~AQGES9>Wz-4vN8U9vz6>C!s-sKYWA|pFlv6LBxglmE6)!(;@iKq;Urm zY5C=l^BCy6yUu|ZNNcNRb!#geXH^xhloCCkFh^eMg%4ZPM!PE%o*nts>$=B8^U_jr zI{rTI#A#VgqAs&2GC2Rg?{VrOXjAA2$dzf8wk7 zLd!b;wpJPt@Q727YxnQKV>o{@_p{Z$HC(KQJp}9EvsW=W%4RfwAD!3x43qwgWe(dC zOKhW^bH3B$b7=$*@g)0L+_V| zc}KyotO!gt28!fw(FT(ElZSgvtAyjz-g1dwg%J`e*M>d3AD&yB-gmFjsdly<+@Vx3 z_EnS=7@2DESS=hFdbb%fI`r>)Y<0Oy7m89F!R;bhk^Y&w?TsF*PWmTCDBfxR?ZAmb zq>E+ObC^JQ%gfzlbzQ{qKF5M@P6MEiL+@u31RItM#iHn~%Nd#LguHDY8-F5*2c`C| z(Zt2YS6C~mDCJu|Hs$T@t2tRYZL~YJlsNa;ZQ3IONE(EVt(#(FnV>z7r)&|FpP==Y z_^CukX%%HA@wSFw+)+{R4&Tmd1C=T6ZxU{VJxhy+eeQSZK-Shvv@vZf=~Vw@YE+v& zFVjF7bA3K;G*11K-f{;V*C*Tk-v#mkj%A{Mtf!*uois?Lf4>!AkVK>RC*?DisWCs7 z>6f3VsHhjM-xrEE>bwrtAI&Xnu(7ed5BBH!`oN8i;|rrMv>iAI(9rbs)g3k`8TzHi zK*3%U{-mxpxu>=^RuX%TvZiY^peHo|r{(t4Q=F7!7J$d_0~X%(lFQ5UBlo3oXUBkQ zc^QF#T}P_%_3{1ea=m<`(}#(n{*Y~Gy++8K7WeVxsmo8hQy$I;g?CUUA`tG*(Npnhp&CWBVHeKRpJxg`hIsvUE4bXWwK_2&MmlND1I<$6~9)<(0nU$Ll6 zh%d@?<;8_}nZieeUfX&I@0Uz}meriSkpyw!?yfw%+g}L61nW&adAR3tQga`Uefv-1 zXE+W~TJAKeZn&uMrSpehyyD~0RPNcfW!Yv_u{RpX!SAE80?td@ITxr;Z*N^+EI5cY z(Y9tZj?moZSPVYY6h{q8%#Bf424K(;6PcP;TUhNDv1BGyP&2rkK63{^-goUm;?*Cs z9xvHqRor#AYxW5E*{`i_v{TBLNF@@yxms(Ze*SEu+I}zhA`Xp=i`s7b(t>oMTWV=G zZ#&y&sOnqNr=H!-4+C?Rk-2Iw9d)`gundVfp3Yh#QNJ7#Jj#mPWjwO93HFe@17$~r zjmGp_1DuBm*9A{_N2s^MyZ@-SRh0?z`?YI?uP@Oz`?+Ihy9%>bd`@@T^GQf)jkQ)U z1Qu4ezJLc?Z9-lrenDp}wp^p5nvk=;Defr3RdF$~Dq2PT-9_`16pgZVG<5WhPLIH# zh%_u1&DL2>KE{coIF7}e)W$`q?hU*?d@X$<k!0j3tIQ z1DO0wFnRQ}GE2p#-Uv&eL&KzdSGq z@pxRzJzi9S_-w?AKFk+yfD>Ca=_`nEsnTV1*xz}!2aR()U|l}X-K3}D3(o|e27vb? zdrn^3ON54&CXNR&Zq@k4#K4GrU=3!n+i%tm25%3TAf(jwO=?+CMAJ&d#3c>EgqIH6 z4fYS%33%*yCF08U6oCtYN`99)WzrK;GU`h~_k%ds(dGV(8#nipD7Vw=YO&1)hARqx z_2}Zk@-&aV{)8o{>gw$-HWtco1+D*Ktk*jyL*9PapY<(7R!V(-K~7v=f3tuvrh51d z=NS8#GWDc%?8HV*OBVY*iWi3RrbSaoNa~tNmVfHJEsR>fC^Ykp?G-vqB4wjCDW>AO z&#ObO=a)FeCGQozl^$`sigMjk-TfM3V1UlzC_VmN>Word`SWfJTmarGT_!J36>DA% z5jwn|sBzRrU9|0ZSDW4UMgkQt;gR6HKIX?Khnk#UY;<{jG+G_JYgOqiv%j{C0cD{h0fb8fF@GbyuJ)R_Ilj0aW64 zZ}mx2@pg#3{p5cjm|PCpx;Bj6mk+(|Ib;JitlL}QO`xMjPaW(E8dIJy@qkqA)2EI{ zT1w`{(5vkuFtL#-R170}vS?&k!nOYF3T~*Zy7FabXAWoRjIAww`tWuPtW4hlNx^Z zYc;f;jUGfTI~|@sZ!_Q^c{^NhcCXxdGr=JF9^-OyaN>WF;T60kBrKfo@4<@Xn3QL$ zcX%^{TatvDWR07vf{uT{b?}F6p6&vx9(c%AIL>x zPNJ0_j@IW~0tw=Z~R+q`r+hW4RdoyOlKfN)tZ=vCCK3xfX5J z?>sGVWg#Dlxea*)!MP6*0&SpB4_2r z=mj$=8$%?8@jmr6)}p2v7km&h(aq9zWT(vx6QnLb&0xrG7OrOA1iTwfFSJOxC#`zi z;X=akat7=NOx#`x_RCC7O&KF9D=Uu+1gd@W+n}I$7qB<8Fc}8T>aM~@$fC2F4(C8f z>G?y5kAC$0YR~d?riN(V;OKS4b-_gr_wMnCVgS zveH2q3qHFiW)_HXL2c>uGY3pOw4a(g2d;D&C=YOsXirRVCVFPO@9*e|12oYp86;0| zT|y$})_x&KKL@ z`I`AMMHS0uqRx}buNE4XU-ANd`SzZJNd%sIWC*b`7ROYcRVL;n&E1{{qE^oxog?E@ zLgOTR?;rOPnX9DN9k$aKB2w$s8}yEsVuSUT(Y@sG{K~Z;R^A0gMhTSVx8kJj^hyx0 z5xu+whxOtEAA0;f*of3$5Ni&0g&KAIQyS07k7JjRUWlimVp z_fDeusp8)K_AvNM$Hhidd<`wq4tg!8a*4uQe{HZV;l|75``uHm=s2}Rmq~x7UvvmE zB!g}yAuU^FIQ}|nvE34%pyJ7XJzQ&Jxi5-{5?f_@a4~`jRdGJK$v0#afT_H1KV3a$ zYby}f6&qoqqIz8)>L`sC)Jrzls6k3*N#|Q+6LkY$yLx!3_gN_Th4_Yoii$Cj-qdZM z9TY@bt5-VW9AyBlJ?Q(9>8jVTsxJD<^U{ysPH4h5cN3qe_d?a%GeYP+zHB!OQz!F3AvaydQo$sUFRVMJ1Qiz_Q;ef~3P z^az~Hqa?vzqt}immk0cpTHE3T2)I%OWNknb`J-UmHI^%!T?r;GR7`lkUutmpz|!&u z$#-Lf9z`*cA$dPv-fy*QUTm}|ml=^^OG!)PtA31Kfms|M=Z`9FI)sm5WCN_ytn0i=%i7d@w7B;2(vO{Wi2 z8J&h}ga5pM?>MhFSeHHn0qP(zrY`WwSC-Lw&4EGzTMq+sH)(d2%lf&bj($__cP{Ba zv^r10eYypIDIN&&27Dl*a%#)-SNmC`!;kAf?ghxAL}t*#MV@;FfkQr?t#u&U7^2?T z#~y@cWxhDDaUSUY~HtJ+nnFN8sM^clN$J^w^^Na>Wbx zu*JO}e*N|4Xhb1!7X2h~hU4v#O%n$J+w+uPt=&Q6^me>A!j$0tr1qTiv?X@=WT9^U zb)S%qWlbXC*l^|0wgu(e5MTZWR_GF?C)RD>@>j0frvkcSW{YK5jLjB=lv*5AuHGV|8{aVzWNUoi{5#0v{Mwiw1^b{5(!xi2$4 zPhn+dl=kOH!S<8-^=sn))WpMQ+AGu|U6~>`UN5n=i_miL-GJl7(cdtMqD>IYxUwc+ zQ6T7elU-D0WMu9i?kFsxEjsrAq5kVvwYXoXKw7H@T~ez+xg#ox^Ls6-1@#zQDL$9UZE(MxTR$| zIdS*>e#e|1*PE;TCsN}y&3L46!XW~wV@5Ikh9Tj|mUHGrcNk*46U~MHNqqG$U-_jq zNoafZq|zA`>B&4#=*a4p5-3zZ3-W}+)INdZeSFQAvL>M^1tEp@tG0Sa1DpeATvpuZ zWT^0eU8}D?UvfeA_2IIgGC$_``2oj@ad3iA=lB@MD%SB|FN@sFNCm|4YbEIW!Ar*P zzxMT?`vrdO9!T*&$BKW~K@0@-e=Zk9QyL+0jNE_`q z;{SFMP4(@kBe7hkW+j9p1d5rripzA@f4dmM3~c26{rzjAyy@`@sM!lTgv+LABrD#3 zM+|tC6O)kI{BKuZpuctsN@l_MMGGi7)kRHIR#nkQ4zaehw2+bxXr!e4`@1VyA~?Wi z+va=g@VT%t*SFEr%gV~?`n>dogoK2iesc81BM^2^9PFPndDZ;uoQNWW4@}p3IQm1; zcc9rnBO@cbXkEyHLhVBY~ z=UE`vg5{3VC5_AN<({Tvqs`0GlK6|_LCXte0$s+~p7AyRX9qB)2=-6qo(Xh5g*-<( ze_!dZ6ERDl;J@wSW`}}%z1(gw{*nUy?lciu#m)JYIabc;6tF%Sqou;`aC;a-Ec)@G z__)?+n@JtFmHG1rujei~>SgqKLj$Wj$pJY3u8f-P`~JA*z6n0us(KRP7}{Y(Gxgh> zSnv^($+pK{=-xkbwwAq zqmZ`yla=7Tq=;8JEckaf*=9W+3f5lwjfE1&WZ${gss;$+Sz@2Ks#TV%%*@W2W=FsT zO8haqy4vPgC?g^ggcn1r6d^<_T1I8+HL6LJX6H?RKnf)sTcFPM_cC)JlcK4qh7A(8 z`i+lzJ{fO!qav=JGr|YLbf@V#DkC2c$Myn)5DxNv#2B)`J4Swrdiizg94oZiz|O(I zKyuG{0d)qc%NUYX2Ms@}r<-ffrpVW-wzd|R`$yeuu51PuKM2%I*~-=jdZkV~D+|li z!otBjtV88Ma1=p2jb?*c%vZ*sM2&UZjWz{^-;#0U-FsL>L_|6|>&m4nTMmS}o!-(i zG8D=s-^j@17Hu~=wgjLcA%D2J&6aB>j>3ghkm$cH7Y1n?RH?p71--TAKw*2!RnUh+>ks<%_$!T&=WC-ClU`jJFgOiSdvcmm(&bMt zbr+NN&*9k3)(`2e#P8KR9n*haix z`|N3NzCiZ%u1>aiJe(VzH(sodr;rQ{ta&^X$fW++`<(PFoanZ9O@eFAWOm8_(8KXe z>~N<4*vyqciwBzQrSvBq>+gG8h*f_F6+Quc0OYd=2pS#kFg=xDxCS-%859`ZN7h9n z$2QL5@sy+qtO)%QA*9S`2$6+KUKCf5yr{P2+@sF_*U77FWUpP*_xP*+d zP-`@0NhLF8c6u(gIIs8x!Yx#44t`GlB(SjDa@zv|my?^j(eBY{d@@hS>+>g*O_iU& z`{*Wa(eD=c!#W9qkg-_H+H63quz39dAa9| z5V^|eXqre6G7R!?zTPtNPkJ*KsAgU7iH-^KzEH*|6Ygw2u!ke!2ZA8yX500#-JyHQ zzY2v=#csJB1>TJAt6ktmx6tF~M?EPBbPA3#i7@6p!j&6!pmfk`-v&k8;&c0Pe;XT) z_9%Wg2n&6=J0mtcH$K=kn*9nj13ly`Ul4c1I%acPhOH0*at!CZM z4l30OzdMJO`!faxhDnEL7bv9DkLSCSX9V0%uNRdXqhG~}1xZOs-$+S&RNODty+}y% zUCx#faXHYg_}VrlTMw7_S`$3 z!)3Fn&}+j2?~Vk*V?Va=WdbwN~eo#cD7ve?fr+8twh9BXg}bw>`@EUY}su zOrD4r%%YMa3=D-fH~Uf)m7RfzkNrL6o)L@FMSCzP#4?@s<N>FKuQ z6qF4YlR65)s~wI9m)X6({QUV6@hRMv1sxq7vr3Ot`T505wWbq)(mA`C*eQnX?<}+w zxw+fbnM~toG!sy1c@y@I^S~s03m7f;r5Jn;aM|d$uJ=Y0MIvx$lXyGLrgC1hXH5T; zX}2P(w#lshNTkyaK(a6#iq58WyIlRSIO>wx(?X%xlWI4U!F$olc+ zrL?3(U?wOySdg`gt3j{(H7QALj4>%Wxk95}p|R>*YHN8)v(bjz{o1HE=q?)LU_$rt z@rsx$kw*8NaI@3k>6%nJg<87-ubN+S$LRry5Q9!bso4RTFspRi@3nPV-qzMuc_Os& z{gMgK&(E~F4QR@Zh6jI4Co+2-yZr*E7^b3`tyk*X-L9rDE;qDjvy_H^YiMW?WO8jH z!XQM1h4~v^ZIdA2%x<(>CMG8@&0DW*I$lm@CoQTCDpPsf9XESS5J+KE&B#ad`$P6* zyk7MNk83uB41{9?b5SXk&S89;G&LBN+2nDNaX2MQKrp!&tyn}d`q7`_0HhiH{XJs)k9#hc zQ!^_o>H-*{D1(GNpO5!?i+L{3!!LETWOaKkN6QfSKNAx%HHYzVFklC}K7q}bYlaP{ z_<}(ZWs=F_RhpQx>22~2z1!~$5JC3US{S3FZw4a|^ znb-t@bovBetoVRr4BgZnG2!8zM&WZioXlH~fqwh;&0z^d0MkKrmQ3+DQPhcsxdfAN zJw{O50FkIAQp3uT?r)3^8SAOEGtp2uwWqm{-7u0!fSzIY?YXCVKF+=M)kqMA5yZiN zs;!H9iQTEg5blgAg-Ak8@l3`~8V!2hd&eq@aTKQ#t>}4bxrrj=U0quvlF)1r!;f4j z)@~Jixlg+^ms;G$J3T{3M;{Ew=GNQ%!t3)fR78#!`YW8V(bwC&!5GH&5W~a6z2BZmj=_>KaZxqJS|`)k ziy0ky9%z}b~000f_Fi@GiKU-ljU&TW7c!|+$utAOJTUx@N*FeKK2TJUQbMs0S zKiKcXt7 z$yQgoG3rff>`IyEt~d^l`7-fXQr-3+fe!&rwlf7R%}XKKHgd%#!ws4YqeXO+e1S_k~mEfLw^crw|HVpSF6_+gnYV6 zN=f+|UYv|QDy8w%M^Z~j;l^jk_wjzSKM}0g@v+HYD1+bXd`3C6J5AzzGIvme5ZgM2 zn8tE9Dqa?7aygUcE(}?#6NA|r-$&|Mm7QqZ6@ zFV7c>%N()p{@ejm^pIFXra@SBFx`Cbs*-e4d^I zNAX{u_hyO>MddS(W(us=+nz?|N=eGf^g06-ysozUmz_^~dwRaCH1W!gfl5kB?$b9` z{d|`a6Wb)dx_^(H_=QTgH1YLgO>22{bY)~DwAtC&Ihi#~_&FF~PQ;5r+i zE;Yvw+?<+}<8^$lOXAhUf4iLOMZjh4sZ#0m=5{+@YKIeuLqh$crAsLhmO!KTrl=%m zww~k85fi5WCCCX%rMwbbF=30uA8f`quZZ^Ar9S??aGp107rTH=#z z{Cue@CZVnE1psu^T2+^iSB6xo?5sAk(A#o?g1Lf&GM-|*y1e_)$Q5F$^730q{CUpj zv%k27Xnqy{`qd~`13F~l8uAQzj1&&sks?=J&04BP|u* z=%8X&c6MyY%Y{l^$7^EFX;rj$aXo?#kKx(VeO{qkbo+l4mJqAnPLB6i+s`cyPrnyQ ziN|EV)d-@Bz@CS`azio*Xq^CUPaTs;rHaA6T5D?S67@9y$M)Gx~Hd6N(waUEda_o@s4sx ztxEjuB$~*tyh=asY_>Xg@x-OBz8(<1-7fil(#{2T*^gEFf{iw7F57*>q3D!d)1y!o z^106ezhbjyzGRchrjX-IY5gm(p8eJpXpme_Xve2{Gw8|>|D6u&Peh68}H^~W8hBS7%Ix?i6F`j3Q& zC^B$=zC?r31h6k$HtP!Y()-%Nk7N;kpi!isY$tkxyVW)Kj7Ga*Y-q^rAQFEp1K#p! zws>aQ_0a8PA3-ZorCh`LeA;nRZt0&r ztfR7X4C3Cek55mW>6{PT2vp=oxP3okgqH`F_ij)6*mL=t`tz52sU0x8euKTpsT^ zB6nq6ixV}WTxJ#p6r%FeQY?8zMdVX{Omdzb;UUQ5$^&dnovyCD&d0NH!?E)BfTE1V z=2W>29AKBguuz`thr{fzI-q9sWKRokHwa2)GTmBQOACqpn-ci_qz1!!SB{Z_Wcmcp zwn7B4gRG-!A_fVX)SbW)<}SekHySxRrBEOurjFX>1BI>Ym7E%OiDcjG;X0mDAI(GeI0;!z4Ivfe|XHO5&V76$=%uqNCBQXERTuHo@=wT;cf~B(6#FJB& zhwtCV<`OM{q_-NT|6qb+I%R~>gOuuEsGwU6nnhMS6#q62|+>3~jW|H2&NAHuvUJFgooi7ezTtg5Oy(4GQ= z&F^JmTFdbFf1w3vqXCyy01p+_knZB*)2B~M?mM*IeE2z}@|i`-|9OsulPG3>U-FRA z@y~W{s75QHNrimRFppKKA`rU%ad$&HA^*RI#H`bE$4y|G?Iu0OJqGON8T~y5A$f&eC1o@gCG@&kGm-eeFY>C)j|mXLhaeHs-{&O2 zm0<*zP^*k)jH4GtzWzcjLiA07h?NO9zNpkrxK6=|h4BjXrmCtclcy7~Uz*#33JMCc z^%=mt-kf^CAt9b#poa3DeAt`uq^~X#_bv)wDo2u30Z47;I%uZ%XeN_9+WjW|>6Md% zor~kw-`1zbn04K zX^9W6#>V*uko|S_aQ5yIAt6IQyMFfdeUpT9WMN^c&UK($)0LqWReXIhetJ22FJ;`1 ze;tycop7fe(>Whj;9!rT{VD$T7YeB7elgQS>0+0#i}UkwYe+!h153qxnt=G-X4K*B z4V&f{6GN1kcy)90flr__&{CJ=gBX8KN0yjN@%~ox`sOqvaS|JBs*j)Ex$)?z>1{-o zc<`#rvQKSvbg_^$n0 zKH2fVF<1~(b-u-Vvo!9Bx;VK1`EcNkP6w=EoY)jp3efM&j11{&wCS8zN4=cI!6R{{ zixrBpGOPlEew`j(#Y*)97gchZnd^I0D*J!2f6q_vk!EP}F(lt+E7Q~04ySVS3B0a% zVL-nxM(u`-A>*N3pRcu|sHouJ;AHapQ~-{pm{>?+qU&6Va+8*<+^Yf`P`>TD^k_yg>TD z$KMA39=Tchi<(IPC6G(A%Pm3i4}h6*ZZvi8fsltR>M*jawv3Tt0+;CXXQF)=%Y#bY&fl>g zGs53UNS+=av+hiogvIIi6UO|t4E`|sFs-G@jIOM_49^tWxp}{P0$K&W_oKchY#-|E z640Q8yxzMt`~?mfGNqEiY_{v3kC(oqC?6#Zg@Oe&Xh5ognYcfIv{Z~;%>Eg(i{T3U zG~GEy;AH=ph)RI43k63*DHcquXVftE3%Zr{JS zZOq{CWu^GNxJ-;AifV<9*WEEoVlNgJR)DBb2x31V@V6Ap)EHz4_RqqTk%x>rF_Po*RYCC?+@*R_bsT+jVYE`XWWPE67D3#5&I}<6~ zo$%GDmN)4{|EapVoY^7IOHB*yxo2`-f(#vMY1DT+M^>z>2{?K?k zF7I2nm3#a&E@%We!DGn;+C47?1qC|_;fomf&*QR<=iI;v?Vg-a?KCHmI5|7-)d;z0 ztoiyw$)VgZG@qC~B5iiarQCPl17SL?OD}bD)2GN%s3CQ*Zx-hDKmrz4M}|xcKl{ ze{6i1X$WKz^AC`Yh4M7l*Q%_Q(1>5_Z7#ohqiq}uBYvDc!}I88ckhVY^Ef*Za_Mq; zb$teEV>7z?d&&?*uzc?Q>C#G}ZRa`n4+0)faGsa@Gu>(j5>8l{Pd?D_WAC(TRaIWW zk-b4kK0u-HIiD|ILDqW@|)=Gn*+K_9$Z$dO~&D$pWf)S+q#A!^p_sa*PyBgxmH(K zUteD(5=R0+_HX>fI=o&QjIMG9B5+6DXiZ=?Oq^MwwKTLjx};$9anRD@mAL@Hu`oUT z<4%Kq;sv+|JZqcjSN-Xe7E07(UryZI+_EZ*G#e{!?oNR4s2h*@{jyqcso9HBNDE~2 zab7ojtMO}IW%zL-D)mTcSXczQ=e7ZR_g&Z%J_aR@-bfkA<2jR^QK^ge=3?~{!*_DK z>+pV-6XxX(cV#;{J_Q9vnUCwIokxnBk%Y#*zW{1=MAswOQ%>$O0+-EXENQ*dhZmmZ z_3iDfWQp7J5gODVHEHb}7aN;jk6N>1mAA{M|9TIw4uSf^?pN)2(bOcBMBf2u6=KnF zdL|a@`MRT1b*5�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

    fseLU^{H~5lb?&Ap^Wo=7IZ@-Bkp01Ae4k3T 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 X@#lKsca}QBt4K>IJV?K%_v-%u2sd~b literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-11-native-websocket-lifecycle.png b/output/playwright/pr-64/screenshots/MT-11-native-websocket-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..51e33d85fcf49f91017bf975b7fdba8d97195ba2 GIT binary patch literal 84413 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¥rJfr9 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 z z>2tNiB2@&Lgdc?ZVTYw`^$TV+T6{w?XfKoP(?|2jQIz5ovK3oku*_1a5B)ftE@MWI zZDnnyCM1MRUxZi)Wfn{R^lW6#x6wQ^B2iLDI9-@U@%NST#*NiY8$~|jMP$<7P$-ur z_oL|h8n~c zeIS;dykG+l0rGO2;pVJy*H;2gu~)+GJMRmNfiDu#U;Uc?MTHSIZB+Y}*q0tzV&x8y z?)1+;|Ac$rf*?~Oq$agVwpf>TZ@MfvZOT7*isUFWPe8p{vvXnJwf?h0gKSFm{c~+~ zS*7-b`=|VGst}I9J+H5g$W4GdCxRgmH~6H#nxr$Ku?N;Ex`MY7>%&8XJP|0%Kig3Tz zjC857RqqdPlLfCO!}{7RQhu35r;2XE1Zd2~ zzO3RJ#>WmzBT9~4Pe2R-4Lt<=)7SM4BqM=pN(}!%U`_$8MGYW_rZ_#R0L)}*pg^TW zEEkWIPZ3xK&o5I#_4O0?H{HDmRs!PF1|BuEPkzW05)uMzVSu$wT&~4Qemt9jJ9U|! zhTg~LIQ1zT+ndt_r5JvS!vk7~Bl8P^gQ7R+Qc=xz$+rhQ`OzoL+6Dyre4dLAzu7}z z&csd_FyPYJRIAa)2c!BOBekyO_4N;Zs-L%1Je{y16!toDl}O{U$M!+Dg(iGDf#jog zhXK84A_=emN-gT~L27Zx7%cY|ire`d7d5+D=&P*P#;czwt)4$VY@0wyXNYwrK+n#} z`~W8$1Hb>Mp`F2RJXkH42<8(gk$bW4*K+k2)VcTcuygPJRVX0}cC@xP$7CyY#_^`H zKsEb5nA~#)xqx}$JEHwn_q;L6#q7>S`SA+}Yt%d~aUmJ>0at{7b2$nG_A%q)Kk7Lz zEjB+s>93{{;|*z!ZG5|;f8X!-NU8rj&C93Uz>*8^KnYv0FHYy-BV``9`BkkfiFBD* z+SZY*z~xWYo~ss+-FcrQ?GD6Yr+RYEpQd${t;QO4E)TcL$qBJ3kN6KYg)V0YV;K9h z2ZIl4W{!a0C1TN3J^R#NUw$w#p~6^y&chG{K(Q0*rd>7tAs149X17Ok{5JIMgl`S# zf53T7i}^IXuD7?hm#MTmw48VGT>U?Hy*7>^DiU7k(Z`DGobcCk^>las{TJt6d;jn9 zZT`2GAPBknfBy>Mkix>kungHxA3xGfbOC5IUhA3xKlVWI0-J{cP%;qRuIzOhSYKaX z25P0fJ@~01YnDOFu{~3sYb|xhWt#8@+_Q&2tBCtLE?YZg4y1m4k%;BcNO%+8oDdsz zCdBhtqAxro9ET{=DQq_U_M<8oEQwyxc@+g~v4NH&%=`QI@1R*u99&(kgryh0UH>~Z z2gpt!5`IJbYZs26EB`gribS)164bK$g7kl+8bFIu2GuQn?tZI=}txEBA_#*I) z>gPSeL2^OKYomAt?z)wesiwtVBmF&i0@QMgLF{C=@TXyfukG{Ar9ANDEDdP!41f%d zkXe(>=I1(~<`n!6(&{j&D?k`d@pP5&K>MG;I>m?hsnp5&Y-}M93lwRG(V+{Ji`4vs^si3YbwKnUjLY z;hUXCu}g$jcQQ!q>I=S{`}0gM8yNdJG+@{EJqpar>d&@jg-d$9@ZY4^~o2& ziAo}w=!>l!9L52W;*{Jd111DMTj;<6IYdvgGl%^L6l<15Z#tx#g|xJ`t?)a5cD9Av z)5Dd&`d0vnME5h`NQl`D!^=@1sAbcA`QLAiT&h|xE%0n%!NIilSSZ32a6aHo17H*y|&T)_+hJm$XOntbuwLJ}pd=yX$SaE?_sLE)R`&Y72%AmpyNA+c)6-q~;2;kar=6Uf9P~aNloi`r?&lC-s&V^-1Gf1z zx3)~#Sk<_(!tW$%GE&aT>Em3@v?7RnY+;?de!o!3i!#kFx+m0wW)%p7Vh|>S&>$=b zM1=pNGZ+R3PlBL;z$`OyaEukK`1;@9N3)9sks9|;>V4NLPaoj<|48MA0*o*!A zB+}cXVZ+Sk{`~QylMA{fN}j{zY=Ut@FAnGI9@v}BuD$&F3qh6-O<3ULcq^TGZrV3A z7X&NnS( z)T8Y2;D+Kh9b(f>W=&EtZH8m9;&ig17;>e9$dpNG1gOQ|TBwv5r+p;=bK1i0{Ii=! zDU#2g8Rsi2mE~UQ15y~+|LT{QWpugaR>$DV2X);wJiIf>7v#{@3VRImaO%yq-=-82 zmv>x58SFGIr)g}HaGkLVfH^jbUXP8AkxYc&(-F_H3-!r>zr=I72D&x(JFg5CZEh`c zuzy|J+W|lWkD>(RWVh1g|Q4z_<9MQabpYee7U#zTl9k!X(2V!)( z-ut5dcNp^Zet!!YW87Dh{0R?FH}mIqi|)qD_Ef+>QuAO3jHJ&Y9&BjPU4Lst zEDm5PXiLF~qQmB?4OAgeC0;tRafN^GT;9w7Ukt1*WfuSCt5>DGRR*ap=j;CXOjukV z1jblW6J1Ue-BwfwIEFKWl^}Bn&H85b#Mrm2*()M5NtUr@%TAVT z*@pX?zDxI<`~BVJ|3CNMbIfTWi5Z$9Q!|l0KO?lCa zx{A@ahHUxYXw-4GW_+y=as14+`^+s3%6XRKt39i>Yr0G2InICP0$#2@9&iNJ=Eggi zLhFy!cCLtoa_NRw&r?q{oXfu*UfIV<`s-hq!2irK%8z66OQ|@lZd5J0FUJ$=P8kO_xP?(ojuGV9 z*FndQA3B=0aS9;ZMwPbi!^`Zw0DsL>{~;zSdVzU%DHGUplP#~}{)7z%aMKJ~L!#&> zGVq+oAaU46{8QYSO3Q|eBT9c5p1Dfk250U~5xGURjr%5W&>lVi4vfUzB{nv555EY3 z5;aihGLy&p*P_X`O7Eo%2~c*2u%2#vTctV0tR@UO&Sgko4EcIj5?(pi7XueAVL(=o z^`r)Cwf&S;Q4N5kMjN9Ej3UMrd3Pcn71_$<7?m5^mx3^F$X^{ziggR< z+|y;^VdC?1&d9*HQ%7!WRh<*#j?NE%QduFN77V!Xr&lIQohXLA;~<9(m2c@R@HkSG zyfIkgVc^UA7!D}_&ZcLkYMp83e!%VE?(8~T?z#GMGbydoi=F~aD|j|Xh;d5(#`VG8 zOOqq{Bbk|cxga(CQ34#jp=Vk(eU)AXmR-b2Nn2RiTA@7!Yo)yB+`@ux>cG&{5T)5@ z7j*F~vsxma79NVD+m|42SGEIXY1| z?D`B8nnp>E9wYOFH{(sreFYxYf578ve!=4aV8^6DXr}_~ii|+sJACGGk?Syj7Vvw( z?Y%2lOIV*gDf!8?j2%YZ`@w7PkE`3&EQ3x>KsTr5g}DU_yOgI+uzk?}FhUh}`aHWlky*FKY!4AOAe&EC^sHLL;k*16crxMb} zWh?Gb(3KB$QdFbcm;seN+gEzLcLxkQ&JY`IKB&lulNQ=03i#A-8dTi$4#X4I7pHS0 zW0JVji=0|VC-ZpFz(KWqQ#0f`ymK!jVEU#VoEgvKkojX&Y^}T>QE02tbIlpMM)_##q$xiJX$brfwlvHnkRlQ^&xR4sL0+ zXf8s9-0k7ZU`loA<#|A)Dh(1^HTcEM_XKtqg zg~etEEqrAAR{&bvk2^t~9pgi6W*aiiBYhtXi)_{b+rS;LuTEOJL`2WC@3{fQAGdHm zIVKLoFLDadBxCGj%n7F-YfE-h9obs-V5@Hpv``|*BhIc(Y_&*h8Iy!C&fcjF4B9h-@LRnO>y5@d>SO*sTqr%IE6Zf2$h+41wr zz^2!e!z83d)yC=&_~wGAWnJ*ThU8Zj^e9Vc4WfB%@8h57BS#@2kUGn_$IvIEqN>m% z0*x^e&*bfLK1xXKWpRJIu|aXW(PLQb;>3@|r0I77aXQZCM?6#y$0x_eI*PrNT)%)2 z^p`zTdF<^aC4ED~NsMpORb}eT^-=n@qgx`GGdwYVesEZ^f*DJ83>UL`cR5hXR^);t zwp*2Qt*uQJ|9;cA%O{EEr3)gn8hD z`8r;r<{Hjx(LV8OGb7xxGY`G|b88#dqOJ3ZZ!=5E+DB!E_{!&O`)U37wK4ul#{Fx{ zd;J^p=7C@Q5oP`rCD4!MP_O?@)BQ^?sIU7s8HfQGrJUfTIB_D;eDL`(Dt~t%0c(4W z36f24g$ie3tGau+f8gnUh?!s!bVuLbyLV3{J)4NbRf-#SO1hjqY#D z6QwY36Ww&0f2B?R-9Ui&Z`^F#f_>P=em^!~j@~~Y@P_)(FYd`-NsgP0qTYH_Vb|kh zz4fTi81Q(p?H>?<|GMtq-cXu8gxj|}}OErcOai9{;16>NpP6Ya?K|8E#^UKpllsXu4!E9&HtLl6j@p9Kc zbB>HHdtuHjx43!UX%$k2cX{LE7rpIhz|%{QhtH_Dze|x)Wa!(oZy$y(1C#4LKimKc zU=j$mE=4%%f&mDe@X1JkyWyZ|sm61eP=tZl&g%Pfzftei)@~hN^FuC0{dqO0ms8@< zC>iWq_I(uw{seEqCaS;6pkNdh`ea0fRU@lS=s2q6S;Z}g~J zk%N%sM*5Y2Vg;;rQFV|H0P!^vyvl9Yr${Or!Te zcm8u|=!xeIfB%#ha||M)ljpFDSW@JKhISp^3A<-LM^&w)5b9+U;2kf7yv=13te4g& zbwg+fFJVzfAN>xh43-{GSS69hEAJm4AxSKya*oV+Q`S^8COAjdATM@QZxuF75I=@~ z65H!)Zb?D~0KB&$@1u@CuvoyLZ0Y_yF3xpt!S!Y?mP`m?^W})95_ehyo>zXEU-Xi< zFDdDsAJx|HZO9dO^X8l0yUz>H+!T`7b?0?(_o4zT&SbgQsjH;Dw!?m`Iy7o2rK0M` zyhc4|THMJSKk&G{jJLf9wagAjVbGpAqH7~`38FfqvN)f6$a_fEjnU(lBKv6g(%U!7Y$$l3&GSfYrZ4G|b$sttS9Fm;C#nBGE|&CzM5l2~FTbF@$!QO$JJ^*OD|$ ziV`8}whQTo7ibq+tHCS=;zF?40~mS?&|jXD6j>R$FAPAeBBeb2R)@ zn@;G}I3cw!)Aw3Zl&^K0#ZUq0W}Y%TSgYkhOVdg`PL4wFc;b1e@Tsk(vhqX2FobSK zcskE6p&~}ac3ZTolT+y3n;_Iw3OedEKdizMNzdn=uN=xX4}G}IDclLXY{*V9{1Ia$ zGlPT&HN^&DNpm?4ZHKr487`~_WSEam@U2nBv#=#fFbn7?KdQm=z)4(WNq_e(v|Hqt zQ`#O|o0Z9$6ENT5#(+dAiZ}e}Dj<{^{8~DJG6Jr_hDUfQ7_Toc{k(T{AbskwA_ z1Qf9|v$G<{StYJ>V)fyG&njt~b}$^;L1{zwhd*+(Axw!YC)^ntNseSgZXT3Wx?k^H zxNu<@Mh9Ryu)|#h^*BQ>ObXRNq>`QQCbly@EWqC%xg(-eL@+1zVbH0jmI5$8F}))< z9v%@O?IFICaO}IvRJ6l*6&GHLQZ#Oc{uS0r5T99Awqc*1+gqlh(s~>R&$QHqMedA4 zTO+@Zc*tmZh8iB-SdkM6#yK&94lk&>8Kp;v)gttuqK<#3xIlMK7?TP?L%f3`>2rDA^Xcw*8Iyv z=$->ohDZY5ix#pqn4GJjuZ3rs5&D`XqEL#{+d7;~6pEEyrd=7FGIRgf{bPh?sZB-F z1O24;`z)oW{D-``71IUDo%b;^f+s?ET4kdykN-UZh?GY{l*d8csq7LY1k0ATR zpJBk5!z%6I36gRs0wF7*)88~&N2g!x^yyF?z6h1{801my)aVnJcJT@@9U`MnXDX@} zouWjg8QfW#Br`2r+A>Y@oF-mFu|=?^XH}`XLtoTKQk(qUw;>TPr`MYMQmBmR3^_7Z zsT-%X^oRw(eb8>r&qC2>B1Y_%g!tcFiI1aQlCkVc6m^}{VR>3QzPVcm(&3>@uXJ$W zG0uZc8@5>y{X9;huAX#CnK`*g6DJrhWTa;W4kpBwNxp&qK8_jaFK4dLP}v-aJuYK6 z`8rPUq`j_GptnWGd&jB6D7nIT-D}Qas>bpB{jrB4O>aNQs1Z4Tp9girc0ScU#S(b{ zBk(a~%!=BdA?WBB%@8KVbTjz&9ks1J`k}f0yppPc7j{ix5?HSi;!DAilU_@_30E=# z+H>MOqV&_iinXFgp2OzGDr_BsZ&k7{Wbh*6;K7CkI4UL!3pDF6rMLM-jH~eL?@2D( zd!52NIp6f`^rcBMo&Y@tcSdNQ42FHJ++_lPC*{>stX?6V6`)FhTC;^NHRJ@VT12g3 z!*gK4z24;<=pK>uJdU=@A8iFSs0}F4L5+&nT$iiFn{M}(m|gTk!(eFNNMK@c^}{+t zl~c9Xi*wLmbx6~iA3-`F-L2&BdY11c&nngXw+l6oji|iT+wbG9JW`Cef5(5eGNEes z_hkk9qqD##hrbg_P=oO`l9guVN z^7N#ZT@@VK(zFyG+uD9$ddc&ecma-w^jB13rKaJanjq)iQt5$9*M$b)={5$bP$h?Q z^cnbp96XOOl3pD@tPyd^wJZ4(f>*DhK@71FOc{K=izK3bdu1-MprD|ZL_N7NW`X*) z)_VzWn7{YJG(WFH!)iVns@i$Q#qDuPg3UVUR}UUM2v_A@L+&R>xLK4EwLS@p1!jSx z0-Z||q8MMjy4ZhQ+$t#C7L@T~kdvKghq}&qN|JEijZP?{L5WCfvgP<$TlJkC$J>Pu zM&YuvB&_=~wqlw?FBX3D0_%40hTi&4$43lK7>?9gI{I8kZ0s5DhCvY?%c}W3(_hoh z7~ouzh6|RxKDJDEg&J*sAMzeqU@mVON}zW%!zT1rv^_lHcCWXUPdv6;_JIOjW^D?o zJk`W=xIit$`uLHGX`>qS*0>#f>)Z!UBEnF7jQj>5CM` ztPP8c7rB$m*qq;NjvtBVNepZ-ZR(`PBwB$?n_EY?X(8%u+V9I9<&$)%4nv@6q=8Ud2=NE%}kmto*Zhmcdj203%P-1!tglF_NzO7 zf;j&zOY^Uo@^8XG>R^3Y`CcUV@ru52F1? z%+vq;efl5&;PAQsoqWsxp*!%;3;74huYZ$7`{zv!`sXzJUtBByIa7b1sc*l<)3N-d zWY0~BlftB~LI>;R4ET0vR(2l%lLP$w$6~s>PCLzj9^TmLLVe!mlrmLz_^&d=4?1_5 zLA$@tpEcjhfP4!|t%B!SpfUql&egRwf&Lyqb;!xdfffMXju7otR1bOGx+l)7E8mmo z0lH$=`8g3fw4pccLDP}0mu>s#5P$fr02kN0_v9r&8;MbSn4eBkij9ex#HHz$tHT*g z_68P9F0zZl^CHJ_x3@Man-n^r;3RrtesIW9oyLG0$hO}EA+}&YL=`Ax1cLlR!RzOF zz}wg~mnI}Zw7IX(0kr4PZrBOu^U9sXJaRG*;64!8!e?&J?g2zu@vZj&_QL?i_&bQ~ z=w&TGg*O1~P3@R8!Z^RSz1{6=t;((kP6h%7QX?Ma9%Bxm(YX@B3Mee(&$pWE@T%Ol z0otK!%kPtolg_Zw(EN6n$_v zTs%r)wUH@n(;)~znQT@Cfhfbx>Vc90z?8`K&*n9mdg-9G8=LOIWf@h=i;Cu%y}f%c zj*b$yZK>Hp38aHr{vSang6ei8XArytWcc`)RS-;eu!Ud7-I?$==W}Cfg{DXlPikBa%E4}UR5sY(n zb;+u*82c2$QF&NRV0n3ALHp#_si}1kDzZGhwfG(tSsQ4Pe*@yvr75*oz+B~o@u}gL zXL`#dZ?tI&DfV&P+`>{NC~Uxv z?Kayd?%a+5i(J{FpcwE%P@oh_Q5U-UTGQ;p8{l7wCpU>g@-%P+JdVXeW@kZcNJSu) zl}#4+!Q|o#!Zk*Vj{)25usuVUS#XAotR9#(1m1{s9cl=Jkv`biBYp6sYMN%^U9c2E zPDx9me7C&v+H`9w4n8>j=&@1=YPKGRazhs`)mSM>t(W(~K=*sa3G-uV&&_TZo9*}R zN;!Nv%EpElw(qXhB4gs>=m;uthPwb9Iy|f+ZQ55Mh9Go@om7v!dGl#^ZgSOgAn!CT zz{F8d@M~@qoQLjl;i0#);@x`E5_k0Zi*agc#zXBm>I)Ic;8^ADttghfHC=)w_H!CY z%gD&swD3%ll2yWp1(u2we123(N%&0=C^9p#a&?ixl2`ZW;K?Uz4$xiGGTo9Ba@@9$ z!7yNialJkAXk;GYYFtl@P*0H0KI>Ly9Wn!AJK%OV0v;`y=NPCo-Gjjo6ECW8F*+-V zx94U{ZD2dTExQ0D^*_3orkFwq8s%>GZQcd>yzy*FrQZ=coVC?tR zjO@ir5p5fcxIrp?`a=3@|q-60F;8SNkKsYvSY#K!E%K?t?qMX#-u4sE}1sdQZIDu7rX&JVQz1>Q%FJyl+#Sq6|vKt`j(j=I+Kp#&Vd zUcS%nDS@uaRggb_`{@(01R2XW4TGO7I|=)RcHQlW3CJ^md+7^!xdL}~ZOiP)Vv)G% zt5b{(kFUH_|M`r+B>IR=R|~IAYl`l*6U0qWfa1}`Gb5lc|MPZ@unj<(k_N!Zm67iEq`Y@W4qXbB_*do;;)djFo zOJ%<`e!Q6hKH(evRiF+$l5YlgCCj9;Od;U&=ly~Ckn_R_l5F z$W2X-6n}=YuvgR*z`&8^h&?xd$^qHH!aXcxR3gwl6dXYRB)zJ;*gh7F)NbF}44UK9 zds1;CEJx4Twt-qYR?_i+h)D(PU+L$d0^u{cI02v4Z^w#s`HV5ym(~zJedYIBhk7{qPr5v#q~$tXkId3=Rmh-rl+6*ySTXcy(M%Z<_)?~x2se2#Hb`brXo7phDx954E$nR z9N*@RU9Y!V)ORRz9RFE&KVR38yDb|n63B*fDxzls|?wlXQ$srO<(tNm|8IE!glJe)G7bPBB0ex5LVIRuNL5z4Fj z6QAKqX}mA~hrNH_ZNc-lwrG2G=ixuQsHc(bG_Tu=N}B}Va#3GHMN$27&PB7k{{ks8 BN?`y1 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-12-legacy-session-har-replay-trace.png b/output/playwright/pr-64/screenshots/MT-12-legacy-session-har-replay-trace.png new file mode 100644 index 0000000000000000000000000000000000000000..f18ee84095635a27c253fa69f3682b032fb41306 GIT binary patch literal 305845 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

    ICfTe$7`Vz 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 z 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≥r;+Z9a_F=rR+BYewroqujVBlsRL2f~hM}lvTpN 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

    (9u~J*h&_ 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 Tkl~jx;!aVr$}&09#*h9VB>dMI literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-13-legacy-boundary-assertions.png b/output/playwright/pr-64/screenshots/MT-13-legacy-boundary-assertions.png new file mode 100644 index 0000000000000000000000000000000000000000..58918815dbf709c226f9a482b02fe3be5dcff6fc GIT binary patch literal 42708 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�#ny>K6l1ZjhA%ws{k;`+!c?bN;30?7)96?MtQ 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 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-13-legacy-failed-request.png b/output/playwright/pr-64/screenshots/MT-13-legacy-failed-request.png new file mode 100644 index 0000000000000000000000000000000000000000..08cf00050cd7db4778515042ef12116ad70aa528 GIT binary patch literal 78938 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 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-13-native-boundary-assertions.png b/output/playwright/pr-64/screenshots/MT-13-native-boundary-assertions.png new file mode 100644 index 0000000000000000000000000000000000000000..49313a45708231eaca2da875cf481f8bf01540db GIT binary patch literal 42470 zcmb@ubyOT(*F6{~ApxEQ3m(A<5Zocb-6ePk!QG*uAqfG32X|?#8z(r8g%DgD8kfdh zf^`FpOeN%b-}U|0w`R@En)<6&QB{5G)U9*&-e+HeRh4D%aLIA6UAu-SCo8Fb?b@x> zYuBz%-@O4Gp?tyc>e{t`uE|Nh*7Qu>nz?NdqfdkLt0F2p%3kd{F;V?d6*lYLMRbw&d%UpVBXEZ#`7IMXULBr_m4X>ERK~6oL^v1MiA@5A^r<6Q(p^w=cJn8lvNw zo{P7iZ2C3N^>pROa;T0Ds%ehI>OA_jyhH~4IIx{5)(K2ZkXa=$WegLF<@ttm^>sxx zBwz+eROE)aQHym3P*_%p$@}~~i)i$Tsk!_+b3J)wb3vuPtLx`1vYeAsv&yqxX{l*R zWah_Ek|rICzTn~smZOI^6Fu7a;yw{#4KinT>JGX^LIPVm|rMsMV z7f`o|DZh##nP9L@?J}sm@jF-k1eZ```p~6_hzak3JPC(`ns0{FY(>(#O+(V%DVo&Rnb-$w~2j3o>SdYqGL&rcp5!n z8d(5`k-F`zn}1IEVElMwlSm60hvXS16jhB_tY|Q1A58UZ`{)GbehM|=9pOuwv7MqRtd9<8Y$Ge6D#B}NJ<%EpgYMC*>@2#%9=lUO){vBB7i_d~r$H@X!asKQ*Y5iy8>d^bg;#7b3 zK0J_sUB%(6$z8XrKXN{R;Q!fs6&UvlR#9Crn4@+R{_CWi{NY%s-o*k!1Rl$j-S<9Z zz{*2!yPmJK>{2ZYe#Cl0Nxp+|2dZi4CP=&Tu;nK_fPN})0~Yzzz?7eZ#0 zRke-K;^MZW*ty}~AKxwG=m z*!2W(gLt~g1CS4DbLpElYjUtfp>Fo+$o*NQN(Dj!e`~gXZC~es zNRXvz?trv39)jc#LD8l7A!x#I+<}E zl7ZAyGdvY)5m}8B)tyLjtux+m{HET!o`1L^o#54P}O7kY=Wfk0tzYVU))<- zUS`s@)2k1;kr)N}SWv*s7r2wfyNqW|;Np_T?HgvMdtX36KuSt#N}iZ0XQbFLbf@5* zh4Ww;vVw}@^XNrJ zvB-OHCIMS)p4)VmRe(OP1ITg!zvS}g{CV2N+N;P%4!7GNZ1{eTTpEvU-ZWF!gjdqX zVx|db=BQ!NLJ1aA{W|q#F>f{hAM=ek*9)F)PgSq9yKW6e&_mKYVT|h)NA5cu=1VUL zO-++!G$c&tr*$_rtOIu3O--NMGjTzc%U|+AS%;9wSkaTUc?qUAC-3MLsHP&B!+F87 zYeKLkuOSuH-r1cyr$|%V_lXX5QX+pt7IQYOs#9q0)-8tgBz-6VMmKEoo!4G8HKwVg zqbJL}C_K36=mI8PA=h4-^fGRAb$2J%SgseiQG6DEYUWRsGN!Tmp~+7@g`8!y$OcuX zFKfwIg?D(wxW%eph3=bT4>AB{)R*}ljH>M2i?%7ZTht4AkNgr5Y*=sNBKe-EiphBk z_@0~}x3$Trq~8(t`8iXh*A}r661%WfIF9H${`{Gjs(vtVP!G}f)E{T?XcW(e(O7M< z`f>(ANFUUMzep|1!?IUN6yxmTVzn~mv2*8k^V#tpA>nPclHPHM9fkdP#Ef_D0I&BX zk^K^OZLM(3!Q8@P7|xMz`O4OSa@z}4IF_R_o2^d@&pX;$70mJQ8$(ud!zc2z?rT#9 zh!#KiGq-$`Gq7oJ=)evA${rRADe1<6-ddWk}{<2>6M}JHDRE$H>aPuICK1k`QK1YKp~3zBGNtsvm8q=j{oa(CJeMBg)zl^JFxuzMtSzcbAkVW3X0A ze=`2`XoGUP(O>T9OlpuO!dO}UWGOu(R%@Brwo+T0xSK}UxybySp83Xg)&OD|hziS} zsGSLm)u<;#MLlI_5c626oEl@hEz&eV2XDyT_X>z8HLhVBOBAzd-y~I8`;j&n9o+Bl ze72O};OMr!<%n5{W5As2ywFw63q$MpPT?V=qlf=6yK|_SIbidSo(@o_AMwvN+E^q@3Uiq$+Xq;2)!9{+sJ<4q zb9OH0M?~2PdANi}Y)@I*SOpha3|SN!*YILs6g6kHN_j!=Lq6paQA33fwm)ZSAH`>g z5eC4?H0YZ=T?ckI+U}Xkn3-8zRjuQI^J!I?5iS}Pj5OYchATvMZ{#qy;B@&Xt*)*v z*|TXSYeq)K)P3O!&y#|mIkY7jnMKoEeo8*d^(iSy@)_~c&UjsSY3&Oy+<1xN6Pna( zrPZA|$5gfZg~ZEE6R0E8g_k4XIpe10)|_TPYVitnzF4eit2gw!_E9w*j~QNmF`D0f zwjd=Fq+M!`S}sMxZFYUvE1aUja&q!Qg3SC_U7en4J2Mbf6|{DQL2+rfz3d-|m;p)m zB>mvsRr0)#tqU@Sqjx(-KJnVlR@)DgKwe^&hl8deVbM!VO-1eJAA*iHM zB$SK{pY3QexZ-{S*xTI&IfQgw8&9{-%Y~wvToQtxX{%LC1V{9~&vIaP#sg|Eaj+zF znkR#-?g(O$0pV6vpapW@oh(*h05UyTq%nkd)F3$*IyBzNxN+`1Nzg4XZ)})#d{t&Y zWI$rAk+>>#{e{nWH!+<%1WjtGmTHKkQLn0f*V~$_70Qt)qr5`vUQ=JE;1KbDcn+8%x8Qz_zK)mJJhd zU3y&7osbsuJbj{b@T<_w-Q`Bo$Q=akaB@YK-NeQ6Y(bVr*>s(^v9rkiG}d2I|J2l5 z>J;f$71g*z4l_iQEqvt^*d79K!Z5FqfZvMlTxdSmY6C8~uW4%**$KlKcyG2>0a!$| z!Na2EJsT5hxckq2+uHi_kd~6c%d87TO!fO)8M|LKIqpXz3ViV1*j@Ec^E9 z2x!FCHx5^er!Md|$A*VT8odufJRj#qeH|S1Cb+?@RS8KU9Y|jZQC5tlK~r^OpG~*Q zL|$5EV5XcjE%*6Bu-C)!(R8&=F;Fi`5!qa5d|%2?z-Dh>U#@T05u}I{^iy@OFOo)# zO4vD;9CzOf<|Fg)OS|K;jGvmFlJEgCcrj1$F^jU0H=5?1ls5%6HBH8o3y#JaEdG-I zz^4ktB-}f7MHw~p%}~FKrW-4*P7h6#uP^iwP`K}MFvmau`;ecR`CXF1?4BQ~)AK_!jVD3&O_$ehRRL*LBookhq-*4{`w$PmJ{f|%B)vQwXvCI#k#rOmW4ca4o2b|J2^&>%RP7IWX>wng4Elkt?A>3mMVuZI&w-3fl!of#b!@Cj9n z#{1lJiKt_*xlkXhYG#o^Rmcp0%0uL%Zxj3I{dr}Xx5%bOuzY`+!nLypL>s<4D&&8r zHZb&n|Ie)ADe}+#uXVos|AC_X_hw$&L*?p(&gDY^bplt=ZC}2C?(w$#3#1us`^w7uzs&M$h_j)+dtP*)D9b&%gET?f zD=ziHLFRhMJ0jrNKO4YreOMo7Rrq5vjztNat>ytf(Vbnss-;4ceBK_q`5BLm@& z0E7KY*L)Iw9|55i&Zw`L*>?}@o~#z9Mf0scmwdRq_5X~r{Wl)} z2`)M#K#=a^qrcBhb3pSMe!XI*Um6Q)5V5c~ZMhoL9L^aIqy%gnRQ6pJCq{d|#o=Fy zd(8`7s-dcW7xYhJTHL>iK?iVlM91P&#MQfu{o*Ht9I@0>FnWD4Uxo8G{=VbQq#L&i zK0R-N5)%=Zq}IA(7VQ4Ae6cN*keWP5@ATbR-D`pyDQ-4aZ_PXZjwR^a8={=Zawz6u z6WwYFQ5}ctc>njh3uQxhZC*oU)yTg?EW4cBN|;E}UEX4Td3B3plgpOKNYo)*J3oGV z!qS+F#pT}{e6W}?S4DF9p&N%5p6l-ATjf*4@!)$?htL%LiO~mC>Z_^GV0P1b&}GYf z0L7ywkztE4(Bk(npVAxZ^7A z35%HYaTNuXlsH%hw_UK!P@S$u2MH23(V&d=#VF?8PEa=4n{?$D&H zM8!(?G5S5hOwn71VpvXR6W;bM>WqX^jj=cEs7m$Gc=MOlXC09zgBdq~cy*;`oRR{M zI;V3G8Yp;rX$q=P4qutktLuH7<6z$D%L&2^dS`{kHS(~~--NK(X!pE6IC? z7f=4Z9uv8{Wy8rSn|9VTN!a6tx3_o<^6K$*`J;(5Hd7&nQUX4mS!!%tcPbu9#dxe4 z%OW+kiB*qliVPyUGG8AADoyYfz9G={^P2hyWf)hfK13!f``43f?TQwVo}0cGTdC)R zz!J^}jv3GgNGq+&4h)1gL$|X)<`fm|j*Jk(QEm{ezueoC z_(-iiVheM*h{}zAzOLS1a^q;2P2{BAq96lVp$|jrr(Ot2cbF{D1%j~me%)DB%$VKV(!F11hdi%N6Kc=(D!t0PgJ&P zr6fEwG%BEkH6K;-P$WJO(OBri>zsCg&knJwnVs|&To50T9;xg9H^~02?9H-D%4th4 zPrHg`w(3)7TtMqzPvrLGDlqJ^y^qEC?I2;@$%*<2X3a6d_}LzPQ|tf~iq#C#U+Qq(QtS&^k5DNMX1kp?B zI@*#gr+%*W6usOPTUneUpqT;P_2`oAxeF!{PqV)-GjsvX#T1YFXN{H7W#_vbt(h%E zm1YDD&5aEhsgdPpoZ+xI z_%PY1F3LcP@qcvf+J~Xn?c#e=ATsrOE- zIUaVMBq>NGYHUsltiIFt%KO9lW4&As8+t^wV<>ea=-KwGNw(8D)O7nN(3%yo&dV(d z9cX}akPe~0`5QnTypyr$XqOjc!bkbPf?PL#wcaYMgPib~o z*PQfjx2*@g59(H`9KsXn|y5bh zm#G(Tz+b{f_;@n=RXAwsqD%%PSZ%vcGwP+%E;pxBqsP&@6k>jg*m3{8J#Uq_y37n6|xrxPh~abDND+DGNwM zc+XqXzcjrewI+M(V8elVqX03Fph5Y0u3Ub;@Qp9E)8@H0DMc3W8?6OG$ZlQk%gSnV60>0)xx% z6B5si0)~US54E3*q6rBbS@d?QlwZr4^sSjSb+A|OVsJ3NHbB;1-e!K`mLk@4{>3|C z$C1XAbW)C2*{IRHmlJd|C#&Sgk!scUfZTbjKgu?-HhEyRPoxrHYzWojq0GryDWMy? zBH4*iyD3i(BR2;`>b{u6bEusMQ_7U(^}P7CR-<-+?VGN5 z!~sjEM<)vRc;RkSo}Q(MQbBtHT16FIi!{UYs!F^JL@VEAKmriGjR&E6qsykGmSD;t z^xLe+#zLO_t~mZ_J}QyAJw~1ecTnoIvtmQFkCy;>US58CQ@eNRsuZHz(^hn)ZpLsL zRVJ|*uH&IDY&lxI+^BGIhz_02uUVhD=A!7A6P zBgG>^(VxTK#vo%x{F^-@V@dk@o;!z$lWvr(Uz|172E^6Y!n2(OhWFjQ6okuHt~GkG z9`a~dLQzSZhtrMTWEUqAH!#9OSOhj<_owtv)$$`x?}*t!ea*^P142>Dp1N6D7W znw-NJCNd$?Unkt)(czP?AlES0He*F*)68sB7%cpO-Y70snrvMC5)95n;3J8Ikn zBKN=TzH<#fs-?CQv6C`uv*Y5m+)RMTzVbMtJg@-921)te$X{GIQAE-F$%vS3xLNWv zHizhROsS2pfaoY?MLstr%LrXm=J!s;UZm(v1*b=hkvX!~y}Ra(iao@S4i}6l|8emw zYF?p(vG8u5E13{x!0KtFe;XG&Isa<=I*YZQ-=z)np|QQ1cb+PdH?6;hD7P4C4Giqs z_xjYk>U7#1Es(wF;X)Yz5dzeucB|W-1wVzRMl+stJUjz4||LGFse(lgpQxFl=BBc1N-~NqBv?} zqd7Li`{qS!&9VSS%#9Yt(#;6$%8=57dc;XfVrG*N-c+aKiL=4!Q+|P)MN{zW;A@ng ztNBUcQt!?zP8}0wC5BTNE{vU6j^{&3TQ8C!W&I5)*Iz#@os}!OhIz`}$f_Wx2sz1T zd%bJAhKJ`il;QwdT<}=A1Ac5=tcG{$s=NO&UykWCFHlN}Wu-N26ltGcBmTOVW%Dq@j;2zY88zj>~E-M0=1; zrrA>)fV?YmFx|3YtaJ<)x$ohKrx&A(B^jcy*INiN3H4Di zSUMF#?<#)#7;?>wMZXFB&|IgP*{-Q0eo>>kkCU4(1mDlN%A`u)XsoU!)_qN!Or_yT z!5kv>0Nd~Bd49dojhfrx@tBIf5=8b1h)*S|G*?4^FIjPy_hbBccb(m`pcjL3ru8GK z+qn1ip{3B2NC)8;8@ic}Ll*lVeDviVP*%PrBDp<@W#7jPQZ`JBzT4y(q9TgQNFRxS zqKkIA){uF{q!{)PeX&sSK`c*273R%ItS-5!D(dFBw=?2SXaSCiz6cQ=gK74}Zzu;eZRwg^{#?`eAjW`! zE;+tG`iMTKTzF=hkJJE4)nN0ZfF?_>Auiktsb}PZ$=q`0pmvSs4iEOzP%Mo>orS%I zwzHG^#q!D&7tvcrB{|V}>RR_{Ty5^|w^|!h#$w=rdO0jGlM#8+Qr+$A`RfFwB3~&L zY19xwqSFjam6JsD`J8em1!Kp)UizBS{)OKxa&jYeg}Q7KWR@r0PgjgD1`%RYg2kH} zT4Efcdm}M#nF?K}uy=?HDbDxAa2-e^Qx^qW)0^`WC;@n~KhsmgvHLDWPoEWRrx)Hi z_ArIMl#Jhlv3UMSLr2*`?Db{$nhM_X35kgQa2aQymxVI(@o$EaNfeXY%FZ-JsaH3U z2g+@{E)#jj+Zjsxt+Ee$BLx!RbY304_UM2uS@c?7`niHfhjhClif4>vV+a6Fb!52P zFNhiwvM`Q^M)8wG)QM|8Hq(X!=NUshW(05&KW)~$f|B@sfh2HvBn-cc$(j(xygv_4 zjg6dd12|-MYjz#F=R>AX$F3Y(XzCk3$pOiX*&sEMpxN_b>`NxD;f}NW2IgvgLBtu= zMr88FhdaNPTjv;j{rr~YloZlt8=WW=06VdNV^17sy+9+4f&8 z;Js3malQ3m6NjN#QygaHV$axNFMmzaMIG`XC4Tm{dga_smVvwq9nT|C+QHMZh7H|W z()KgS4*Ou@(-)SOHhMaRiMv@@=v+q0;SfS9mIa>Y%K@5K$i^vca5(E~ z#{f1E4|vW-hl|vF+dG<}D5tq~W5aKlNjzRD%Tu{P}R*sX_E%dQ0I09uRL2so}uTnQq>9&QoZE+ zGxUkXnb;`Ta|IvQtb+Ej$ediB7#$!yCMQBU!uJF0Z$NZDE%o7|N6lE`vQMAho=fht z9uR{o8t}0km$Qdpj7lM)GEPw|pVu-M7DVfAU&<35Ww9QU1_z5Pt5D!{QxNhhyOEEr zj>9Dko-xaIH&6R`uMCEOT}|3vk4S-}Vf|e*MXDnqq9F?*y^$q2gJN<`lo{S1e`ApP zF~iDI{==vD4HIE6n-=>&4l;Oks1MmBa-t178XRbcWRwpP{!0sM8Fp{p!n8)7Wt*Q@ zxm)nPbpdBdCaHUZy;#_3qPm>XbLRd zsCFcmZ-@M&KB|O5mYEIk>N{-5#UxA#+p)4lWbw`est&bNW4>y?{rKFGL^qy?& zDd-&l!VN-W*zRXS##t67?~vpxZ^*0>7a~|hu-=Wu`VQ#&UiA|Fxrs*9wv`$I4;2(4n=PMs(aVExR+BWJj@_e`bvK8T3=>b{1kS8D$ zF2t1mq@n%gnN|2Fc5K%1)5G-F zEQs!^uo@#dbOiOia5t86+ALoqxDDPCpNjqmlMg_W*qvI5Yk@Dw<%Be}B;o{FMq!kv zTXCMZEy0Xkn~yhC{V(PL1ydUF4ORIuYk>U}QTXWwb;2?^P< zaYT7CRaQt3>n->f)gHXrGOS!&OZGp62*oL_i7(bD>Z>@2)^bEUAlA+S`oYI-ce(ZT z*Hd5jQYM4Ae3;dJWpyO|;D(lsf&Z+b6STShc&zKGr7vhv+`(&op=o^$fUDKY#wyQc zO4B5 zhFlj~u{F4DU5qaV}2Z+Brzqpt&h~>7%)kUE&{>IkE&9e0R9h!yNau;(U z6Z)R3nDX+2jo>+c%7rXehzCjh8E; z%DaE%-2|gE_QstX=B~#Z2D(DQ5^)at&@Pr^cI6HT-+F0iyQ<9B$N* zUlz%zE#TqbC9m@{T~8nJh_DO~D9i})+j%PrZb8V-Is zvp9;o4*B)(oJ=u~7Bnm^F{77<0R+?qGHA&g{WCU*~@dTMu>eB>N?kD=5qjqxojdgAlTSYJS zIHcYkwv>I!dIlC`yEsn5HOSLmIpkG4^HC4Os1LFLP zDyR^uLUmecaA;UtRsBoo7c;tTij3*33wa_R1j!L;u(y>Q`)(*0+dNGp!!E_6}=0v0Xnci4QToW>uT3l7B+R%gz^1O=utS*nkhnJ{)eQQ|!tPzK5 zXgr{WJ<|E^2u%}cZlSb@$o57o`QgKxTE~W)7hS(W6P?)OjrUuUOurVRMd{Kfz@ULo zb`RcvjCE=63{fw;r)teV;riPkk&7=r<6zOBF?{7_j3p^|MJoWufvpqgf9;awfE3WfB=g!_;ISp2rsD2=stxp%_ zo6f4Fj@cSP!D2Y*#yh?4LKNGZduU1#r@wZjCg6?&_?xfyK9Kj-S2-tf$fA0`o^KWv zY84?WwL31-0G*Ex>#ef2O66@6-C}iu``C@69)Zj7hAl$DF3jZ5hW=IT~CLRZES=N7$1q1)p`?Z?CiN z9#xYV=v)|A9v5hURaBH;b+gV`-miOXXlG2lH#d8#O4#7_(A?ZC{Y=2iV9EqBznhS1 zV5VPMklJ7XC^qwP*oYE=PQ1J|Gwl`wDT$+#G^hqVtgo-j(92yy(etnza^LcMo{dnx zA0Vn#>5ry0xW$LSLtg4UCMFT6J4gg%%TPU>CQ4N0r;`8)Q9Dpg>CpEJ04dO);!Zf1 z9+|P|cC&OcFwhEUZ7B9+T?D7(jX9vc;DRgP{buWq%hYbw&elTj_ZUAGJQ3jm&m0r$ z%&@y~)i;ZJx1A4N3i9cUXoiBQIP$j3ZmOtsc6IF?Hw-@{wfx><<{eQi^fP>E??jhO zSHzC;rwz~UFLkW+NdChkLFcSi7|@xRf@_hazu8*@z1k*m(|8oar)1c}+Eb9+hoq{& zlWZHv#C`-a`q%OSo=P6Hh(LN&@>8RDS7B;`;6E1DIn-gO_68f3$Zq3UD7i;JO4M%< zYkG)dZ39SIj?TlI$!5#WIPp8$BdT^NF?OpQ+FaYz26Le0h--D8SC<^iw|qyZNcW_> zt4BtgrmRq>%DiF{nQxk-Kx+Tc?18K6gM-O#=1=+-C2H~6U!>G5R%TDswShUPAg}99 zy4@+;v&NsvH74*L0o!*cj)(WrpnQKeDtH{9H8kpFTNRtn=z(knL<{1kx|BM~CDl5n z+uv=$yP_ZuLk(A@1Dh!7-OD}A&9q+EH~BUAP&QaEJz{o8#P>U=i(@}#tt&#iTNracQdh@OgeqPXq^uXu6jz%XokEVEYINz#^XML=TiY2z$o{qP6;^u0D zSclsEP_H2mw?7bU5@F9SdPc^j()m0zVHo2Z7ccZl2Qb;j3dvv~K*+GcscEA)w z0JObD-(Bf?zO*7?<4r-|Ya^>HODyJ+QXVa$B*>FprN`mJQMC;;Nw`^>Y&y33ni$wN z$TupjUvVIlb8#m0!hoSox#YE!Y**57w8nXZLk@i|XFlwgC+%_Nr>q}w zgb6!F4OgA;In*;#RDMr)XBM}38;iAtg&7MjQPSG0ZbJ;gIY(J2ID5lYBQx&@9`jsi z#=lxXgb!5<&ydCtw;Ok8az(!B{Zg0$VNEY=tmLVP_UqSrgT-&Acy$<4%bW_#$&}pe z+;*O{|3~&nSOFS$0(_iv8|NK-)Bxphd3Lykp2Ffu=|**1{xC2B;M!)5o#aW(59q7y zT|)2Ej000tz$mStaI#JFgS*iQzQW>Xn`jJHAtMPl`nTS( zr+Qj;Sm|0IqW&=|tE$D%Nt@z#Zu@|W4+{`{O1QF_|JK0}kV4637|_+5a5KGGGNv{+ zuANZ3Xhy;Um|w6@0l6_glWUp~H@z^tLYHC;?&o`v_(VWdgw?-93#nC?qIpwOQ@yvp zx4h7ylva?Ao=y&a@elD>bDj&kzDz+G;3o(TahN{NH|%iZv}-i&H#b#?xv03Kq2jZ} z0C%@RIsoK%TB@8AprAe%+quWxrp9r}sRh_ElU$Ox7cS*4KRuRLR#5je(>ARZUuKVUVG9rpC z?#FbKJKF^*CL?7kmWRn<(xUsCfR{iC7n7*kYq_W&MnIeKNC}U&L+r>~(y7g@e~|Nz zAZ`dQ(fpb@4R(i(Cv|O~ro`s>9}6-b1oT4EP*E)hhwNhWOu3`fvhPWgKKnM>0f*7i4sx+~9cU?tad;U`R| z*-NEEh%<&7%FU(8D!Enjj#26&K>JiPiCQ2c0thb9_hsA~vC?utcJEEw0s^~m&E*50 z-l7-MFKC2J7B#IId}QBn@$Q!O0u3b3?ZeDNS;C>dt=_F{8~iV%3Hncr18|!0z~tf+ zk!(9D5j&|BX1&RB#okqmJ4X?X;$uXdHOj`u#ZKXfLIzI6^%#Ze6_=?Olb_Gx;DCa9 zk&4V1jnB$kjfknFNsMh|<=H2eH0yPCC%yt9Xa5Ioyis{rNgPYG@a$c)Ss73gOg@$# zxW$*glWHscBxCFQoVgZgG-&+D8A`3yP?JLpRi9z`)BxdE0e_`uuXw9CW+8_0S$TA} zML}s+-YGBRR^fBJ-UmFc+*WqFazGMSXIXV8x*f#r?nU~j|7wES+?u4{@&+7MEOZcj zUn*<84QaFR*7TqSoXtNcG_?@~3Qh=}J@R$xx+f==edq3qAuATM&zh2G} zsJhBu6a*+>NXxMr)9rY-3BQ8jxf1uI0`+Wl)+zheG?O4&bH4bLgou*`!UhnKZK`*y!r-#;*nW z*=Jb&FnEfWUTXz9M~4HTjEjqN6_d6%*DbQK#h>X?dhfi_waU5NMcH1o+WUfcEbw%Zn}xD)@s-CWs-HXUAldeuSl6Mfx!3;km{tVQffyxCHQ1Y zlizCfnM)qLM%phU-8&c5ZfLy*S)ao9SW4i==6~LgDm)elcjMT>M+c(^2jf0l=P8UO z8VaRh5s>~9|5?EJfbUN^RnMO~yVAdS5Lqnp*m2pnn8Yo$1LHTU4pzl ze@y{K0j7Jgz;}Y`u1l--CEJ-#h)BOY+vED(^DWLVJm)y|_Y43UkxY)v3g_{L^6&Ov ztTOe%t8HfrX8>%0B&0rDDODQgWwR(KDfW6hVc-3=PN0tHVO!4#?;s>ak%*_GB;{;F zu5-^V2o$!%T$-^&>X>xgR-8Ahq)O4(7 z8+puLGLPy`Ovy$>f~dYZ>?xNhorF7+Ms_G1|Kn$WNmf!}zj;UV2vCNQz3tC9E?nHr z(HSwPK!Y%-+aops=qPx#o$p6wYD~`wt)8!mhXW~kSjzb|5zmq0Vb+glx(L|k`p=bVRWxpud$!}P^+r6Nc3gPHEpJOXA+tmIM6he8Yu%2QTL2rd~Y-Mb~gBzPtg z*Nk60J?7%N3$!tqC`-tzK0iv%wG$wBuryI5wfBW9Xvl;v7!Uft+K@YoO*m|VztbEx z6{F{Ru93PH^3Kvkva3wF@N}z3`O81B`3JxvLtx8Qvch*03=}kw7?Tv^eWqvhI{ncM zfY&vfvc*$%mguM#oo?p2Q$aIfzk+NMK2`)CX7G4^+cek^uJs`>+^DhP{;O)kLVXX? zPiqv7FTZ0-mOjDOEYuLu&+aVTXev;e zr2S&`%vn}DA}=B@1m1moq~UeOZj~>8)0;d#F3D}=+*#Q@A|x5tZ72~y9~$@A<~Bs+ zWs>pq0B^u@u$D#PwkKsgZ!n}AW^u1kOgCe_{1P52>*m+LtfE1gp3zB1U# z+>GPh$s7CkKY~8Kok;LpzF7%J-~ib#^U( z@R-J{nGSr~2HaeeARG3$Eyg3TTigDIgV&fbRp$?XRG=sxL|B>>qa@?eKcT+%Qa;@& z>Kkx&PLi0P?401PAzVU##_826eOe0QZ>e24{n)dtQcF!G_1 z@0)YZRg^zB`&5j(m85@5Um6>LWtr)0baTscZ3Rey^FmA+Hb%3t)6X zEdjbQZb*p9N65l+iu`D4F4b!+o<)nzf${->jYOkMtvrUkqo%wj?+uHW5ea6@B2Md; zNYSONoTAB}nffc^k!4ERu9>Y)Y3${(r?dDYLt1af10vzJyTm)6ZW=9Z=7>*EWtNFU zb8qN1Q5PTrgmKL;^F5x<-xgwezk=lv*22>=(`w0mzWUc*EB{fQVuOuFh=%YY{q^bXR|_*$nPVqaYb;vaue1Wy$+(pY<3GmgYq6mJWi{hd|f zzU6w_9gnI)9W9^XD@kE1VJyd`A}@j!rdHvV1^|n3jNWnuLI~YGPYV63X9(s#Mb`C` zO}f<*@&HoqGN-9y%XKjHf#pbH+Oau+#SP6LyaV9R|DhR3Ng3w8>+1%vjbOZ8$Dhz; zBAJ%OM2%pfGX1w_2;Mj2P)QiV(U`j5Ju09_%FSGb%IB*2#{bB*8yG>0#m;^R?t(Ay z3NRvqysLBXx>^YNl*CTjgYIO2JemNeY58^)@}fkRGK* z)PARGwE{kVYOVZuRtzI^DdJHbdToSIH*vto|cm#7YA}@!CCV@Ei{!r%s9VvcG%; zYcER5p;es~1cL$eemhvT=D(!Xn-R*hIXYz8v!_-(t!ytCf24DvyHnRcJ^8~0+JP)t z1akQ@@sgL%Y|;6B7ngudhN7?sV40TQ-tIFy)x?)N<6vY0`#O+v1Q$kxtPd%N>y>uV zI?6`B316;!clh)*Gp&zV(eEs3>;WH>eQM>(B94lg7*V{3__p&ok7_{j>pS^!G(40=>bAN z(*Wnn&6oVDaf^d7rFnTXy@icj5G z1wZFuijx~Dx1eAqR?nK^b$QNwwdOZhYhCzE9jHq~I)nZV?EQ4Ur>SX7tV6d98dZ|| zybLl3Ar>{LSqDpd$+Y;mp5ZFg1V!|7rj_OJX6MKfreZ|pos~eOC>;GHZnA*8Y?q@z zN83F9vaW%>3~*N;cs88cQ6O@|J}M(OW%XG0G)27|X)Q#*U3^Io7G;GSqQn^I=-L_N zb?1TPdz-C7JKW$$4%{2zH&aUtfL|~a|NWm&Kvh1jUo|12w!EB`S&tL3ThYbhoBKqd zYO_{3uh^q^!q(Pm$WMFrgzLHZ0Y0Q?G$(MWtoF+rcnRP>GSrv|&kK({m)zEgG|ux; z-VvP62f#(7!!1Yu{PcLD41Sm|%^scLS)*q`B!Y(40xjYcH8fY2n+-5KWm|q`upKZ1 zy(89VtQ>XLTN(R|gq`hYj^io|fKv4Dgi!a+iv6N9|GV+`qZbxOm=l?UtADUl%%oxH z)|?uXmYtO+o_5b^@4jP9-oILaCY#MNvf8&^+DD+N$5n^<{PwIjeJ`V+PbW|F z<`!R{+pmWCEegqyp?rAtoht=r2!;%Vi`=iaiAPL>Y#bJqm6!?ud-JH`encau8TG+V(dxN_Wfw^C^w!&zOZlPr<;KzF^d1+LfDIr!yixZ$|U ztJ`u)RK_tX~FWs71+b{+f(BMdwb_N@T+wPjBfvI_}+85NNxW! zW3PpjBGVbK7NXC2eE7dxGSeEY{@%Yqe3mQjKZ`7A&y3>WK(*&_vwa<&+_zb|yZYTN zo@0=#+Vz1UJkpiz_^UfuNV~wSCnS=31dzyidhK3-!ZzqsiOY81X=F!R{FEB#3>E1( z`>ogm+r>Ht*UkRE^aG=ppUByU4TD}#cDdmqZ;g)FCc9f1Sz0@%aaBtA1(o(s10Kk} zF%LO3KmI1i+iD7)WDgslw0&(#dWvOJHoffa>RLB~EVe9rUzNe{V)H_7FF3j1DW*U? z*iT47yOKeO`W5gwUrYFvXI<=L$+ua+FCF`n=x@EgCT?)%~RK{d=rUiV~ADa=k#Il**F8D;= zXRV>~zmcB65_T$)%acV5>uCW$eGQ%8lJOp`9(*!HKBOD7B0xM#@gsb(>1+a*!t=kIK^X%*iUXb-nB$$chUdHibw3#RX!NG0UOvqZ z^ju0i@O6c>16}U*X98USD+JMl010JC=WWoXuY5X9wwQf-b;K1BC%OZ)6b9n+H$8A~hog+yOyD<;-$Mbc+9uV`d%Ea%mD)02 z-gPrJ5OWK7qz9z4s>90M2b(;Q(vojRZ{Du;1hoKP=8tK1=*v2fiHwd#H}a*f_fFacIl02#-AwlNM+bCSrCrdt75@o%VHxkBdUG?)5xD4{K_Z=XWN zDk(ZqytfpG4rc{JXl&$Z9WYix0@BFi1ApK4aoJOR}pyuh*uc^_F4nB48}} zo4`pwR^P)KwYwkrmR1iN2JBFOUJ6+_(que84Z ziQqMPa&g0X+f8k!Bo3H$>jq#PLRum!cv$pO#Dor$IG-3p7t5&sm1ns9fe)9ZDUgcX zp{XhK?})F9iC!phG26VeH;n)HP#kJw{y-+uS8_kZuP-X#m}Iq&Nl;~eMt8!KB} zs+Tq36tm!Zka)^b%5g|1Ibvd#8i2M5G2?z9p=*VUnS zdE+0j0Fw7>ewO^n+hz9CQ}&CMn#dB%1D56`w5pL5l3fG}Qy$W^H~BUN46OMB|8)Nh zA(Uy0A0KdSLyKI(9gMF%OG+_~DyUohc21QRClI+ku6dlK?CZm!@oP}+KGUy(WLiOy zHcCnt^TcIlhL@T?3%UztgOp+9b1m4YU-oK0gJXVc6_bmeDXGhk_9E$eFi5p)tl+Hl z?`^>SSkgT&iMn&QX}jH>=)6C8$^5pd0M-twb*%9Grphnbhh@5cfUyfg(GXmk`<~`nJ z^=77(50H$bd8Zuo_U(Snpy1J*(CE>F`ub4&Y!aD_&^7zMHItm=RLSuwc$<^o;^Vmc zDvP*U@aJLl0eis{*~SXpVMb=N6Ws_c6DgA_PvvwSwKRX@w*8ME%Ugf;sEkgj*;mmC zfWFYq5}uQ~9@^a#&gKgqlgta*b8~ZJuai#f>k&p=JEz7Ww8QncGo%?Be1#*RfCtdL zl=Ik*U6q$nK=h|PfF4VtDbhTeXSV`WyrgEP`;GeP25FuAFcd5)FMDfY1Gn0+mnP;@ z%1t9`%6zbZtzK}Z-zfdfolI`~3XBIN~7?}DnkL7>P2Ff-AYa1jNJD9uWFHy;UNk|~y4PM%+ z0CD}kbwN+7LRyG%@ee8Fz2e-s=o>NwKY!m^caEA4jV$#z*&3|4;9(`+YqC2f;?OLW$+cKPg(cy9Xoz3I(26NaD;IP!7nhXkUX*bmTg zFsXu1TzE|W$(kWqiP_4?X*d;B%(2{PtAXA@a;hy+TFFPGoKrJq}4 z%(MQm+PQV5>PKB_hswv`U5M0~lMbPv_k%gIEU!E5s71<5U&N`9dC0#sG=ELLFJfKf ziMsyB)_2QrhBu$D;tA%BYtH5|GNODnb=7hVcU@fV7R+3)T;gf67t7D4gV`Eurvc-+ zGq^4Ss2SCnVrSAxwf^sT8ix0?#vS)Q@3JmN*B!81F77SQ3;&5!0Hwx>ot-EyJuM|O z;oCVSY`)jlm*80_KJ*4p`C%;XDgP(Sjv;qbQG;csZP!)}fiVil` zF(qT~f-3RzF)hn^9{H1?1A?RwX9FEp21~k-Us=|*KNU{Aw2g`AeRR9dwWa0Tfu-D` z;PJ_}TbTwlHv`o}z@IUaTH|EYj|o>K5q!BK-(O|E4reS=+JaVp z+Ze@Iq|2l0JrAY%JoHEEi2MRNVU)+^I;(ggFjOUNB_)IeL))2_7@i}qp~n4l0-Tqj z94xv%a7e8o>^T`sSh(KwVWgkKnH&3@w4g4}J?+j9snEq+VE&L#C^u{H#BqTB6r(hI zEjEj_201++9@K*?(0o2GxXIjaiq-yyVbj_=)Y_NTLu#JczrXYz=kkbLpuF`Vhpmqw zxj2psQbb%T*$Co9G$X+|PuJfXOjmy{q8-Xh((f#<42da%dlY7B`HLOBS=Zjyul86( zVJ@hTxF5abyy=!&rpSuqoiRg-J=M5&S6$Mp<8!Z8xTQH1D=BSKAs zc3k`6<{4pCC3@kDxt%xap?xy59RxG%S5F5->@0ifG6HIdkL&{Y!T6wbO~VV$5xc|P zjqFN@6J+Knt9c`4hQ6_*x-BJ4EwA|;vKMXj=@R7Kp&q#G550A827}mx-6RVV&OQzN zD`^jmZdDmA?fr0@IH!&M+_W#iVPu3#D?#)q@?2}JsFq*=KQUMNq}5>eIjPq%##_RH z&?NJ7_HuRq(gJ25Mg6X4(Hkq`zENcP>KW-wDmCi6O2*Mu2LcKMpzFaUo*X$K zs;*zVpjk2qMshmV4Jd%bvri6^n@r+Z`lyEB+v`+T7)>WWa@+7zj#AMomOSq5gM4IR z!Hmk06=E7P#QbF+H-G%qpW8*zkiC7C@XFu>)7P9<(Ff!_ID$UXnRm1ioFxym%y|j& z@bL-091|%0Kzmsh7|f+`aG zUm!o~`BOsP3w2pq5|8@Xyz_bd&l3Jup(uxVoultevQcL0ZJ7iQK|yf}vY8@-w#GEN zU4zD}Q)k2GDRP$fc|ByYH>Jdy_H2RaiS%RG-(ctr98*Qs871GYDil7kc9uVGSTNPA z>V%53|B~`Nvi5-B9OwP-PR^mvT3M={;ZCXvg-F7rwXe*G>BM9I_q>kkNo zbR@rJHHmF}vxvyl6w)q5l`X}w&QfMO98#pWom#Q8H`fqQgVBk5&zq}28nBYr)U0~c zv=h7^*@{u$Kjxf`&%O#eCY#kV)k4D;uzO88JY+(F#t)i9`PupSIK;c?U=p+Sg8`n- z*QNYrsQ;L@+I8)(^b`iFZaj~SjJ&qNr7$$m_B91>P_W$yJL84HFFo-}FQhB~Ho_$> z&U9X5Zsj5}INtlD|B@GGkyR8C;y{`;9pA9^9$B>%*9;l!Hg zE|<2%EA*Q4>G8x$bN={w_ly1>Xdh>#)Y6oKyZ^z1m!gWue7=J9CWQ~hE}JX!b)rU8 z{>e+HnHWS_{nR0rr|kRqiZBwZkO~r@?sAL`SgD6Jjl?&#u6WOvRFkZS{iuV+NeU zg5DvhWRg7WmcS&ffK-gIHO;y$lkybK7r!xuU!&z+2|_->is?ZLnQ|qcGR13(i9&GR zQ}LYmZf~fo9dPxKos(%7qS05*MG5$PNJ)DwVWHxVj)k2l1r7gRyYgtwKA;okN4lfm zC+*fHj>xc94@t}zfDvH#17b$f5ahmVghaAad8(TxcXOz!GZ$Z-s9N1 zkz#3^%fxBv%aywx+>?E_ExW(EP`j3bF$K70Ao40#T-c!ZQozT?XpH~dVr7hA^Dq~^ zX*67gdFdvrBQ7^iAnVRck{4r+Vm^->$lw>|v#AAB?HtSu-#!Qecsgrw3 zd10DpnxdxG=agw#Q75z#>t@TMTqQS{XwSsUG?14$E%%pEs}7tx!!v6t9XQwsnG zZ|5t`qsz|?70#ajv$42lV8GRhIU6Clg)z6~hs4+%hP#0d60CV4ksFd;t!v1&&i;X3 z)R^Ptn)i6`$xU^WlACB<*kd{Y6o7gIV+)jt-;U_^tLx~$=SAj6X(IefyE;doMfql?wo{@=7xG zfj@I3>c>JED0WW?*59~ZX-TR`18Y!$zBQe-p?*;NmBTn?a880%L8e&J4djUM5Y|x+=MDSz{ChBBH@? z#c-xDH%U*0O|-X^0(clpeL_OKj%A2p^OKIA5QgpxZW2P7sX?IBKy`4$7gM| zs=Y+M(_q|p^SkK2RF-gX=%|&NBysmEktxEB0FH{c=PS6v^f@&{UC65ex+@+j25Kx znR%|3l9gIgvb~c%n$rUQ^E;+d_e?96VuQ;PSY9R|#TL&&|2IjjzBjYnWVze=A>p*8 z`&{I>CMWll3QT!tdc<4L?-OsWSYR|V zK9=Ro{pRm|VnOeC5^c$8g+G`I8B_0t2Zz@lkU_r-lm1DyqYjrd zvDP*N46E_Qq5m%|(x29cMgOY6q@HtqMt?Vt46|;y#h>@oI_L-g#J%`?BVFb3k~?Hr zPSi(S{$$Kaa%8yrwb)P6)#91|i~)QYqD4|u(TE(Hn_+(Hk=_+Y_c8;{$tb@KP!Cz| zG5u8i^A=&GVYw@@sGOL}r`TrxSPxr9-Pj%LHKm}x#lp?30fS9UopYq2YKR_rF?7=teKxdcx6uUtNkyWbGYTiLVkBSPzJI*Qmzpj(rZ(>_o~RGOJb)udR5mzCU3$SD zcS6t|rd&HQCBJ@5@8Z>&xtV_6%6+@m&m`}oqX)~D?YQ33)njdMFXpyL1W2^}4{y@Y zYfTPsf0-uw`8PjnGDRb@j*-8VQ-A3DELDh5vh4B%&d+})fu3nF>h#}%Un6QR3eE`f zU9~lRNtCj*rY`m`U>x5}N6tqTj}NbK2jq}J(L=s#^sln_hP+FT%#|w_)$|X)#ROt? zxEE)4NL*8~A4VLK@Ba@2{kPJ$Y{(r1YRuE*OIwAHdhJ#sFyOg#0-s< zx1X>1S6Xb^Eb5+v_?OvOo@^JLf zY<>NqbJ|y6lM8uro!33Q_%CSy z4Wh#3m6sj|V{uKM^P0>SqG+!eVV=H%eL0T!;KW-~-Vrz@oDM=O%gk41U{ph$L6w2X zFyn^N{62e{tKCv0OkG#ED@r{>%=T%B(iMpm`pfl&hb#5Ka%k_QDQhGShYAd{FcyC+ z;x-j3e3+;_!F-`)i1sx-wPFU=$cZ%A#>f`ddMun8i&Q)&gdlv9!IEjyG|OQPu5)pe z^ggMIVzIqB?*}J>3@8#z?KH-hGN0z zc@RD2AQqZS?L~b|@e{P*`nvSygVj!+O0A3E{NQv|G*TFa*${-6M8&1nSE~Xdf*O+y zd-I#2jiqikjx4!_5~?Z9X$XbK^j>z56(u!Sx6 zrmGkV|IW0kTD5PGC}RgBgvk>)ZU)XQ2p(FGD&3~My&lc+4*McdyW=H~*-soMVKdlX z%U)0zr%}SRNTZy2CNwfo&1`QHclkXl@59>loaxNu)IryYVL%>{8#!#>uBoM^p_a4y z*7z;&sb7iYFD)QVHo)_O)ef&hy){ZQj!|^>A$(ZfL6*{wJD~XeDx+F{Q>VJ(aD2z!tj8@0ky>v*mlME#E4r}nr z|MnSDS^p#Z7pw{TRB)xWoRgeFk1|W(j9rS-gn|v8=Y47gW(7&wFn2B&m8sllauXOv zftCp$k`zlc_9)zY`b%MesU#h^9}H*oD_u6QBh-&~Cr$~FoUh)ab8D5Z4e@DMXCHvKPQBX0ef!BfLjemPp#Oy$@c*i z*(g9x3HiiiC7(4})$;^_a%|R$xLf<{qvqmFZb63OmEc>cB5<4cFJZ8en^S zYz*MVtvESlE^rxhkdBO#IF4J@xI;s{I;d91H~Fy>kG3T;quBTKbr>T5mLJ$K? zoSt*mo3O6N)!yiym-mNjfVKnra`>1eB-B!m{bQtlE1vpg)IUTxQpR4LG{doWv z6j2Us-JkD!_4Dd*lTj`KBTfwO6v+zJl>9eg!>!$c1gS>l{EfTcnhCOFKQJ<`X+V_> zW8qrdc7~2Y7sptc2HlOQhpaH1|CQ%TA>;wQ_bsxcOG!aaA!LWH9GY^K7J2-+laBPMoHDM5T_DAW$MG&WDPFy_S3{x41~iZWncxQ5U8-I~r{3*e7`w~R9_EhQ3C5grgi zpM&^V=m&n_b0&iWMC(n>Uz<0VAnZlkm3yx2`c=D4LX4VxM8yN#M zhUq5c@Ol{Z@&Cy-HEbDwT8!dVfF^B|=M z)x)Ugd=%5zB4H0NDKR8k)Su1G?Vr)R{%CDm`xwf8v4bQhniOlPaZC1v&p!@;W&X9f0mw}xfmFRnF~n}m>Kwo&Zum%{U~C7tFQ&RW zEiMdzsj#`W@bH}FwKJ+}5E&tmhqyRs@Nq)Gu>k(SV_rUZH$FZu1_MFn7AV0}x#+@h ztZgSKKZB1c|9#!)YNK-QPDo*L00_eGx&6O5pviuIU~B3&Q3=Hy7EX6T^lHCm^3Tbk z<-XMD4pLt!a{npSO_|FHn8Bd&dh=NohElq#40fOXG%S&@CCM|py?eAV{g_x76i2xu z5Iab&S5>&P>o;mZ4MibUz-8vgbA6)VbO3LH%go@mB+5qaVQ7Wz4=;kXB{&X~@9@hD z8_jI=Lai`$t9Ow@Zz_B<6s7guW@`JZCf<%%_$Pby>qMnMQOr7CYr6cU+}mR7onWH6 z?pbVs4tnl+mz!S8vBJfqm+U5cS^ck9J%4V&577fN zsW*%1kVNh}+0}!(!&a0D)3%TEN-eq59HAf zEsOQ94n~!lVxyW=vVU6FcIUe4Wt%YRHs3a%1nE(4Uaf?3xS{u|7EME&ntc_q>!;lD z`@RlEL*HSlKM3iEudF=CyDs>sFQcoO7$?>np$?t#-g5($=|t%nt;QVJqEV$2d%A+; zwFx2QI>rX7MB4I+w`h6N4`iLalwvLyjJ6zwFGF@Lj=aJ_0ukzG#oPimytY^RW0&4` zjSvESh@Zr9+MZ@_4{Tpey^0rXZHU{pW#UfJ`D{Ep3_nEZPhXt|%!;Ga{u4tq%r4Un zw#E!I*&03vw}x|PJGuZO;f`Ip8UMhuZs17Yq=GAF{_g$V2+2T{O_9Fkn8N*tEVbK zFn0Fd7CGk{t2R=8md^IK_DWp3%LYp_dL%Am)`{RoVl% zio>Sf)bmoVCrFVy(?n{;DJ zUQKo19l7t4Zp3@kPiV*V4`LeJkDKrHWWs*mv2Fsrb701@il4z7=V*Mc&Rc0~Yc%%x z;Ua3fOf*#&tiXU@OhI>d1V&0J-vVPIG*hje1$P_$n7{HEkck0&%s-04GS2-ktB7i)`T||5ZH)WuF zZmkb^g6pHo9gF$*Wh$LY0|m6ez6Qb=@OpW7Jy(Nx!=!(aco`VAsJD?B=S z{{DuvgSXyhOxY(}PFoy8@0x)l)SMVv_^=ujcF*r#KWXk4)cO_5#VecD=gvdpTzZRx zYo|%z*sC#ul@+EgLnY~4wx9qvTNs{iZt?n-svyr%^ z^O&^fw3D9o#D&!Qf4o|_^P-aZ@W|4@^QQyR50i3io+`=f*BxW>0nZ{e;(<<+# zt-1BGS1@>lKwbwhaa^Rl?Kenu#@rA~x5}3@?jMQiCMV-|OHpOgCF~Me)GRU9$ZAMb z!yDzLrKVkvXfvH%JBQ|!BO&**}n}9YDKQAsR)y3Q~ z-iHkhBbKM?+|JWSQ_aYXO|=cZOc(?N)J*COF~LG(uVNU4vcb2caB^>pXYoQKxH;*G z*iwf%#?(Ua0iS^C=mal6#d4>f(j~;OP!|)Bv2mmZl-GG4)|vLP)Il zb-G`=yiIZqTa&%_S}losl_&jrKQmGFlbHsB(UMoU6_-@m3)eXv-Od<9L9HyOFv~IU zwa9;P^xDypgVT{IiUyC2U8=)B9o34t1D*f~&Ab^OEs0cE-i3^x^4sKn)5j)OHm%bc z3!%xG1cK_zi$Y1MDYE46j5=df?4F)rR(h-2I3L*1_Gj7VeuhYT8V6u8xJ_RrovN99dWN|L`L%b=H5rXcoRF#vacFj8dGivzw|EBX{&gG>;<^g-6GN6 z*Eot<;D1c(&GcW>Nke3`xuhgLT>l2~wD9S0^=bflTi{qkrerp=es7)B1%8Aga~I%y zYu49d*-Id@ijR0df@k2RF4&S4;NvDrTgC=KoR#x02IzS{hbRSm^s=VkEJXvKrmxO0 zk|v(q^kW+uy+YM-2&w+?VEf7^ zT2X%2qYDydBv|Oukt16y2qeKZo#4VND^edW5-;82+R7@?YB*Rvkp(thWg~U%wHYsD z%Bzk`#oJ6?M=t)-0+4Zg0x#!vKKekbZ|_M~wQIrl6u|JVQZsk)anj<18D4OXm=~=E zC8wfV1~_A{k*RPt7T=*R$?f6#?TN&Rx0vugChuQYYx2LyBU7pWB zNFPp4PU2p51Z>?yrzr4hxxgdVtD*wL4RvXV<_l*L^Cso`JWDu` z2IL|_A7N3bG>z!d*UY`s#Z=8<;Z^^epTqeQ{bIoT~mKJ&Ad-JsspQWD-&{ zxLkxVO;!kuHyTmPV&Sj^Aq_dLx+#t64XXXFpS5O#c=u^S16Xz_np#B6TVYte762BQ zP^74q%Y$F?1fTg0#{< z&o<~Oh_;jxR=9^2Zq_X<4S-aCQVW4zH|JRkeBO#S$w$s6oiwq2NNG#@Rdw;**94LvaEDl+Q+}bp z3+y3fVV5`F*SZ>;vjW6Tr06lt{yXzOt=%2hx5gpK0MjxE^(1*zx6)z>>90YKOJJA=;9?MHX7gC$21 zNfE_s7Lu*TF&Fq zYZ@bc1mkS?aKI2lqzb{a*Cktkit8j&?F*T-FhCm_LQnoOGK6<;V|@(rQxtoZteV1eY8CQM zt4&HGQG-bUZ!gy;`5W_R3`Q0h2ZGnrs~Rh@_Z~7P?=_&ei*IUdh6x1N#_w z323ZqFB31l%BD7fN*g#ZY6FKXY!Vh>Wkn8FcK1;(gcok-$UJjlp*9sm9aUavXC~;R zQXveRjOKiZdbIdum+k9A;S&sydVy&AKr;k6M&zEvAIl!RtEc?ZTQ{i0X=9S0{*G}| zd*M&IFhA4nT1tY#(@+HSRxP*vJ@Z)OU3&WV%6h0}MoMau!HkGn|6egh%%?USiLQ<= z6Es_D%BBE$`INB55lPgXhR7q0>DR1rW5u>#?$z(1X+>R)$^7crR zW9PYIvyg?9*n6w^rzE!W^)h#%eq63pnGWBU+WnD_%7Ai3N_+R2o{l_MV$2ll;WKgcg+NPgiXECPY9PjAVj@;!Noed%tX$NeHv+{f3XCk?hgA0Ss$BpbB!9SS36i z9Js%+pkh_wWBwVI!yYw_OG{5UKkFD}o1nH{1-C1(^y}T@e z3&{*lJX-ZKo<#T$F-_--=lsdpTdzNZPrKvrB=?_5b{n>=`;<>+*VciUe-+kh;E_Bk zsWGnF$|lRe^;Ksu*>w97R6;DF)?Nv8Nt5m4AyKbC_(3P^U(OR|djCNHlHppI5W71WTjeLyZ3-kboK#uc=z~_kSDm6QnzEI9t3PGN-ijqwyC(n!S zCa+{3K5gCCKG@r3R_?3R>WXt7HJ`0UjwnT`#9p{E)YP4eFbK8FZ0~61tkeVN@^s$Q zo?AnBSFlgv>_1bMoXh@|c?OMryP*ru^z>Zcc<;{GamzasFn1L{0Ar1)b^eNC=6Cms zX4{ktF#U$wd#KtkA?VgZ5{H@`e@Ag9pDaQlISz64@>QDsB@sb#LGk{T#i56yq?2Fa z{lUB^H{5?22oOl;xB6b%)XAe&&o}5`WLhf!VJt8>oZQ}9M5;&2Q{JT*Xw5^6cbLfX z+X`tEWFs*@;0P}+zsB;G{m`HG_%+!7#N`|aUHKn%E@S29Ege_{h5i5hZIAKqLg=Th zz>N0;R-l#PfaIP@UkkflqBCUM0osFkI7eR0?N;&+f;(}yYl>Qiz>2sBi- zYoR~@^$j~};0xLJ_te_B+9m!#_6H;t0894s$AIC$gQI+BL)w)0d%l?`d@{u*@J-Tg zGROY@H#lADWx&S-pH~x#-R{7wOz7tzzjvkIo#SOXpJ*Jc10m~$Iy5lby_EmwKLbAi zUa~|lOB44uPD;+nH5S{i2bZ~3JJ-7cLw`O2upZD@b50twmpDm}&AtI2^49}MOakD{ zG^!#3qs$&@2m+f%tzgaNKHlFB+8b^z^+RdcKbVU7e~KttCVs>UvPramb9=s+qF?no55!@fSyEW?ubOAVQ-f_BtwZoe2{CKCB^;DDcgV@CRtR!6hW)&3iaNL=qDLThLKe_H;2mTHG zu750HDK!Xn%w{SsS{j&UfQUXA+wD(m^QY1o;^{y5?pTR1pWK@VxfKE%!#e<3C@8`L z2ff=Zu4_7e#Jt0Nbzk#`zJ8U|dNlwPgYAWg88&)4@+{zHSgUpg&TS5uTTDjLsrN&! z2uJF_%;r-5%Gz$d1OlMAl*n%cV0ccADz5Iy)h4_ad4SsHo?e?3-r^Jog zzsGg&qQi|JYmV8A{k3i2M!K);mplvmvJFm00gGq3DRg3xNjny*k|9JNz;lP2&N+8> zAnw#ls6g*;eZR#in(|8v2+YJhnvXfh+>3g`J4)+lGUxyHWF>{GYi9@qwx+Slqmd zpFYz(zufmu=4 zp>lp`78yYeRTxO)V%Mb$OR%@+{)~#~o0zmJ3|;sGaD0P0+uDQF)pJw!%^_%NI6mN? zF#N8L9tL~ZC%z~A%bKuT+2TSi2thvprkN5GLUHVTZDH5qL~VsnN|UYh?x@mR%_8Rw z-Nd{)xOTBa|92{XTF-5iM#kQjl33XV80JnLF?KFmedjfYP1io7#xFD2XD>PIwfTQD z8Vq7A5j(yMe(=fJOdvz`n^77r#uIHQLe_8RE z?bhPt0!gLe=aWP8>gB=mYMb{=Rr>=?og!?EKVhC#91;fe|0P>TIiB(NQ#1SU+b0pM3s&^&NGEM`L{e z@hB>hMR$a`|D_|u8zj%UQQd5+1(qJ8!S7bhD|u1ZH4w`q2bN_bQc{G{tqEs=G?Y$qIH~2+PeL9HLs+aCnNLL)RTQ-v8ULj zyDtudel-AFQX08BdOD|0RXnbafv)HTr=_KZ+woVo9l@;?tau{SKk9e=0z?(ge_+3c zIkDKHBmb?$|L;qMaZl-#(a&JeBi4W1x9%Y$|xE?(ilR%Afj_9YGLJ5QRI7B zpJ&0YWC0t11e_Y+IW+A#O{>2tgKx@^P%e3WkpM!}2$ z;Z`3`YhSC-7*%bBZZ=lRO~}8OI;Wnobf@HRg`C%kN?^mnuGA?9pt?Yh4a-JowPif& zN6Bj`=`5o6x9S8aIF>AS7VMFB`*U5d{mDuVlwc&b;ez~_0tdUPo! z_acMi<%PJTpi3p4VcxRXv-b?`V@;RxgS|<3Bto+O>FV_+Kb8q9=ZWP5<+j^=sbJT!n>gT53>h1 z8x62<&-aYaJI4w?;cA^#V=U8%<-NTNzRsfA&gFrFeAuIlwT~|yH`~(rp~>xHe-LNe zkQfIz^t2y~mOiuB0kJcl3^v;7$SI#wt>3FfhLFP_I|f-Rv%3s5s^QW=Qp@0RRc%vE zXjp+?D>5}ZKU=dM5-eI$^tWz1!CcPLLAqI@HO%rc1FJxr+eZ*(o(|Pc5zTs~c7Y!) zS9hG2^6qsN=a1Q%ija*>%T7L6d2&G9<(MG;?{$WPv~dX#B_x-NG<@1f(>Uz8&xqp_~#(k&J_e&@uIRm!-BK8VRdn=*7eWm~D04%~>rR#4l z-NEzdcaZK>bN&*UkfRb?A=}l`f z5&jKUNzHuMuMiyic9JAQ=IzhG^p^-LLm{S|t5sXzXAeruoHI@`Aue~_ZUG4v1X`gJ zUkv>WWi$e4Tmo{wGyDjhxlR{~cHDXANCY+OQ?}izVUnp^U9EcH=tZCf#5!o{scW#^ z^wtx$y}YYL1*Q_Hx2EGH%Uh4E2FUQDm)u?{we9nPO>Uw_?*Qx~iT6SRqXTUP8mKPF zd2?Q}Lenk9o`A~M?cGG2%438R&Q57F8XHt>FHZV+Dg`Y?F@eX zdd7RZM?Y5^JuNLQ^;DiW?aiMDc3Jq8kz-v5g~E8^Mz*6T%pOXffHkZ`t^*N4i60O~ zo#Xs;G$5~N9HyXgU2&1NcL#J6+-_ztXEQjgKQz=!(z#>a#3_r@EV0S5_&tIipq&zG zql;-4t*c%a+SZ_f2$O^HXR*$htl&_H!X5t+8?)!_e)g z>Vwi2gP40}IOA{r<^xBm;G3OrHKH-&t{pG5RZ7)CbpxDMP78>I2hehYZ-$SI2j}U4v-@@#_=+gjxUWm}tSuCA?kp&kiGV3lf_f ze-P(F_$@e!#nontNr$hhMf)yyrFIVREv;Rhi(1DHG9QAL1ct6hy=w5|IrQ{VKr*?S zrytbh`zdqFrEUQ;JfvEOlH`{Ci4%>l!JaiY>9{(w4&-Fq>;X&Cp-{%FwCvcN3NM_j z`_B$1e*P;E!@MW$-k?5@Hi7iBWHwELw01%FRPGy#tSa(;sD^w?h zOILE{q$QG9W%#~q0rn?|!mWc6;-Zejj<)R|*S*QKt=aX@s zbY{~fE#`uIsbdS~X-T-WCFLata0+yMK|@5N3;Mujt((yJ3?jlMM@davArz2&KgH7GcUqgrAJC1ffJn;IfSN;d>3Z`b@)%4yNbp;hF?7 z|H9p5a8LGzt02SvPLZPe7^V_#c^sm_NTdE6WX#U68^uM>_0iPDZ4}7Z8~= zaUK952CKz&(mh?sggNn;F2s}DuX9!#B zSNO-%2c{1%yjNGpGD|z8wm^=vPB%<9n9{d64!HqXttiNi?dFqXxZFNJM3bp@lONqS zG5ZM^@qVPBp5Bc>d(_*D0lTplt(2t|bf26-c+vb|7HR@7sr?g3?x62~qW5Bx!Vm78yW^^IL^uE0Xzcnt;evc=RCY@^QDLKW&Y<~TOS7B=Y};N7m_hHHVSWJ*a9oa z9db-=oI{aH9m1UQuR2&6;$}k7-6<^)=F1MCJCcifSsK4})70(DiX?!wLPXeQG}Oq* z=;((kRd@RMdTNo+R%3OEIq#ls0zY2xsk9`aXmIh@;EGC#w6M}9S83Y# z?_R&IHBoBAm!-MAkfmNvuZTZ}P!;?n{Xq66eDz=@?9BEBf_h^PHyJ?AXlhw>VTTWr;LSXz_{&_nWghmo%_|KlV0 zh8DDfnNbh(7bKsrlHW|EdMwkG4GH-5{_(Ci&|OJhd{s`%z!PvR*exS5-GfHCz07=&A_B zznqucfr%lTV}r8rw_MB#{x2t+uhn5c1~T{<5|2;-8D$km z3D~FLoNFE690Kq%WV~Tn6h1DSYg@TcXJ5Tmbgv!x;;sgM#?+6y$2BX?oKE$WG4LNJ zIT@Y{D@)S#=YKQCZdWT%+^Iq9Vt?C^Gj=;vvS9K$j4lx-lRiju-@H z&Bpl6A=R|e%gcVjl}_cei=q~Xxp);eb~5&XhQWO&b$U=SCqQLAf&I{^nEzI7@VtL1 z0$njpVWs_Y1ph@^9(cjA`X##IC-+R(#BNVZQVm%PfYHN!MzGxmp70j)1`|KrEZaM0 zc+Q|V;sI0#FEj*K4V#j6;XY=Jw^8XkKXViLfLd6Q6JGsj8XKD40*sh0Bj<7t`QstA zOe4V_H81*8c+v64uSwFoC;t`bjS**#{DZit%m$w*428g~4ciY8PXKYfPlSdNGbTC8 zZo*0@=7M`q52@i#I+{NSIF>h#c21h?s&jgV9i=K@7eXR>E2O|+H|N;y(9yRt zz9fw~RGuAo>4^KuW?B2O?+Ktnq)eyM5VI{UEd^AokR52=w^TiSkYEcC#{2q1JwUW} z+RuvW^H*n&IYv;3H!|Yb%aM2Z2I8IlW~ue4<7kgeBwG2MMuq^num3P=sG_Pl=4EI>f8WIq`1#4@}*gXy=GE0zK6~q!8CrLGL;p4;(x;U8}s(5P-HrfI?Y+Tm} zngxfl5F;(v4+WY>hGDvnjxNcgvfZtnF9R=NE-zR3AxguZ8_&5cL#r@mgqd19E+0}{ zpfXXvmgyA>qmBA*e2k8jfyaElgkT^HVi+65tEsR|M9!(>)d3SEsYu!MM9O(w|3vR>Tiib$cB+lKEU#mY+AG*4dZcx#HS_H_A1H@YaNDihzO4De;b)g6@nmZO2lMD(@ zi9{2h@n}gka1nzECNS|zNi)hR(@N1Poa@!C@is5G^EEH&FIi&)?$Bxea}cTc{v&w< zY`tVN)?*JnWeXS;&Ko0hy^Jb(?mu2jKMi7v(EaNQQ+Yq>IN22T93#gx-s(^6(BG~= zq)G^=X%7XC5~dMy8z+$jrWs}G=|3qj9D5&%>jqPDuvpY%j;CiwtJoC&3edfIdKL|J z`_FpGey<`CXOcuk74XPFd)cHPcyP{J4q4h`y^weF3?di$Z-8RL*3Q3W7DDB!H4^8( z-7);uSACCFxy0pjV?&$mzTSD3e8$O>`u`H4hcDMZ)Y^tMLBG;@5VfqYcTRXnS$g`v z`E$09|C}t zRBp1>QLl*6<2o@x-gK*Q6_wlMw~4|IopI3ho_zQE_t|8mkFRf-h3Y2OFQi;-8Ehn>WQq`lhuy0MVN=KIZ{RU;0w1X;#@_y6*YV6#j*-q0q zo--Y~bhh1zs2!JMY%3yKt*RS_+>9XRGlRI^qUU- z9An@{svNKXR*mDIx?~Ti4+spSI9L>4q&`&uQDb;Og!ln{D|o9ojWg_R8+DUr0~BTz zUE+o(aJ3yg>Y%zX=eWwQF6HNh-{(KH9-7B6h@U`d?i>^5+|(=VolvH7%Yy@{kpdGU z_-X)+6m%Iql5ggl(Jnd^=h0)FKMkbwj*hgkt3$;i;6L}r`cS{|ItCrja$EPfn5px9 zCQNN_X2qSLR&~;_Cw(VW<~1b3XpoEpOK6gxzqY2x#lq zArZqe0FZp&^V5PP98I+q7U+)u=wEsu^Y>Nb=}$8+nM-R+;`bOn%h+zyB)*ZOe$x_U zUzU=%;-~!h70AvHxi`}Jm5KQOg@O%VG1k~dap0+RcDj-IYssNv0PW?RaE$t6IZ9Qg zs2r>Zp*i2MAW~~F%V%b1mI{47^lzPY^F@p!`U_nzU*t{?QK4)muU`?=>_645Nb}C8yY~GS!SSQ zOsz+lGE?hEO<57UKNgK%WgsDcK8ZQ&8BQDkR$Z+1R;yf9U!T4``Gdq}2EY0^tUwu> z6ioMrcebLp*oCcYsZm>1ZJ)IV&|3w^r;^b=^b;Umy~-2#`Sm;wKm7(QYXj;Q)iUg00Cy>~=#tXDPVQl~^2e;JH9Yb~XVDYSC>eaktTXjRFvCO!G zW83Rz{?T~EB3AHESS2eLND_RYdSF=g1p`rSA!lr2EcWy(pgOp}Ma32V{VKQmvW1}J z_^feL{Kw~)n`C|irdm^PT1-LoQwwLQaq`Ln*<#TzsM?;aFM8}Hmxi#Zt-%~W-goy+qtc8RjYE) zeqw)3n+2iuW^+m+oZK(ijz!@SNxHXbOok9xzqD&ShYMhmBN7wD3mB9}jR#WynJ+teSl)$)3%HVb{H|x* zjy;1vyq~5HD2OXkZJV6gqxuo0C?}?TJOV+hw0llg`N`6WnP{P;sQ4nrGXnTTeS((UZ66f#Nt}`yS@3b1bns{rW~`dIm;1 z&!XjF2IBh+LEb%*oAKR~#`?KZI(-IbwfQF-X-F`qQ;hn2{Y!)M?eYu095$@L(|kF6 zQSqq%FN=_lvO`%l0+Da)ZhYW%U@%u`h}~rRWE-NUFt5d?B&51h)#j{HRdE)o zF;Yo8omQp!+usIVO}=u`Nv!$row?mA!{C!o-KpiFYq_Px)vSEhW@qAw-MsgjfzZC3 zm{|1jo^r;*3vz6hTead&vQ<#yn09wYSv{Nm$o`aP8oM;-1i}2cVWA?WX#?N2C!qcJf?}iV$v6Pl)beVXW44wESiKGjjR>?ve>=BC z4X!BHZx7MTBaz)-IlCZLqZKEs2!-BL8H*Hnws{^iwWqE zBAcL!y+IY_B5K9VGbEjC)Y1CLDmc}>j16}@GWbMl;~>r&?i+|kB{_Q5q7qe@w}Ty8_` WqEa6(p~>#D>l|^X?D)3+DgOatb})Vb literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-13-native-failed-request.png b/output/playwright/pr-64/screenshots/MT-13-native-failed-request.png new file mode 100644 index 0000000000000000000000000000000000000000..f649ecfc1269c07b3650d4e5131e2d7e37d29831 GIT binary patch literal 60655 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 z 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�Wy1&d18=&U zD*paIp58G$vaajGjcu!A+qSKa?WAMdPRF*5j&0lN*d5!cIH%rozUTbOzq)c&?X}lh zbIvjDaoO&~irPu=q|9ET>(F<#QC%0V8OQxmZ=PnLGus7xO6a&ddX76C6AoZBZ$M3f zNm83g=f!oG$C|&-oZKLqH&C3OY#62>JfC;^E=WgLSpY7$N+wl-tywHbS;j zE2NbnUXSy~zvxPO9z##SdC_n7t;7f-`w|&*n9nVg$F3IEl8Bq#aB{MSt{+S~$Q%C~ z|0epG8<8~u9Ce?7-6)?U%=CP(mGucGBadB2v4gAA`&u5XUeG-BccY`QzVffnPrzCWfuWLMVr%K>t&hWylbO{?|hNuK{C%!!s4)dLMxF7fvwVMYVmw0+mZtj~=P@mVI@ zKfC@S{xnGMR2J@r=W-{xJzyjN_GEzOH{6s&Gw+<)WJ}zCq8qMStEx}YFMmYb{6v08lH3U|$ zcrN<;zQi9#M_@1`D_dxY>_~rZzvM}{kg)t;zlj#6EYOw|ew;NBN?B2AMk?|BM4u8M z`ncde6qG)HAnn%J95G{B7lX`Oh}k!Cbqjx5fxmDMqO~3l+6w<*!B36*koP|4Da=Nx z?qWPqQb#Jr#5?qbnR{=4b5Py|_ru)jX)TSeHrsY(GTvoBWy$FB10MApqZr_ z^{QdjU;ta=$NzK*KcXfY#t^)3a@(Zh-@bZ%u37w1)WMvAZ(l#1q#o^A;3weQacw?d z^1Gh&i-zW1$_CB*kmZMpP;7p%2Kg#{44pb&n>X+NaPlQrslMwzwrv4d7@-FiTqfCyQ7nQzt1CVWI@NifmgO6hh^0U9UO)D!DNPj$A+&f9+Q ztJCzcwT`*NUM-j~ZG}(lo~AW5%DQb9Lo#EZ3I3+bK@6GtSta=HGghD8VYR zA$AlL@d(sTaRPTKnJdU(R5e)~b{oH*kes&@2=I2}-}ZqcK&6bob%u3v*bhH8JhuD- zT19hB()<#C_faZk-9F4odc5Cs=&D*y9@32E`0^H8-Hl*ftQG1PZXYZ zxt}C-uE|&S6`z?4|7l5D;An(}1h$u84#UqKN$ZFLg#<$!3VwuKfE*dlnoX-wZ(IpN z3G<7g`WY@(+#Xn00EfXL<1o2tpqKPQg}10+hk*rcDAWTDWL7l@->C9h?V!={_Caiq-u)$%hgR3LL8(uP9@=gQ*cj)3x*4EYv2TAN46oCy{yh8AKWhS`VO zxLw1AsQR5S80E=ou<&CK@WhS=}P7*X#jH##+; z6gQAU!-K!Ta0!;toguZH7|Y{?u8fMau(B9`3xOG7wJo`g<$6Q~*xUgR4n#vxil26? zdOmjbsrlctU6-(9$c|h|W4tBuT>&e{#Rl?Iv=Y{=o0nYzq47`mu zzrK0=XrF3raosoWV!DS;L6aD{oIL~O03O>e@isQ2z-tlG^LD}02^{s+LeCN91+0CC zF@bf#Lo7iZ;Ym`lvw3sBIpxxKX2SvD`*@cKAz`UU-i^=gK3vcbXj}LI{HRoyGeiH+ z7STW&2vz2n=(=wE+bypMQ0uM*pibHKtphvBgB)4k?Q;eo^jL9C#vw*p${8r3ccW=y zHK6}Z6A_XIE!cnH2l80qM{G073W0+q0YArP_ed@My%Yck8YUJFLCCv75u`dUfk4nq zqd<@m1s=i8Ym*FMSO#YD1~k5+%CcA#58!fggk(|kQP+(#>KdR9hZ@Vfwh5Zy z)PtV};`)QVm)z~+X(RQ7iOMvYX;DuG1PaF7QiS`$-XB0Q4Rzs+4U$n8RyxgXiDpag z2#VSj2y^hxd5VVc9SwXJI)eoA{*$Y)jDv!)%)v9B91LV|hvEp_ngtOgjng5X!c_)W z4_2s?WWX5UC_o^JAROBZT!fMyX-Zf{A)RO7PnBWAmk^rzKCuc}zio#7|+-ULGbm&9!V^KPZfE2idKzLnqQ z-PqVqArFYKt@hQjzVAEehol_SiL>`G>}C4T?1UH|L$4?GfFGIGe0v2U!E&&yF+$fb z2fJPX{e#YFl4PMC)8xBLS5ZU1C(IA(k@{Un$^oz6lL(r>w$9JGZu67u)X+JU0E}feoN(brD{mYHdh6(u~q2+YUNGB3@87Lvmwq%>$8U^cvW|kGrG` zIgjN!djje!A#Em8!w3bq7Ne|sP!O=n+`L6U_znzTYMmv7KA1Z{Upn~YypHLNx?9ex_f(XZXbhV&;h5)+D&EFGG9B;gd6VZJ){8!avFSl^~H7FUzBDz zpi6kND6&*#RaH-}W$FD3Izs2d94P9qfgm%@)&KrNXq`&ci$aAjN|K63fp1Awd_YJN zU+Dqmz5*yexGTg%D^QV0(Vz>Hk%Ntw{k}l5EF>|2rlxvf(ePn$tqd*Tnj01m#~o)L zI!ht*xk-lmN9{|jEf_M7dQ6r6&0Hvz?D&c{n2_lYNly_fXLdZig0@j1s$TvTl3)^K z?WC4>lqed=_R}9(-+*4Wq33i#;cjRQb-d(Zu+q0co~- z0}(i{wV7-)Z%n-}s%_T-Kw$_^QmUHr=<5$&cTzH~^%93Ze@Ozlq-oAg=3X#P5Gu2B zEOVGcSwwZ)t?}3upv5MB8Rh7~++=0tb4?_KUx{_@gX>m2FhwEjf46ugfhX5F;Bwor z6Z6>yO=2H-=DYM9jG~Gq6v(O}cIo!HY+2RtYjf|IQ~<(n3_r|M1Iy%I!baG}l2FzCjT*?fz&lLIiehCzlG8{%8J7TucZ_o980h{BTK1815 zn!CPyHqW-2V%nV&-$0-9(<6@y#Lsh<6?+aB@Mi%4vLsA_nfRIObcR!MP5$hL)29Df zk#oli5SFvx)I(UFYyr>wF@h&$$KE6YqxGEUd8lzTF^f3R%uBA{E8_ zV(e!#1r_ z&H`s04Ic6pI9*2KTuQ7JBNSLRotzfLZ2smHju?0ieV7|W610_Jc3qk){{+smpCKR~ zE@Fnj!r(A48uNgQS6%;&V_+6T0|j#8X_hICCRiq6fn<9{HkQFw#XIyh5u~#P*4iqi zB&5Sh>{10Ux*+I0IE>&M%qb>ig^G0db87}_&9Go(QAt_P3T5b2hht;@mtAe>PgY!u zDJ|iO3(rRn329yoCoENRU(pZp0m0a$` z{Z^vMK8dV9(_d7T=2K}lz$S95-KO``3vjFgw25sZ3w=Z#n+AY3Lev0AWI&`#=Vh z>5Ejp@8blO`zcP6hT&M}5Sd4y-Pg_;8c-+SAl9|40sK``Q-N|7w!6AM$!~Ux)7$uf zuP1D!KAeb4Y%&2sqez^8+UbG?++AMB1dtohzTEASA{kA(IzmX}=v&+`sP4b9oRsPf z5yNg^y_`mWFk=l4^GGJx#+9M=T8`%{MdRelRKtA+lU!F}Y%={Ztq`0cnh3dxsC`ee zgB&8QHC_DuObuAD$LA0C#Ou3&hgaU_C*SH*xwI0-<~xKvOZ}>1Xf)j+6mYwQl9jsj zQl!i1IozAu`j?ariN4h-Z*+9Iy;O)zH1tLZ4v)*c^5p@(_y1zKts^ZRQrzT~FJ-K! zA?WxQxTxfR#XqLIk}I7DE9n3rFi!K5Ev@0)|U(yvKrZL7s~=G0R8)`m$?nz5a% zA#Ghopcf&1;eu!z+%PvxNl^MVqrj8aqs1t`_70|-r+IwaN#)NiVoEN_?wq!`?jJGn zL=;!5Di3x@!2nulbM@pR>-X%((~$NI@%2nu!LbM9F&U@;WhK}CWHMn2-pE8EM{v8a zKvti01XUi1YXg3_NKwQHe5HN$?ExV;y8Mqkqr4E0z>~e2*X-P7!wTb{8pnekZrT5Frce6y-_uEr`4bhCS%DJWy3A79`4ec7TUMbl8082tGg*EM zknsCgIu$Z6%)_lJK`)4^6Fyqpr+iWHljrBd^btY1%2W>7}Jf#D(3*n#ur+3^tR$<9dpZ)#t4;Z>e4<0M83O`WrnhtIEf4Ix4Py(9|qsFik z+GFxm3mxkLx`|b%r_I#E<~q_m@yaL=mpRi8Q~%Q=-1tBi&{8)km|;bCg;{$r=YOz2 zF@xCSXTi}E+8fo!p|`jbau1uZ7nq(Qrq>mW31CD-xye}}oQP4M4+70OKZDw-{w}v0 z3Cde@N=8n3-QFQ^x6O&0N<1A^UlYZb#8rl-d`us?iO!ocTV4`eG92OcQ>EGF9kL)x z8Lz8BvpFHFl}pKm2U?-B7SpnL|FXZPYD_eMExlAR6d|YiK_e5HR+xZ!keMySmT!+d zt`znd2N_B2OI=1!?DgN5&AWa4o8#ly$eWRo^b=>b_%BJ`SDmk<@e(QIn@#BIzt>_j|ZjxxQ8*XDrrhJGza&~n^l2SIT!h`K7F~)9ya4> zsCATkIG*Wm;Zl&RE)ml5OUU>I=E4Cf*Q`^oh@9d`(r^#h9(pqBkrM!Mzs=!P#TTCI zASwy&jiai-3Dp|YM4Xqjjd0F=vy?GjxjDi1OeMLAI9Pa7cr?it(~Kt2;cyLbVRS=X zzydpg{Pr6T4>rWh2iEK_0}_@!=`YNrzuQ?69QVaOH6AP=>TX&Dk9u-Vx+x>mozl%|lL+*UwpW)ayA2 zS|#lF5wK2mFc%bdj2jer70%s5Y1ACy9)8uzeF;f6-^wkdmEU>~dbppX>njX1&pmy& z{OT32=UoWuywsmX#o$FIq@x&?G)>~4g{uxNX&}_E6@=j`nJh#w z$sab?M!YE=)VAjYQ{Pvo&|sP~9YT@e3J3kN-=eM=-?3Y#{U@IS_8%#K89l?y(MMEF z4=nvNS#-5mY9tt={9Znn?*g+4x?L3_BS2K%!Zw&c44o*Vxk5@8jo6M~sVF6da|aq` zwuE~@q%O=(J>D_G=@yvkKsy*D&drLS2@O3&6bvsP3V1VL`O!|)@^lj&ca%RDw{AyP zy$?vn@!j(CI!{O+IvDSt@$D0a5kuCf=WWXii?xzqake%x!qo1elv+zKGYa`Q^v_${ zjj4sW%Fg2hd@kxsOzd3g=$I*(?|1M^3V+fe0Zt`eYw8caL1ZUzOkwI$#E=EE4`YUl6KBMV)f|vSmnSZ28@3 zFB3k&y%^@LqnuRhUJ|Zjk-P)<%VFN$Z(oee5MAbkK|@>hyA^i)f>sU3aRH{4MG#1D zS9js516!S$;%(!vLfa0SK5)8iXl4nH4ny^b0#b0j|91x#a58C)mi@836h*^x1$X^j zV}w^#_tQm`a1ERw|BO`bs@ko6b%BD4t>lTgpaWXDHqG7OprA@)54qqEJTw*owxWD+AME9b_#Ge;>tfFA181L#r6&+-U!oJ{`|eAy z-phey9{v&kZ}4KzJwm+{6ex-qCo9wHhhFr7NSmxGY7!af`LCn8(5h49j_1!e6Bf-I z*FHj!`s?QKv}x&999`<1iQgpp(zpry>q=M>_fps&?vDotTi7#q#mE0gZmmG8I&5=X zKuEN}Lt?Ew*X}dZOtpv|SJkSVPR_xyM2Am`jiyRli3;S{2hV`d;*(mk;hG~zlMRc7 zBaT(H4hvM#hj7{(m^SeLwGQ@MY(^@ShK+|to>rZek^alf$vguE09S`nc!yRRwrL6T zOUzH=084XQeF6zaVC~JZ%pCpoD5np0OiWrzFRVh5AnHfoJk~Guaug9B@CAmMB^0&Q z$Z=;rW~bl`E-@P`DaYmpiV-L3U-y7Lc@jw@Ac=|gj-=xMc9iAcNe-r~HPbA`u<}_^ zJ=XhY7T%c=B@`CcPVYiJFepV~hr>(u$Y3iUTO{$4!tF;VVHLHvM>3>-=K&Ods-{a0!_Zq+Qp;1)C`2!4nlG!j4cnr>mgn z9X|x-rF7;DTqN&KP+0CFOB9qKnEyx4&|(&MJHW;Jje^G~tcj5-xp4ABgr%_)E`GP9 zmktEJha1lAIH}4+z8N9)EvgthBuomeE65FbfFma|=v_uWK1P^HOP~x5l4yzP;O-xR zOX$1B#4fsfZaQoSi86(wKtIuBpn0`#08=P>N;{cobPl9A<}B^hTNbR3J|*e%=O{q# z>{@wfft_*>y8_e2S^*X(h?BZ>x?(gk3EKVQ1X`V`SqZlmqBLinf8~B+*&{)CT2UE{vN2W@Ffl~pT}(m;bBFo{4w966Q2cxj zY<7yj(+n27E+?@*M4oLJEgFL)+Y-W{hI$<{HR1UEfDU0|?`xv6XrkUl#2pY%f*_-i ztIpAi3NOPl7TVvjzZJYP2w&6({x65S(|fh?=$paNlby9A!-GARd=J@Y;S-)c6l z_TTfT2|2i*dKM_BYs_Fyi~!lI4|BOAnGaR{@9AXpa`Bs$qyIKcx_`s2IrJ2aF2~sf zYTeKov`@15{^D%OoO%DtHCjY$w|Se=f5+F)AqzGzwU>F0CI$%M$-2a~X)YG4;7=YH zp%1TUUh*#YN>wC%dlX)PMCiPS{5(D%4g055Wc;LPl5`X#kfC)y{1BhA8xrsGSGXyn zO-TGv!gSBnlyN@cs`$2~iSbN0>TSBNw3Z`7sw zY30ZJo|KOKC&_p?&BgQrw&^r5hyZvc9Z^5NXUON0kI~Y=55g2J5F+vac1yf})Xu+i zrC+IJD3yvZumaB~+)mQ{!utHq^G!M%0}?YCndbOm%wD?6_G+an5ogV)UN15GNuWSu z#R$OuhoBb(07UU8S8*cdMZ?9S&Kq-EaIguXrk~RZ zu^~mYLBCrj-n^e17kTk|q@FHRW~-S_=h>@-{_6$M{WDj2xN`V@dtGvGI4svG1N>GE z`Trl^U=wE%26o9qEdM)U2>*h45okqmdA3uglBx5VXkf;8=i#&k*-niL_k&CU9V2UH(e(6x`PEchE$PX)SPOFEiKl;oWVfi2Dgq3g9pLgXY^6Jh8BTKXS5 zbyCLQ)y+i$?vWt)BKX^yzEEo@%`DGFnK0F(>v(E`##g1!^Cu%tH8bhnO+oBfSK{8rD|+Pa11PBY#hJ7M?7DG(n>$Y1wSw%996Bp_7lrSqcJi80bDB=0oHL(?4jL zg*E$QQ+^mBGM6|k8){cnUwlw5lSF51>>7E!M)A!s^tFNWDkqvVg53Zj5$4-{dC-*f zEn*#Q4O$-rjJvXbO-#98`R3(>>SY@m2}{dj6j=W|0@TsR$(&q@F4q8&g6*D3O|(*U zE@0=muDs>(d9`|rX?42%f1-*x9v<)1V1^ake^l^NHM%|dj6?jKD{jJp&Z3E8h)zhm z5Qunyfi4$fc1BVH*f_^MKp%)6W2(o%3*nK1p&wRp3=RKN!h%k8dWXHo;^sjDi0Z}7 zkKDe3*gr1DP*}?MDTiiUauugwfD(W$KT-J1F*heh%<%JodBME0nVLNX$H@P#I;R%PE{xp*$hqZ%D;1vO>l;5hDq-HmClWDbo%;Wm zxnc)9z1r@y-94P)y(OoBSK*atsyYsqtSD7Ufy}XcaNU7RcG6eIzW`%4$w1u~aVZse zOki1e*xcxsN1{|AMj$G9j6mMrred^8moP9;R681G8DC9gDc9=BS9V$KkIro`R4>&m z?R)=@5Sv=gWEjtLiDcslMOZiU4piUygfK9Os-KmS;{&ZZ8Kzi>FS9^_>V?%5t{kB| z>T;9Z-km3wslpRFA8I^>PwAk%Y0Er!Ip!6M==D2=n+L#LE4k)$4}>w|{`{+8V*x%^ z7pW$P8kPRn?Ek-!(r%k$f9wvHdNpRivLFjqS<_s-^b^n?C9DJqi<+ySevnU4V+CP^ z_uurQu=Yd<*KU!66=LOs121yv;cGz=TufYyX zRn;h}y?vjTPs2{JsOnuV-*e${jjB!0SzFaqFHvTqT~Z{Q8PnPl+SO-wU10TAO8@&N zt-}*h+`x0~A1Ag;k^J;>ls(Fv(Y#Hr1;;(qVqg=~jg;&KatS65dx6IDlUlBfTnxO|hKjw(UmMA_xT}+i+Ct)&`#E%m6kP63-BFX6A#Rw&z2RJ z&QR{|MA?4qXu5Ww`8c_BPESWQmK)Bj{|w^`MhOU1Lqs|UXJGu*qVobSIYdX`#go7l zJ(j6V6HmoACS7_1?|2JriX5OLX*~3tM)yzBA)AOqc`^Vj{WE zL)MK6uQG>a3RKMyf-gP;7**hKO}y)Ej5)}V)`yE&%&Ru_w=8%+{nvjPIU8tsw79E( zU{UI9;tJAH^^8v_POWo*|M+M7^5i0V){rrz1hQdWsC8&&t zz2a^{kz)lY9Km4xN3KmkD3JS>MoTP8foLtZ6)9TrU_B9HGFzr5Vg{8_Jx>RpLuz7H zmlNsMZE(a(?1_HbU@fN8gf4fCgAk_4ULB}B67TZ63R`LaY9$_DG6w7C8a1ew@5g_e zON$yX8wVIv6aqgm(U4wla(Fg*u6dydl`#Csl|&^>Y#lsx0O-Zb+2+T!V=8aPgZ4%n zjZzHG>;F^&&9HmeE6AY?1$Qc>C7=aF{5ET4Htuyo?e7rX4gB!3lCnwtC_V)2A0TPO z_WB-<(ypwO8JMwhPuAsphI?CT_$gYJxH!U`+PF)2;I}WWoFxwK!tfK^`$RQcNBW8$ z+7LMLz(pM9^Y;O=-44_Qzz_>s-10T0h&$?-;xky*(yDpE9H_jNIz)k0I?-sTIK(QLAuvrt!_ zQ}AxPnLm5K>Am}_ZU2fT$8MvsiWLgcvgy5fwb`tH)#cD<0m;((cX8@*+x=bW`^EJ9 zFAdA;L1fm4aneEcOx2a-`av`_AOJ5u#$xfANIA`&l|pgD=qWCj>w5Y9qOLcC%~DZV z$8X@(Xnzo%Yt3dC++r^4>4K?`nFz^(N>MomX?)7lvbe%^&a&qX=p`{rCKTXIBJ%&z zo@CN6@Jcnvwr`#7yzqZME4QiXIL6Yoe|@#gpG9?Hg^KG|-g8p!qk3^-?i-gONDBV# zI8Mi4+G&U%;d&SLN?k6*Z5Bs_9pm-N=SWG{078lRB8l+LZASW0g611zKnw3ZgV!w? zuf-;(d3=^$fop^yTIqUT)3HYIBjez#_tW!_6Jd2FdWY5(Efp$>j209T(lpYVZ{|+u zv_Y&9H+`0vzh(N}TiSUAK_xavp_@}H7@q9*F#HoZBOuW%F3pZm>0qGKv&K6ul~3$#_rp}y6#(o z>J$wvr_wKQ_nem#qJzl=j~ z!EcAnVc)oh8ltGx;s=e(Q@;p;L4@e{y+Ow$Q3$bX0*0apPQaPi9;xe0fj&)z-U%t; zV7qK99Cg*r_6Jr9P?hnR;WKhCzpVpIzJc z(FrW@lgK_A97$(pfINJ+n~sSlC4sNG#{jfnA~lGQMv{bKme{IKNx?|f9$O`vH_I9} z9vc&5A;$!BK^*7f{4?izf-xp@dOw!~ac)KtRXs@GT zbVY+d`dz>P5yf0qufuWF>YBwjq4Inhcq)ag$31YsRquPA98=HZJaV}I=aZ&9T>*qR zw-%e*5_)q{IF%zM#26^7<*A|KLBS;$9R1%S$Gy=!N6-$|B{nuOUPmK{k$3PAkzf|m z7$lQ1$o?QUcuU81N67=Opg#*DMrddFvc5QXFE^M3(25wWj6wqkVVN(&3?PEqOi>7( z^Ei!}CwqG{VVGV*B#uAvnBlnD8|PnGnIX`!1V?AWKtikBh{C1hhNf52xXMgJE%(-6 z$aEdYTwv4QR#;RrRD12?-1};a6|6#4xXp|%1RIM31<3*<;K6^`;XY*Ot+MXJe z$B{FShONVoqLWl+z!bnoz9d5OWaJtR_wO|{I~tjTD4PfXlVP6Dmy^egZ~DNQ;$A$t zt2wTG_DF2)A^RbhL!Y%l6euG$ftJ4Q8tsQ)OJzN;8*)qKpG_)tGb`%_o9ozLfXC!G z19A}s!e)0K7d*z`l~b@R*RJY z{E$whgE1iP<+1W1GlpP^?cSCH!7vMbEDH=14VX0l{ZGiYMurUhi+Zh3M%=HqEGZ0A zTZ%c+R#yNJEr%(|QSWbE6?|_5(#0@bk-e(U=`Vg)4+3YaiaFeOF9%Q*-Kz#Zb`uYy z_;o~_kKkVWqxiMDJ*MRjy|1!LOi7gx^}5gDG<<%hp27E^P$=``WCU8g@Dq;x4@!~X zA$i0ZSV-Jb5J;Ki{SJ`OtT21X^bcY&V#mm?cycfd;0c+x5#m)C{8v3^daz+IJY$fY zfwVJ>E(q!yUG<}^VX*gz%+@B%ELRlWWD~DS~U&=?LDv{k_2V}))*?M?;v@O*7buLwFFvvhtMGvWJUCV2biEhDeR!p zL0+zS`jCNcDsjUx{wx33`4Opp4{COZ$lnl=$6?Nr#$Md8)>v^Cn=Azx!ZNOt1E^Ju z^2=Ewy7%jZN62xg62%^sZI*V;F7kH-X;7w4fNae3B54>QwG7AJz5#r-03$w zvP@0b@DnA-Xkua-(wH1GZ6>{Ac(0 zGza+sUscDp&A4N9@2B}A-&tMM7=gR+eaaJhJU_MAzce8Fs>{0TFz7I8$k0hf)iAuv z=i0;QhM`sPBKVuoV_4+ePvg1nzh1z=<)%aDb9P;C0@c&Ss?h%5CSF$^vC#>pzFXUF z@|)f#-fA|E6U^mdnW~gP*q2k*$@k@hr^QUtpFazmRbI82vhS!OQeZPDCOS*I*pM|BGjbK7Xy%#8u0SMdE_y$rsr6P?V31fv^L(Kp-r;4pdMuV_qcC_qzTD9 z#t~Qrs4hA=_*<-;%=JP3BR@F;435W#WjL51A(U@&d(%h!NQ~9$KX!T14OEe;2PC}NeuOd#}-I{eBrqaZep}@ zR-w$5OpBr!!*I7dnhHaKl0!r~$-&2}j}q;$9AAKBl$54xKYz&8zP+9}S?2f>(2c=j z8~EEDNGik${Ob?+{`Ba|b>A$y;f%%Oc=H&IVG_dkdOE_M$>N~<)xP=#zIwA^dPkA= z@_ti!(|vdD=du023sFwMI!82PX9a!FS?xf6?8|s$8#4D{q#M_%KTv0l#P2(A63s+X zoUUnzcRx%PlDuf1uKN{fs%YD=IH?-mNBQM-!mt`}uaZ?@(4zmo{mg5Wx?*?uI)^@L z=y62xj6T%}V4Lj{hvF>Hb^P1h_q|gBz|wu%1tMTIGg!SA=K(vt@6XxE*6<9?^ZjIT z+BR2DctCn>M!vuA)zM+5j7x^wMZ;Y$^bhydKU|O77VoJ#wI4uK#JKJ2OsSrsj9+E3 zTH!;MjU1)wr)FNj^FqY65+0|vEsOTwS}`hZ%YXR+{I1{I?tx~Jo!fC;_6<+1u;Yfl zocCD>hrlcu0^i|=+!Z~!#-umFhr{A`0?&%jqn@^1Y36mm8*rT#ZMWmTZ~vzeOD+SS zk=?@WRQ)bMib9&zhVAh*kaPL(!KSXg#3`9_-Yh@v<#c0;$^BQlk@L5H+cSRs0qYba zRai>WmiN#ytPAW@Py}HrzZ?I*1LShWg={K)1PUM&^Ld5Kz~8{aP}8;pNOA7=0&Wv^ zJv&f*H?4qs28|Re{)a;{M*Wq|f-Zgo?*VPvlvLSm=TCK@vdDkVpy%pG2M})2@!p!P zTe~IskFt1cPSV$QOP3;_ipWPA%k8qe><5TXGv7^8b%_tqpDRN?xKyrWYEY-uq8|ao z%o|cx90}MwR@_|oJfs0R-S)s+o9%MIyWA|_ClH}GGv{;ZvL~5s?>{ON;{WOuJk`e3 z`O(?;l|?-^`?l>ZpT~a&RIX}RcTB24-xL$`K77b!Gj#kd5PK#gp_tisW}8EaBvG{q zP+2vT-f=hG{n|Vu@!C#3k0Y0AfUqdveokxre4AoY;(y!YbLh?U<#W^a+4e)`FZtDU zyol(Z$9#P+$M|y4W|-_y6zc=H-gMyedPw}D{F$<9;B_XnR1Pj9XUOhz-D4Q9;4Sq2 z*HlSJ1x{JLjP9;LeY39j<_kQV!$HvPJjG+z_WKLF8S35ian& ze$x+Ra#kCDgWh8?xcPo>w>fkjl^yDOH;iBlIqs2M@zwO+4kAj%f9(U+?jK)W4#_v; zz%04y6UuD*POG7SugtGen>xXle!q#frE8zdWtW4)Hz9}KuXAwZt@J-)>0kQZmFBYo z--8m9fFPhD{Ag)T(jee!`NYt3qD1DNQo!l+i7SKO{2rM5rDL&fj?DKlj;UKSe#G!r z*LU4}5r>-Z+x?p6*Sc#=weI+*Wwqn$Ej!QaxN?Sb*ZFP)J6)5p@1ON6h4bIUh?|BJ zLV->I|7CqhGD+JQp-*kw4pieTP=xe(&F3KWvIlN1qxPFR8@eLZ+@hp%ab0#Dix)k* zk-dtM?f7>mhI!_Euqc{R&^!3JlQ|ueC;+t4iyJ=^1$qEX5tKRCX&DBG`*dFAbO#uw zv+a;ZUq3G$1_m!bIN1>-qsRHWzzQG8mdG|CDTR~Fz9SMf1tXvG<7W`WUOa!vv>_S# zBf43wv~TmA6$6Oeq-AIj+5w)-;b~+)0{&yFY|@eRuPqd#{$gVLVQO$`JVDAwvkdKU zfN?ZRt0UAWdImh}CHhLDxy+>5rKPDh&WX2jnV<7dd2;SXnkHitZ@mmRy(ieOm?UWF zi+KsH_#0;_MPvfds;EdK3SAE|RY6Ub&h(R1~oN_a4Ke6YXnF zqr{df6lFPBM3Bihlj2{mO*fF!GV2t7jI{?+X2vVTf-<1z8k6i1p87W8u3Q%Ztf3{@9*Yo}F7yiky z3mlg$nWv0Q2Hj0q<}f{YJAVlPK~hK4_gm3*wky6ecT zhUe<0vT<1@^KC5OdxiJHBb(VjhdyZ{&CY$T6oBQY#nUPHJ~*|iXR~b>K=?foF=Qt0 zbc;G>TW_osUjh78jQbV4WD<7iLbl9vpVXMBzD~A)XBMR?!+NxyRl=ZjVu?`=fvB9k zSpxHYGIGG%T?EI9j+EqIG_hk!+zA5jzjwgu{c(^@$@l$9leJcGzqzS&B0L}=OFqw6 z@ZL1u9hMSp4On=|UL79RJcd^-^G%TALVlj)M4O$mK9>`fzOI}$w$iKW`|Kqlv|Vxu zXT3ZqNsaFXl%{I(oVWi>(=819csV##SrkAcs{a*+shJY=dt*L(zRfV8X>+wfRM{&ojqJnhY#2`)X*taIT$S^@mgDOmPS$+yKnzFi9Vk+kwxG7V(^Yg zAmkpSSD1j6$WiJt33jG7mgAX4|3mPxhbRDN*<>W`MBmkmr*&`J`*G{0e~5etIl}LD zjHu7!y!$vT-5@sX2zY{xS@^YnT`r-PKH65IGBGjPFyXpx$vD3tyzdEQLTwj0^!;$( zlEC7$A|9HMz_w}3sM_v+ObJ^qSH}%K=Q{5my(O|boX%`5UOs7$O z^LP_liU{DA-<6Sk#27^GGy z=87;c?FpT3vQ>1i@Wp#e4ue93L_It-W;@F==e%nf7(&{ zNF@em2&Cd11rnwZ4Zo-`aLK4tY7H!8ICi0sMdghewf?2E8b_Y{KnseY*Q7WmdW}TL z7y-5)(IIL$!c@9o&he0KoI@t1Kaoso^=n9Bm^qZwUfu>w7sbqU{7=L26MI?8{!7x8 z4?(O{Ow+zGfs?u8-r4tUfeFGJgEJNq1LRehttC9#YkDWc#<3U`Y-X8nEhDUT}Jf?(@;j{nTp4E~~#DyIcNC zEjE9ec4~dD0V5~*_D$Q0z{sLRP-eQ)zZN}DZ&Mz-?mzDdi-CIWy3h06qo|xt;Qcd7 zUN6UY+L-k+{h<|@529eu@f2=j-+Nuf(OE-wF^-;&0b_|>vcv>!BK@3psnzRxi%&vyFH2RcSUE*ThyH5b!N?Cq-E zKwuA(!I=6Lcq?CqXXw6NFVDSQI#sDju@;o2NbRsP@vHWgfXWBfk_FSp6A$oTK7V42HLMzvrk7*z`Hq)R ziG*IQXgs!kCrWGEzgnLyHYdVJ@u@D7p86LedC(Sg(c`k|eiiVZ_fx2{RL_61Eu!oqVClWd+qEOgxp`0{Jr zaSuWC>3(0qXIwMaBacTLCFk34$i6byBWdztwdp+8p-7%cE-91iD!Fjzeft;Oq?k&@ zp!v)1dPH;Fwj@Tq^|DLhzN+f|x?3HqMXU1Yl{mqXm3|4BQxTV(M(fb^Imd%7=ko~| zY?AU<-GE*9c@PB3_ACBG|Lt))pkx&ocV5&q^q-Zb=|Y;;SxT9$A7b>GOr8^bowqt# zRYZ-d=fCqD0Tvgu40I1`r7`TL7xwc{ls*B5d|EIcKxL-r; zbfc!I)%>p);ILa*oYeXq_`_^a8>($p|H+V|uL0Wg5xIC)@Y76V@;6uaeP{L?;@W5nAR*kD%=506z) zYy#|ufUYK%>|Os|KM%d>`1p?X_4Q0Hhn?%`Y%Y~*BpAnSZ$wtJ>2`~!$(HIbsH|uV z22QK-+g75scfXAkXH424T0v_Fq2N}N*G8o83xp>a@O%`)p@;x*j5@7`8nFmP<9*|# z4#+`AE9vo^%zzYnZ8)&w=`0b=&5Q*y;c`gi7@8bz|4Z(e83I9s*Oe;mF0t}ipwVEn z`D`~jok_h?=W4Muy2FLQps>T-a8FX?dN#oy=qT*9AEjg#BC)6QimX0r(la!UW11WN{G8AB` zUA&AF-J*B~#`*?}bVW^fCIY)CBU~~?2)j(+grtade<=;J^8boyy(3kbAsg%WOgUGy z{v$03P-^)opQ_M0Xpj};0CiQsr7EcwNflxYMAVC+N7(%>N1U~r5?uLFHB3#2Mn)c z&%A;quZ|d5#mD1Q$!PUub6KU82_vc^f*Q80$HCk@)nYj=#sRRsi!B@D_7gLpc%+#( zQX(d-#61E`g)#1xz#jCELZ+$1$0<2p(Iz^d=Gd(_H>hta zO-qM$iN8bE81@uxu71K}(!jypc4san6u<=SC{n(oM!S*>5OkW{`QF3K&)*#&(@P&^ z(q9tNv+xKTHx@vNm678;+7$8%z8YdXYYS6n8BV59KyG7tKks4D>rIP-LQUbc3%nz1 ze*^BxB9Lvh+9v7Cw9jCkuQw$53;Mxb`Wb&i98k3fFuf;lb$Xm|;*dOGQd?0CEK$Wx zWGjl~qz^DfKEtoInlDiSHJLx9Tm90))&+MY#ff`KeUB0hJ|nhzT=3WO_#6bS!V4## zFLw&PCOchOr@3uOFo`#n4T>&7;|O_SYQ}RT^3VHxPFBhobV8oc#7h->!coBR+QV$Y z@%PbG$u^kwo~qMt>AU|hi$gN~YRPgdcp=Y%JUy>RVY}dM374pBX+t7Hvp-55Q*X21 zf!SdCrN&wF3O_msht2rBm)G9J-o0VQet#TWZInApj3AuD;|1m~C@9E$o5-t9TfauO z9}C_@wf2lmw1rLZ5$u}gpU-**p!ukMIhxc2X|oR*6~@$JDOdQ?-Xu9rVLYtrOLGh_rEHF*hBh1n@LOnl(GL%LwJIPP!^|qx{c_y6XOEz%uY-u6Y>;pAM;=JXcD_`hWd06*& zD6-)GsUwsbU|qYiZ_Ddv3r&D}YBp8}$Yod^<|@3Q0Mo%o>yx4JZ2ix5_N=^@m94bU zDJZm!QN;oM2by%RTMBJ0$kBx`>eNML`u#WSMhtYLbT&TBQkU@;?)_@o|h9P6NHr$xs%qAfC2$u%E&~YK>%RS z1};-TiqY&xgYeLvC`ZG#+xZV6=DmL`&l#7JrDuu{5=G>jo5%2~q(WUmlI zej(43m4ZhL6pE|}_j9vM=M7QXr>4(?&E*;G=3vXq^7z7Up~3!(zp{?$)PuJIKhBKr z0cAR9Drz17NjNj6G(nq2_RXHTym)Xx`A-9NcDvL;d4aKl6} zWV3H9;KeDv?=R929m#a9k>5QXcGERUl37AP173f3x<(?CZl{(us(n0drbs-Vf(qn- zvqDyg{R;~V7;>1`JFTG(EfdzAOd$o+wvWQym_C@?o`hd$Dyq+^e`elgDx-QDaVu`hCulOUZ*HtzXzuM9_P#(C*!i@(jA@eOo|80+^74it+sz- zFz84)h#F@w#dYgoHZuvA#y<83dhUJ&&-a;Gqc<&qs;<8h?ZgFP&ZDjyl(Dd7{!o{y z2?FXxO9!%Qu1jBtS2iq z%FrJuDI%D3!8BQeIwH(_sGP(i`wSi1+}5~Nv`x}|*vAce~8Ra`_*%U00aO0xiC_-Xpd z(Bk)qrtt?rp8*7y+DcdE8hQCy^hA2#*dOCkzXOTQl1(%B9VQKGVusYEiK(R2^2rvj zhi(f4`it4ol^I-l;2_Pkox)|*l-#U0gy6EgxO5(}L|S%%33B=5(8dUDg4<;ohiD0@ zWCo~;I4dHo_FK*_xGF4m(tv8CYu5UPx^5TJr~-_`srmwM4X)qfY1Jz|9^cfN>393w*~pB`=lU-wg^hV1~TGc_{KQhZh(wW7^jl_PXiuPf6%D8$pH-$eqqjbOv(SP*X=v zpkkISADK)T!&iRWR3y_{GAmU~;iXUAHNO~rv@{wH%P^Vl$5RDadT$!Xz_vttM2hde zp0^*nSig6xx1%Or%j0bmAu0gOXl&KI>Vl7NVWUp5fJ+DGC58mQ95#!&kkZC^`J*(y zm!PM*j}L&8njsyiG`o-^GBW%xHZSrRF$l&q`ktnbBN44u=(oFXd))2!1!6_$FblmXgRa*|aYCO&3I5PDZ^_>3_juWAQi`goJ_?D^AQS8H{A% zNZ9-iGge#0ql*eGkrg)~6E|C}mufXy_b0P>m+Q5i{_k!5{r}D!$4Sk#49YR0ZR5g3 zjHjk1mc4HUH!hshXS8pB_l~P*J0F;0S3>6<3&9aF11@A|pennYO=z)~t&J&YrobuJ zI?|EcPHfoF4%m6WOF%5;UsX|K(`K*Yr$dU{K9+Ydcij$180#qNU~?l(lJ&A1XbE)9s^k|6ru+ zrMailCRJI`$ko`GeDnU~>3YI1ZsAlc!FQ3CYNoHr#%rMqSf%EDelDwp2L-qts)1sv z_-h3P^i9gMN{Cj3sJx9k7uEYYvdYZm+duMTnKlDt^g42!xCU7-QfSYF+|=adXX?@V zLk$9MgNG9vrs*os+8y*D;-BVfbM}pkI$cgFl9=?kV_(wZ6^_T>f8c&iKk+odQinS* z5-CWBj?G3PsfDl}(**&*))-jp9lx&53%dr)D_M_^p$7)QWl@9>0pGA$%I9?M0v8FBB?g$7sT&+ZDXqan>-0|4^LP<+CZhW_ z+k<&3&w6>E&4s+-0Mz7(UH;SMdD~wQbgIf-PiB&gsB7b-gWQyl#s`jUK|B_<&hVlC z&jpmq%J(U<@E}F|ea+Aycl;E*&g2RNLvC(5rd@G->XS#vto?uhFKm(q6KM_sPu6dm zRqnKT9#atdHiysWb9PG9ClL52E+Ydg>qkrlZ8LQqWYntSP795DHoMtYLo=*kz{@u% zzNTa3c=u7c^gl)Abj#c>XWu$PrQ*sUgf5@Vo6~Dmfw1g;N4>m=JJqU42tAhbxuSCe z#cu5Xb29$k{#M8k?A6=he|-p+4b;_giS{c0gwL=SdPTTz9(=u?VldlIbU{WSE)lN; zaM-Lu-gmnnLb*U$n4DxMPBc)r-e?${r@wsq)O!e!$6u^D46IM2O`nbmGLEa)X`sRH zb``b|OYr0i_(N&lDGo|mti{oQAdDZ%N3q#?lbRG? zM*p`-+w)>bp*R9q2zC4IRwn6_TvOKk_(~NGwR#aW71g7Ts@0d?**e4Sx2H+f5hgQg z#RG32AM;6BO8UK?*GDe*jOrerXPfmog5iiCK945~>Gaw`Ym)K1^;(q=(-};I zbNp91A}FHV#SyI4gZke7h+8g|IXpb9C0tp16v2%eXSH52d?x0e)F+29CVQk= zx(6d$wcm`SagYWhcb6b!KfFgp6CaKkLcC89FVTakkE2i(xtZv@)fF5Lk!iDsYw~B-AA91EsqGTAkPVsMzaQO6yUr{?`Ydi0#`br zD(d7x3@9PXI0Uu3f+{hchJqB&U75^+DCGW7J_|>dwr3(+l{na4Ns~@W?sort5Vp!u z?1}M*RDQbIMd}(@Eh&pjM#kguGgkfFl!uRO%j~T&shW|G6`g7-?MUW<4s0uXKxb1l zJ3B3USvCyd9kWN$x`z{6Q2xECkea@@S!I&qvsA~(oJA}(=-gJ!B8FEc>j8UT)WdWH zs9t$?DW{1Aa%_HSuw|Sy#8gWg7iAaVR(MsQYso0~iKtSiFv&od)6OTFO4C|_oQ>+` z48z4ZUjGAX>fBjDt2_$ZwzTOle&?&ZqEBC1^;$5Wp}K3`qSFjM$1f#bzaN+lPzu?> zw4!SWyWOtuQ)RK?G3W%WF25=drR35W3`@1{;ZNs6;Nrtx%gm=W&o&+JZmxBYMswkq z!6g{ojfl^DK{9c#gwtUDC?vg+S0P$f_1hQm<#rd5$K|9BG8-s<8Z-LXkMsH2uqb5r zc}tY=SfSgGqU`dq0itY4aH$hVWmCa@&!w*awfo(NDB!Je+AqGn7XYs|I~jpt@_$tw92*DOU1t@B|h#A_R?!Nq5K1F3lt*J$QgpbS7koy~QT(gWA9=nPmb>-hgUXvvArkbfufcgK#+lE}kNDx{b#UKwlG zpqEVUmGY*D#h|J`nzdaYRZ))X3RuO9SQ3V)QEd+fMxI`z$?Xs7aybgm1cXN9@j4?I zyn;i*!KMm_{OVc_Z2!7DbQbz*a^1#chSaQAflrlGHk?ka6|R7UcnG_d`uXAU5i|(; zb)U3HtG4p-m?=YJ=sXL+LX8oM9YP~^ z40eVPz!{0ng)cdYR;$;YuDANhb|pD&7g14p0}^Z<@fLF6Z9}Ty|U9@Aqh|^k6yb2&9rj@ZXXc!S`9-lTxkY6g zCG{VCf!U~K*HBDEMf*YIYi8W+cvVRs2cz?Ht8MX#C_IzGg*p_7sIfO-tEJAPIIAWx zhvf=?QEdh;m`K+X;&E8{0%o9^20^wQyFI&Di#T1Xifg=rS6MnJ2wLq2#;wlj5}h=4 zV95>~07Ht`jz-p4)2x1}OyWXxJg+A+$6!N&QAY;)E13t7W&iV8PlD7ksQ{$7LAqAq zuB?=A-D+q)>r~hL^4a3f3TXXI>A;0=D4B8B(1<3isY8LSGNPdH#Wa$&IJ>3dZ2Y!d zQ)E|4Yulz}Gl^Q4su*4Q)dRpXiI{pas*K7Nt(9goe`MGCJ52++4QQey(NR`QP|3Oa z0nChTge`E_OWTpka;rHlg+-dBA9%VjT+I+U$xQ9b@B=3kg|lXVUN4W&Rc8|}jn{AI^Dg+aUmhPs#Z*Mxazz4fe|JL2GWEm92Em$2 zA>ea%8SRrUAcjxNVa+LJ6K@@G*1f{N6&gha^%WX`jrHi8?~E6C)M$0$2I?#&g$B+Y za{c(-Xs$ZBWGHFLr5btxQ2H4yB%#JM?LdSl$`q4eHtJ16rD z+k0joNYt0d?#?;Fi){pZnP*HdnN=Q37 z;q>zT(O3CXyx`Ope+;_Z z&W-KB;dVUlU|cSLZ7w%k%D-0lOPRnzFaHYRVVmewrI1a(S4w;9Yhg$PO%^&Sm&>RV zKX);Ud2Xiq8HoF@R?EElA9#*|chS@s0+E>puk(QHEU62k&Ca|~-1%Cy5D(EA$O}H5 z&#P2x<+Wm(H_U8;zj=T?z~&iLrTWRB+fyiU`BPe-NT7v?y*+5fIuV630dLWAp&=wZ zmc#ay1QzTal+71M0l{L1U!88YANdgS^>`b>@wbd)?1{L7gI-n&`&*jrAjmxpa{J2s zW7|E?oAl7<^NPw?FB@wlg46AD4EPEOZ+H08q#P4%Ya9R|-cu>z$D>d-ef+)UMKz%$ zdHaukUgnh;(<>WhkhS-d(`r@#X!ZM0#1*!pJYX118nb{8Dnr&A^zwTgIn{PO!&c(0 z)opd#Li+(NKLx!<+J%Dlu>y>Zjk`S^B8%Fw13H-_u=t79t8`i~TQNO`AaX81+HrKm zC`QNcaO-&#{&eWCX-t0kg%JWh5Tn4`r|3=E+RH7 z_|X2}m;KP~c84Jt7=BPM;AnT-uLzaU`LDk`mB%zGRKam&caLaC(Viwpo(ec~n6y}j z8BB)$Toz`xeGs;NnmNBVyFLFdjl%DP{>kS;`|e(LtIaTygMN=!z}QnI^8RVT*xzd| zn1d9lm%CkH6e6X@8|S|oL){9aB9~*@Qbagj|C1JWN(Ek6uknOyifYjq>EzC@k_(!2~#vGiKq!fDaqx=6pUk<|pKA|wF6Z@4(zBoGFUY8vE6+^6y z;(sPYLqTHGoeBV^Pz9J7Wzo--okefIP3zmJJT$BXi>#nY-&i}vXpTd-f>%;|$&OAR z5!b+BK4FB_&i6}fjmAC*l(^>{k;p5}ro9SNFxA$hS&?1dw6Nnji^&`IGwS?4OzZN> z&3BYXu4n?YtYHqQel$AvzoNQhD!L=$~e z=h)uED?cNzqd+PfX<;p&)*n}@N#;c@IACTqs=_y8jK2`Af~%^s4c^{xvS;S3Br_x3 zwqO+4S7jUAj<56gL0(gDy;?HY+=wu3UehF?UdxtgIGbwyxr!=UCLQ?gh)=8g2219F zF)41<&&h44UeMCzxKTtCsFfg^A0zT4otb`W6H)aN zm-MR-peMmjW=@D#kQK-Ai!6ykV{*uBgvk5}QsQmKH{7e+P*^DU4)rKsWGdk-FVNmTiF?3dXy6AHPXgiE(4 zvzIRH3*ml#Jw=C%ku#b7SNFs3WRXv7Gceo*f?`l-_9?0vRtxGD`n>RoDT>ca2X-OE zg!P8KOK8?nzd9d%-n}5|i{mxmyHPC4N{s&}{ufZ1oR3?g$_7Caqvl0o8XP!XlQz4Ozn$`{qdVDc%e^6E`yD_eaGf9IQ~L4-5z| zTpINI#IF!2j`Tl^7=isj@g!K@Q9rHIjvnVDehjt-FA(<jKaX)qRP9D)WDPvW}|| zkG1yk^@W5i_kX*pytu4tr7uFK@$=Sa$F)62aryi3M;V^Zv!u}Gi;%9V zV~$fS@${XErdOsmQ`IN6loD)$bhqVC-!yViu2<{*m1UOyNZM<=9WOm@&L|BlcI-Ir zU05$~$XVBQe@ls5-AYbEEpt{_^-8J9EyLfAJq)4(Xrouxudd51p07;e9bG2kZ$ITc zYz7T)h4Adry01?*QTsLH)~KK=oQ)HA24T%Bw2CK|QvD>t*#YEPS3iBP=&3(ksx7x;bJ=6f9xExgGf9ZmxAzQu$puau2UZ8tb1L8o4;Ql=9R{r47= zS`B>+cR*RmwqLq|aY;Uy&@2X>rj(%&;ae^jSxz16<&yS*JdYcv2(SaVFY{|q=b55m zuOVEmL#54{{k>2je(PD7Hk}?7>6<4tNyI`FPVlrS>2UE%mF@}*>+8R(P1jC5lK4fq zUF(_Nc)$1WEr#bbleoj-5fQ@KQ<1t&s4z6H{A}t3#4PwKn-g_6J*qoK??;npSq$W; z-hW18jm)id?G8ukNT_GD&f#H|q6Lg;4YMIg5%HZt(OAKBR`r*l&WVW%sj7OqeF&d- z%mbk%P9stx^zh(aX}!tZgV01rH8XT_(jBx{;y?80;4J#qvQz9tM#LYJ%i|`eTDU$5 z3CU0mx%;8wxPZ;&25KaB8gQc0c*(fepwb6Y8N!BiB+etSY8!D1B$!HsZ&i%7W|hke zH8?ek&Y{VHTM2_IzY481HsQWc@i4Agf}2M2FG@$16RMx{@uFp>Bct&Y#l~R#u)0>G z{W98WQ^Jz8Y+VizOYKUbU5(N7c`ag;=P6I7h;dX)kle)yQ-31k09xUQ*(mDVsmejD zT5~l*SGgqbCWnM2tgYg2%7FyL*?(g~+?{(z#ESB%H;2v-h^1X3wc5qq$+^Z6xDw&Ac`2|-)_X15 zG)O86xImq=%8NIrs0*)2b|Vhxh6E&bXy#GqYx`I2rO>7O;FE8snMml%=knY&#ypW~ zfjp%$s*Y7GClJXJVjyEnE**Vw0j}zIr#y8K!oPr@elwv~*=a1_9Q>zRt*}d1ek5iG zh=1;5?1pSPf;P-iC)reV3_FXXNJkCLyNme^mD`Rl;WXs_>SO$e_ zg^Tc7@=Hu|7g@rk1;H~$vjq<5w>V=iL#5J0O;);}55SSU#bq$nS>jM$gD{=Ftat-A zdV8NSUiMTSc4d1dH{Z9?#)wwYQ|Qg?%pLR|lC+I@F5m%0t}d<|YK|Py9S(p?rH|_G z@p|JFWnM#zCM2;KP2Fo59%>rjRmf7vun_##B zfH*Qk8Tmj&YC?edennH}L%ab^?bWxR$$RKlP*6}2-ysywDV#6*%4Cq;m-kauXk$dC zeoQpV)uIk)E1(?JqC%|ajw(UNR^G#!N`&?3g1&rqXac}k`vZUo zFgZuC@nt?`R`}^0e3iPQ(&h$cr8%=M4F3FVb@DUbHa)=~m-;Ons8CaWf}}f~$e5C| z6_q}peGIf3(|K^OE5?c$b&-!gylRy#Q6X2b(fOm=f}=X8a&A@I_v2wHZ4M=pMuzzm zDDgId@^=Mb`Mvxb8#6O=2ZoMZHhRsigAK1!dh~;HD<+0NzP*L?RFWPx2OGY2t)(bL zq|!R82Vd(^gel}wSo;K2>yKBX%phY?m~jZA8dVQ{;<6q4{j6$gTPRql9ZB% zrjuG8A;beMew$e?`?q|9fZ(WL&?2cL3GkR)$JXWGG5I%Ab2y4qv&$wu#O#UZ!B7=i zaYL6)W9Px{#nCEBU}b8f(3MY~OhJSXw4310(kTnH8v5sT6iSa2K_F;(9E{4}&3*|? z*0~FI^K4KM#M58^{9aHorNNuKBj-d7(N9C;J6Bavh~%MHO*EJ6HrOJp&z+h+cd=e} zi-|0+PdL2IfkfmLTn=|47TUlJq;DFndIOkkJO8E-&ZuINxh^U%sb2dVQ|G#HWK9-x zu;sNz&l6)I%f&_C9sH(Hd@+W9r7S9dtXo}!ZDs>jF1KHpQ1jTN&!`_Q|58aVf4<1+ zVvK2|x&P!lIRIML^Tq79GtLpcJcr^0bagAuZRi+DP^Sz!k~|mZELzJIw@!RHO{Rj_ zQtby2r=`crngBjOVio+mK?o9veP;O$9`8bk6~DcfhoB>aPUDjkn%F^3E6zm@1TT}v z>xDAMNSD?nbE(B9fq`HIp3tkQHv6y4K(PjW10L#F5&iA~uDIDb=(db{>xTH`s$$zz z7I;CtfcD14_hQQLy2$2qfQL|$^=HJi3reI~QkyD2+-?xM*3t^Hw&6g>9r4U8H38#1 zO$gSpO6F@5=|kK)>sISMt7tl5i@cWK_gDjsB9D%btvJn5UY!BAlUl>U#>O^*Xl%Dy zdSp3=a?UN`D43cO=++lgyy4JQjcsMOby2gm*|^V^JY+|_!3A6fA#Kq_C8%oL$i@d< z(F&2M%v6$&&=58JN?K4BC2TzjjltuUVLN0l=f$5}l=qZG;LAITV6XiR4yau9}Y?nHktQo_x(P@2GMg51Nk++UJkwq>|_wz?r7vV-2 zpryAnjVez+RA!=sNG(Kc`fzJ~1dZ;aRD$UQ zYNTzDew*Lcai|J7?{u=i_g-9uON50xgOiPSgVt@842~_`k}-kE6pN3FL_#^@w#@FN z&k7`8lg${XfA@z9UG)W(LZs2v6nWDyoqN8;pvSAE3gfYrm{eOzcLMr5GxJS0E2|4%%Fn5v zKanuzO$3jIEJ4*1SHXJi?7>I#Z$-kq+i_K_Wpbi6qAY)7eGTuh{kqL^ln|7vWu?^N z2Dp6MXvJE?5$bz)mqY1JJ$h7r7o9WKBt0>O0Q8zW951<>J1i791)>^?wAcQCzM37YW ziQv4oq5$-cRb3-kvvz6vHhv*sYGh>O#5M!GvgsDD`ZoO|#Z(s&L*@J-nzJ{7FWRTZWAZFk+zEN zayV}GfPywXc{D~cfr(s2xZs?OrkNDfwH1VhuGdClMW zF(N|~Ds(#3F8}g#AOjIhdTVMPbfyw2`(~_%Q`W}s#>r8fS^qaui`w4&H z*meTiY*GEFw6$6G-65@<(fssP_@i-8Om8ZbvzQ(!7n17<2^)}5@dd;;GKn5dMM+30 zU(&uGi36*<|88p^QQSwSt>#uACiAxDVxrhD_B8=Z_u(vv70Zojo;1S<^`teO>|BgV zzU-=dJ@9coV6jUo6{B3U24!2(REoH563t87^ceJR+%NhI34W{-|F!DvfklMCH`RBGt&P|&;PNOqGtBJuCE-%xE8HZ;MM%YBz|$Cdkc=w9IuV$Zfd_f7~~g&w;_%2n+%U~u<;-|fsOJ!N7Z2l z9p0M7-xJ?9cx9O}J$&Irn1u|fV~%ThiRYxq8>hCMdOORfHeC#Ft4)6kVX0kJd9HNX zp+GMB2j;Q+t4ao7naZAbbUn@ltyM`;h2{Ub06m843%x5Je4p?rB6hi8=WGO*d^ZNt0ZJO>S*jbhHqem!Dq3P2;w{~EY|v&@1_-SUv=ehKW+n4iJI{|^9j(KV zTL)Bz$XB{|Feu~Sf$>a3)5=8pF{eV8lBG2lZl>Zrv;gcE6*~5f#}I3L*Tm!mHCDkn z>kM*inP$C00GpzBK%@9s3`SO@J zVbV>uGhJ$?a!R<=n-tOzlR1ubQTHpZ){weGEi?;(gA1)0aboLv?55(kIQ!hL5NY$N z0qTijE^#N}e1*GBS}Wn|(Yfjo=YAYS^pR=e#}ta1C-mI(SRrCiacw7YkVx_8@)K|k z+v0)=OaD{u-){11URNNg*)!dd)j{VOSQBF^!_avNPJ};{0A5cvf*m$Me zr=g5=WFg$4sd**ZGE(QOR$Y{1m&FuBYv$)5u}ra;Lh}(QRc*4&ZnSQg<#lKO{X0>} z=1bSCkT%@j;Cy6IQd^#;CCcm}^-W)OGP9B{edQh|hyyg)zCoS2x(5OHByGUkrV`LH z8t3Ye*I@8vEhP2)Z#Qih<#?+;CMDfKz|p&cbhEwYLWIIh1v@2BiV>WqOEh8@{lbp;o2`qPHQTcMs(=?>*H~)Cs`v7 zbC9N*b4#8hrHk{IorX!s5UkqLp&yVfJKBNrY2K_STq6ll;%QpM%a#g}Dpylb9uZUz z`mvFztp_K{u46knXJK~R{+@Bb(d?k7&~Q(2x1^0xH3MAwt|_E*?wTH3@ai!2K+dj1 z+0HAZCT^pj@tIxhs}Hwz&jU6-c2+wHXKJT*KRfHn9rG$&aVm_{6BKZ*vaijL2RP(+ z!%c9s^;Tu7SZZcC7Lw72zA3r0--l^y9I%snj_&zb^@|4cubU7n}Sf^XxEc((hBTQ6}VK_Tvk%3yzy;~&Sfz6a@=fF%TbQA%?Vr;!6kcIIod91N~(ObvvNwp zW9(|@Ak=f20hK%*B!A7wT5;+9$;G)!Xt|-GWF%;QM%`0nRfd*MkbUYpaq@6jyfxcA z+~rgSQ#vB9y!X&~&lvum8kh$Z_(Ubx+Q<5FIQ`V9cA6ZW=?|}pNzicPpgauizx-1m zC6CNhD0r4DaXWUWGB=j3wA#XsW^_DmTsl)Wyw!c6q|hN6V7JDi^ElY_t??jKW{UM( z0}UeN5@I4u#)cyw{KH0B=#bQM1sg}UFt2+I5vF6ckyLk$yk*$}A ze9p+aKgQ5Wxnxqho@0_4XqsiYe8kIp5vB)rbQhqM>6#S^)-Ag0IZa5KI>@{L1SQxBVeJ| zdhV!>myHGD9BjF+_8gc0vJOZ?BPws2gPK;aVwuV|iN!MtT@!zpiFBdZAdy`@h`GX> zDO;5cm&WQi3;od0`puizHM_DkyNeNCO2s^pANaU%&WE4oJcAY{zZOFmW&if$GWFmm z-wr{j5#F;c024yiE%CX{5{&UrYB0v}lC8T+070iX$tINj>dC?kUiN$99zNK!GFk`Pr6%1bj^ zCo%!aiZn9w88*)M$-#uV>mzzpW(3rbyyoR9UpGqI>(YQ~P-7?>zC8%3zr&`J&|*Kf zTTafKT4YlatR<1l)VXDv?MT=!b&|B8mZ#IqW~nvfcgf7g5YvP!Xjsk)i6Qc}g8FR} zzk56-vIry`jbw2x=7-sKnz8Gz8TGcL+$M2i0p-MRqIts?&fQA|lc;8nr!*3_s6FIt z?yx2LY4EN($c;x~7*r*y4I0B`=I|*t+F)8|tGq(t<+=Pf2uiKcEfU})>yqWCGh?)< z&OMD9SJEViWHO3+Cyx%g44u0=Lh+CNjx+M#x^xyKfhDg;I7=l(dVGDs?)8zjA0rVG ze(i7#k4=Q{?PMBW-7v?;}@kmgBP2r%H4*D1Os|GHlZn~%@CRy2*a7?c34zHBdJZ?YMT#qLy zbv94rni@2_RY?3YORq6jYS(d}`;bMQDyP<`uR=Xb+YisdrOS;I>*J;R!V7{Gtss4< zv>Y@{qh&lwkPKvJY>ntR$o@opb+eCYWt1Wa2Yk9zy&c3&*@7?kv^+Vbk8EXYTqj2Q zE%2!Y<)I&JO!$dTg@OQ;x0u6fZMR8wWDSOO=VLIp;%-Ls4Z4fsX7H*3o5YsIRC(zp zXj;Px&GvDqJg-YWQaPh{`i-8=1bc@v4c-`OF{NzuFpg&`O&bnX`88PuV9WvpHpJPY z9E;hfWSN#k&ZTi4f9=%~dhB9JRB{${*=6>nKVl{&X2Z0KTG0r(Mb0ZRSu?uX3 zQI(TZhgHFq_c2=qHLlbH9>qV+YSvq~h;9}k6YFx)h1OUPYmPS3h}^YnP@7E=+mbRS z-$6=4GCMbvW3}#nO-2@ht+{8PyaF9RJ2XDOBnyB)IgQ{G!#1SdP#E0MT@~)F8APc7Wz<>1&7i~ z&vD#qrF9*GmGbYXfBJ=asplI#;La(?|1mCdg+9FazoD!Tu=&LcoNZQ2rt+YMQyF}< zJm}>#XzM{7rRh6I0MP`gqcKPu^oDQRWVi@xu2le!3b)OAK6-JiX*!}* zt4!WVyV}(_mSfl^5$)mSsBf`2mIv20AbdG48rO@f57bL{0Qv zuB;`MaG=s&a-pprb{y<+=fs$3cl2t#V6i50(j?cl79R3l2k-c0Adtu@0T^Wp|3w!t zC;yWrPXncWk6JKi36rTVKmR4@&Hkh%LIqLajW}R@cDaqqauC%9VW8cDNS?ZFtK!C|Z3J3`t<9PGqxf^~G_%aO#)IOLQE4v; z8IH#Q4u%rKxpOuYVXig~V$`z#V{HV~NLPt<$rj`sF$6E{4`VbR_QK|sB}vsXolo02 zF$}6+<&Qxe>$bQ{FptZ^I2r)(`CjSz_!2tfe`IxVut+2*k>hNF%W=2I8xIrpo|hX+ zYMPgR^M_idUc^K({UpXaI>0iV{vz3j#O+k{e4f-?kCgS$lQ_bED;kq!p-x;PSAxWYMah=z-xhh4=gY;e1-%zFRnJcQh$3 z`S0+H4TY~o>^b%1e#=4Jqol@8Caey_{so?t!Yp}pet3C(dW)AxDP7IL?|UG zZk3~3MOb$4eo6D!#5=&no>dbWs$a_N(E{hM8QOM# zS!`@n)HsI38<`mbnXYe*+A?6XvKQ!;;KO1D;k`dFvoXL9;+XZ(iU*DeG_^}1&C`Z0 zM%6h%4tyv^=z$cN$Im}_snyED5m!Y@L}7w~BdG=;qHrX7!{Zh;eh9xhq)D;Cw}^U} zX4&FSDF%dwXJ#{e@{hpIZeFCWg z7@E?vxBEl0P*$Q^C2`DugJI;`YKb$=XD9QdN>_Pngkbn zbpJmW5WWpJz}s;X0-@;RRu#%i&<;>PT#kFPB#8X)oDtrfAMx0s z?oj*^hP#C8hNo2=qV^iO#B##P857O_N%m6x+irMwgL==}wQqqG{l}M5rMXRb^ zvp@lldvVtj&*$Xi!7R6W&~MXs$m_qypLoWDO8+~Pq)=3y2Vp9T1XVFbk9c2+WL#f` zR9KyoF~+C}j6rp%rMJ{U;hdDLq|CNEQHkrxc^X^HnTO&$$KMNDs5r8I(@X3}$&sQs z|M{bk#OV8_iR2goEhHfWhRJW1X!LU5^d-%c=Vm8Fhk)P=!FDb+7hUlzm+EC^Xr-}J zKAHP@ozsw+X_W*}qzT$PtiY7C5*OEWP#xinq^;YSimFX|>B%KeE|wE=nY3;`LMOuV zgloWSF%&KzI)23vmwz`0VNbxGUYn5K<8E_&ynSojo%YWRrn;1*zOA&wfwrl5Q_^sl!v z6VEb5M$o);YWm1g4Z;PfQeWY0;91yftQUw~4JqOMF{KU@<@fo*_&@x6R5;FX>@0I+ zHKX}YOp5mua9z-NDlT+yEYe>|u3Lnv26XR;5#mH4yX@Irpm@K;~4O;d{9Doa)zB=_H~u;01(5TPgs1L8ShHGMwf5#gni z$&a%+%;rSmm2tUV`xP5npy&*7*G;Wv?K=e{=M}+dIQSLRH5PJa$=>$DItmFB%74lc z5ES61iD7f1^MNmz;P%xKj`Sdv*3zsj7Q~BV&q;t5)EIGJQYnM1mR{DAwzce!?xwx*z1I zft)cU7kyoPwra3)Ry>1;%-sH(7Foc_t!**TjB>lRcBQG6gfpgB6LjP z#zKGqe=j(z8NB}&3=1fBOpY>Pnprg{e>JfRdff*`V=Zyb3Dy&g(8q=8B(R};Aw`_b zxnZ#@)PXymbi$zrNXkH1;(Fvdfgm zEb3?{0r1QT$NnLy=d7;z1~TS&GXLQS9Q>wU_?CSn9+zE;Uly4x^emz93v%f{{KkpL zrst7v9>&2#JJ&=raB15_S6!CLY9w zFTzO}ja17Ii6_PB78h!~fYPwTB`S_&$i0uvR^7)(p-^@;@5gGAdd3wRF$vU!l~)7O zECQ-XuFfDYI`+>r-4)1``{TXA{ci_3s7*7Uj7nQq*RLY+JEc#5>Skhm>omG{{xpVy zd!rSh4UpYwC#m-XKp{^vCV)b+6xQlc*D{&>qD*>kFOcG4J*;#5G-`ReB8hEJ|ppw|NmWy zK+lIz7la{5+TY))@*-_~B()(9K`fTD0&}G2j*~o-N~E;YE7d^3d#aipTolra?;>DH z#Szt5iUnL>oqy)RVt%~*84KPk#lraT^3H<3sdu%qK``iDhJoq%pGBL$&SiNdDpi9| z;aabes?GYZpo|9`2B~&ur0%b8;sEc!|LBMW+!JA4@#$J@(j`AMF!~Kw*if;K1jPU< zO_ESp!Lp19AH3buLt3c#8*I9hHVrokY;~-kgLAXdQuubqd|loJuhO;@+?4U<^YEOB za(K00rERLQo+OZ`d)(6P%xh) zU(BfSMiC$AtE5_O!Hb>08D1zNHwxwPk2cCdhEdCTo^KwMIi~*O(xiBP2tLn+ra1|R zAJT2Q!bXB|NoG+HFZo6z))M%LWS;My5=R4!Zz16H)*pZHB9mbtS@5vjEcef|;;^lT z^i7h@qu~4O7`@*{^cUhJ5Kd^RW=7Pp!gjE~2Ele~-rk^3)T9-ZbQn%m7Rms^_6IOS zsp=wZ$HRZcXW_Q>8=fkODOBwbkOeti4FbKiSIU0I7GJ+ankN4%$sip-5*@isOrTvb zVf$FDbwMbl>T1uJxF9Q?PI=#GcHe)@-8l=hI3U#gn0J)5MdM{ME09PCBi_y{itmM4 z!ZhH|`f_W_Vgm>F|J600{g*o86tr(%QNt0jLPfl26J>%2 zmU3-@@rN8%E}MR$O&s*k8smSZk%}UZp-HC-T7<5$5w|So*Uk*tzOx8|E$EC54iJS)YdgvD2ym*}jc&cFw;mi-H zN=}+A%-3CxvIlcl=TfeT2W-TN-9d4*7lLz-OLDyt&*7l7qxY55y<-|A{Ro=tGDyII zZ@p29>_@;(ptQEksV-+mN^HTLD};2vr1w4vP653WF&vGms14?mZR>j}wb;U!?3nv1sMV(a3{ z&Ke{SY>1_5ft zdkSKcPM0N!;0olf1fY7fz7RL$O!B@cvvk6*EO1>$7Mm7W-8&q}vF333A99FLGnTaf z(n6axskn)CG>%*NnDILDl-F3QWS=j`P?rfw#6k&tM{@O-Kf{(y^ljP=LH ziMEzqu+B}0RQbwS?yuBINBgcDv|H*PHWrf?Z@L!`awuWPii~`gSx+3c!4ge-Zd(TB zDU-W;gG}enz^%83Cr#x@E)&u6lu1M~DI+4DVq_OUly8C{jvVe1cWjqlA+{(0Qq^dr6O~Y?eJvGA!Yz+B0TVn z%ALr!yHgbUX*`3xfro2#w4^7rn@51F)fA)m%{X*pT&rP1vF|m2r4{*4ReYw&cs^+J zygVgxTujVHh&h*-$8$oYs<&5>XQ6Rv%zB|=Lc*LRO2b|lcr{Qje?X$c@y)a3`tm!S5#zN)#f`2BEx5rR=ppK}(d`Vf!f^pd zfz8K<#ak&e2$&Eb-v-!6X}AUlqH?e8Rov*TT8nk&RG9}uA0zQ9kse{BQL7AzyxwC` z>zu5FCrZZV)JhfjY_0)5xqkAgm`!8}I3Y!N>To%X3=bc#-XCLFEi|EQRwwyzdbo`r z{py|n=vS!L>xkK6r}*Z})4P1`QR&j#Kc3byyfcxX%Jlb5ph}p71Veo;5MmfcWO`Su2Hev@ z$3N*sgsK6YQr2J$16rIt&jai9L(1o8TQyS$;h#dMYLr6hfL?clNTSM9)-c(!BrauW z34|WyQYAQ~QKooMM#dV{!HBWc&35Ovrw-T?g556M#h%Gz*3e22^_u0;+$N)X3G8L|8!^i?OiIK3HWGiM z1`Z(P>E@hmlnRxTGvYL4Jf{wDq$MXWrqI!UDyN?>E2br-UB6dA+mRRI{WII z(`2&=H%Jb5F#bH5`=!}nB76<@*9vey>lyQZT)=XN*|SEpGVK!B6lo1%&8K71(>UzS z&W~4jj~l^WWdAu5gWVixX_<`E8fiWUP-g=JNKwZiqKEv*I9u{s?EWoeoc~~|AP}Z< z%f<;1hpYr1(ac!_`r_Jiw~Tn|Ns8yZ9}^gk@74Dcn{D{`UTmf9Z)EMa?H2sHGbvrG z2k-y<<9FHF8||k}rISnKN%pGfrzFe~=*03N4Mid$o{`Vy83?V^Z$oEjFdJ{Te~Lnb zcGc(i{Mf0kO7z7={>2f_eI0A@1CfN&7jT=msa=!B&EffG_e13B&twA5he`G08iwpp z6n4Awm$hTXzFCfta;gGhuw=~DCbQ9qkfs@4rUk`7`Bg zKHHl(tMz7ASsc$lZUZxyzv++b zecy}cL!T@4x=U3;75w~Y&0?_nHRdB>&$R$Y!7^%d|pAg95|e*l!cFFUWmUhix- zTi@<@WUR13q8C=lJ29h?vdW@DWwLCzGO@lKd+XGWO)$$c4wEixYGzj=D1y8(2pxkq3CcV-DiH zJzUHdtYhtjM@8v$+44u=Rq8iw3=fx>-v7ZUU!L2xQEZvA6TII)RPp&Xej{v%*H&t@ z-_@Ld^}jI^kMLS8z=}W=`fw~1`uZ0@NX_UMO4d^^A!KA=h|Ddlc_ir@BwEewuXkD6RR|p^}iFpxf1^FUY^Yw5i3? z*%@L}aRQs~(RfEA@m+_KIV8fIPtV83UoW57Ou~Vby6w(n5U`ghFAb*Sa9>e4bD|I| zAe-kE)m@&>iLfAjLfYeT#NIVud^oa4(=__c2yKvU>eU*C`{kzWXIakAq_*We0TE$1L#m*3Uor$oYelR2EzDToy`i1_G@H4@9WN^9KdV*77;p#W+e=$8fHYvu9WN4w=Z$tj2X z66?gykMeK1>Z2t9dd*@yR$%@{82nW&Wg;E_PSIfD;?7jI0{gLLgv!5P_c#96Ln6W{ z>klM6QZ+(evuM|>_zB}D-3V}v#y=c{lGTkxbrWNY)`>q0DZt>5hlXLQaVnS+v~lF! zo(pzj{Kw<* zHu8n6-6D1+l$k>RmBk6~)8=?YMvUDN>S(2LoIt@8T?5im8J_Vz>`b-O)16<9he2RU z(93)PjH01T9Sj9LDOv#d`1oIPLPJkxb!2Aatf80W(&Rg%<^K>Gz#B=$C=Rg}#Vh?T zr3smBZTJF~*tdxMvm@-v8*vceknKidj5vXLZ-^OOXI<=vvS#Pvlt~5#!25#GP5vLx z{qY2;xL6y+Geg)ppD)0D_^kq zL!@yVJQV2}hwEW2I&%kl@<(M7n|N-TZkLbo^cOhZ*CwA$hqhRCGRCARe z(SY;EUWEd$D`XJ?1Kv^vxNQm2W%$$k$?X1@Xo%fLBjiUeXaEWZ-#q2FT%($s$@L;_AkA?>Ji)<<#Qp#30e@CLT%jGJk(ZsXs^(Hi+rN#CB8E-T; z5D9_w?uW3R48O|(=T5+sbff;xdhP7K%QdgimCMTkDUU1B#ldOAu);r*)E?%pICvpjgZ010S&|gLyOxtu7 zTvHs<0cOZHg+(@iu%o=&$YK^GD~{;mgu~i95Xp}6&78q0H7_l{%QWB38c_ka7bY4S z9vej>uixNcU=&gB9La$1jbPvWl|1>X=W?}bh<_VxjvMXXczlTz3jB^2TwVpSnzlMP zvZ@vHxqlulAFypU^3*2Jq%^wj_Zbs=onFTlLw;!=1v4MntRs@HKn}Z`+zE$?TCUeD z{oaD0V|a>2iR!7ZSn=m3)UUyZbP7L(7kM~)9jAO&?IzO^bz9 zT36O0%gkwmf|SD1HT(IMpc_mEv3b?w*#e2{crvv(-*y!4`*Jz^&T6{@;)=-O!`FIy zm+m@8oJeBGqk7G{l*?QI=IhBV8qjBZ9ziTTQ_$1ke*WY%jO6zO^J}Hj9sUsACx=~K z?+Ttsr9D8uJA=)%{hyc7R?vlzg?^`(_^V~p$HzxcGpN6bx`|MtnoVG!ew8MmPOi+i z;m@c}p`tL%M0|A49=wO{J|-AP9rxUIlO%iPfaGC>%*OPk->9D+zA#rL?4_h2CvE*pu z)#Lhp2!ts%@Y8*8+lnEZ2f?8yL=Np{dx>Dv^BHqK5suR}E za)CA${7>bmH!7}|!;HsoKSTXLNdRA9-`pLG@w>vSX^kZ`zF(TS+Sl-*)_5T@F)EQ$ zr}iylF(y;0HY{W#-6jFTLI+~K=E&UrPC^z+KVvh06)XJ7sEC0ol2IhWP~*4mUKs#i z(yp`Q&7(CJWVq~g`O|#1cyr#Y6KTHTJ@wP$5n@`>MmrF!)ADr>_!l1%68yWGI>y{~ zyAc#BmXObDA@>v-h!H8Gw`*sO0dMuP0(rk%JuctA+nqf>4o15PzD+0M{Q208$7+<6 zl-SQXZ9j$KS%}NGckFDpI=d{nYm94jx-jJie$%QSgr?N!+AZhZhgJ!mEC%XJyq`Uu z13OV8bn!eb)?P9k^Wnf@_JED>?PXt_KJX#&hbM49Fxe7P#!$^}_P2znSr49v> zNesW|#^>)ZUg5uOxAMdFEB-_a@ONO*Xn?@9dS3r@rYrsuNZeQhI9Zj0d|NHsS+8~% z$d-H;$tTnB@qKV&pa0|ij+`R!^d^_*AIl&gPcMLOzFxaOPqHXfv|9Sz?fqOWATrw* zJkogocHQDe6~!s)dXOpXb>HT;s=x1>K{j_Vnuj1_%!rhy0cm7>r=Wf6I5}Xx+m|*9su@^9! z`Y33rQ7sR-=lghZ$ms1;Na~6`C*2^fF6ZogleqKweZk+nAJ$ScT>{Sg100yU*U`f8 z9XnvLUZJ~X)M-k}vUiEBAH%u{jkek%Z*_L<^UQF24u=mT%4l$MXn)@QY96Y z^=kbcn)z;pe4~DkU}nq1$(p#&M=Upd?x66;*lq|AlO+G@HW(sv$|F8l<6gXBW9Ax9 zV|N9ukM@Q}Vz*U9ju5oA_kHpIYPJ|(x~BLNq4c!gmVZMb0$+2@pBM1>2wJh$2OzaM zK5EU91V3sn_|)*+jtmQ5ZgjQC9X=nxES9Uj}3i}4rNifpZ2i0Ai=h5kDt4NZ0E-1R22F@)oYMK3mt^YSjzT##rz1tODQTbY zNkBI&c)So(=^hh=kOXLu^38Zw1P1*a;CWdH;UJU6bSw}29rX5XkvBI7e6>(gMFu7&Y&&Y#kx^PgKX78x(Q-d6<5N1@~pXkqmI~!>zJr0vQz_|&zJtC^{?GzCw)SFZ=PokCem=YUYnoe z)QJ>Hbb1K+@kQevLRM7oqv%E;Y_~o6zRQ)RdQB{Gh@XkriE6MzL}ACk33&sFeaqR< z?3zq)mQ`lk!aPVVYt2g7U-nP?VH1J@F@`Ul@PY>;zXWP`0y{L`Vx$b1z)~{Mb{Q`t z5W}1Egf%?E8W~khW|L7-yvg8FexlWo4Jf+PSdevYxnzyTRpRTldkuc6%y3w*HiJLx z8ufwL1Ur88{R>a@c|RyXb~@gp?D%Rp1z2&~@?ov%_759E@UXCy|9LF8PbYW!V;;ou z)llZs#p7@B5>oqj{75o};M@4DX3zeyw|`vi3s_Cq8aP1>V$jtY#IhIIyu=CLWt4tG zBlm)E^AjS}+D{RhXt-Vlh#UC+6fhwwZ8d<^e_GytCgdY>5Mn+;oC=Lys!)M{Fd<8` zQLoZPrY9T_>pRPKhsQc(c5C`SE+B{NZ-)FT9auW19zfov-mhHB&?gbqyvOBgi?pKb zXD1k)?ue{!xEAf2KmSJqq-phUvR|Ox;173WfuX#NL0g{w!JjoRFw7r;`6wDq($w2q zv6pOc`G<5#9s9M@(qo5~soV9|4RRm7zuq|+zlP(APFYG6(j#(Q$fKlgE!6DPoaXbR z-_m>$a-I&h5=BhmIX?=SPey+zA9XpZ%j@b1n*FMi85E{{dbqRR*!@IwT5i5r3gJV2 zV>y`dg^nX{UC?{cBr}rIV``?+SP7~_L<`Kmy?<#?;bO~bB_@VKGst{~sFn#l-1F-| z9V*K&Q)cQoEX^oAZg;sd$E*mM@c^PvDj-WalaIluc5u-K{{!qTlj6vC-NkF6n7pxS za@#HnVlaWw6XSulwgY%^t;gojh_st~hVA5x=gto@1hy8NO;m)!o5krgV(;AmNZYM; zL@^Okp0Mz_{)B#89oysLi5Zoo%a0CVM3C; zva^k*<126Iv!!xwr?r|4bRkZtgrC4T$glc2{JVb1n8%Z);0MIw$u$1g=kyujPUo|* zKaOa*hMznJp3n*fP>)hD*cI{jO#8%xrDGu|9?19+LG07GNcx4I4zPVf=PW1=;);DC z4PG-h9N}?sS-ITT>J9wK-Rc1-sMGHllfy=&VwK(buNuv7GVY4Mr8K?6gEhxe+}xKn z;h9`^W4aFZWPp@X$6ZggO{zTMyAUp_UV~u)TCCk$jn(uP5LJ-hmkRq&00H5JJ3ND4 zyBx_!ljS30VoCbtp4<7;ktA%ug6ck9`a z3)zab#1t<4sdh%VRt%q)rPS07cdj$u$5~t4cdAbbe^{J}vI_ z;*|8y8u=--N&c_v+yzCUPKJDfL{d^bThPnpjZ=kWJA%gQD*>_x@J)F85yiqj?*H>2 zKcMx^bu){7gjks(H*pku5B_1K!Ryq(YkgO$amzc^UaFB6mUszGssFF7!6@xUi@f6=4u{L2~u_VLwMn`B6sCoVQZy?<`O(^L6`Y=m=Uo|B|d+(_c_n+o}Tmoj-$giTAxjBdS|Lb_ffgRv6ynLxu8Bv)$|DV)1Stc`%sU#i#724 z5cOi1VV!@E84z+~v3X{g;(;7XKsiG59uSKpzVs~0;SBC=bOH1E|FM1Xc0IwLym14t z;TjJ?yFBCKj49^n)h8TM@RQKbDYu9+bmJ{kGM%&hP|o9v!+RIVxSQy) zm8K)-6QsOWg`!kfY21fnAy=9^2mB2zo<#p~n|&Es`oe^+xb6_$>a@C*NwE9i^VqEA z^15EHdVQ=t;tkxBaA9ldlUW4bG0}Lv1!Kr`7Q@-BJi^n6TJ?Us(xXzc4!p1{`PNVn z=T;{cjZ0~K%JMB%sLhgT7b%n1uA&N>ZxRy|@2oy-tC7*Ul24XffmpdT(In@I0fCJj z@n3UHMitf#^^*PYBmLff2ZQ%TJXE5awS-R*hzZFdB#B++;ydKAxRjS`y)Myh8qF%_ zYLT|Xae|6wU2gaA7x+|K5k6?nYewygPTveaKQ>VR)4+h7Zl-Z6k_*JboDy@r8?*6Y zh28b9<)w&6+V{en$D0QbTDI_~hp)tON(Pe98&f!YmLMbMxM7Mqo6GQnew3O}I=7&HUm+qT<0 zUH1yNGuSO4On&^*_OTpq&Q{z}+WwWs{AxCU?0fuqwZ1!os^XKgSV9SC89CV%JrEi> zoQXG1WzeTrDTj!IrpaI3R}{vXE5TzmD#fq2qz7OkNL1`<-h43qA^Vv42`w=Tjl%Ew z<#l@ph-1xld&%zU|DJWFl+U1JE+2c{hd#77NXqCBUBFj!?LiHKTnRvbhagX?X?o9X zxoER?EYf|BKVsoVkQc5!y6ad{9>%)eHQB5YhJ=YaGI>lXsOm_7TyfiEWX6##W-0Fz zW29_{=^EeS;CN`q%U!P0Y!RM-+JBAATL0GMxEzC5$_mIXh+m*h68iz@G#~yUAmW*; zhlWA(9tbv{MlQ<-F{`wPOWcB=z-RVFvS%@0FMj##W<}GeotsiY;$9}mwBQanz_(_( z*93=2vL4F15{CTw@872n9-F~god0}iz?U?b!j)2bu1c{?I=O<{Ybv_}2kJj+$s_bH zpB-3aSa?qYm-_%NH>D~~M3ZpImcgIe8I63?c@i9quj=_qWOvu6Pa(RU3CjD!254h9 zCAQA!t2miU-*KeCUW)^K0~ir$y^dU1FU-mpzeS<0UTl#btQ;%_CYBa4;(K-t7V#2R z_LpR}TPFSEOnq`iSc&qhqe2e<`BvsOY=4n_E5NCQmMas%g{p*-H ztk5$FW_qOv1-P?1UOZ>E+~MI4r!~&!Is)P_ImO{iK<03oY@b(8fx~%>aPl*C0S*mH zksM?WH+~!pHC2$)V~bY77HV$e%>;ny4BDD^$iG)Td8DYUjY)E^-bWwevM1tw2AI|B zL4t%ZGS0wxq~V?Bj_r)f&piJCZnv?G>=XmsZZ9Lbh6TNXm$BR(&jfLi;AFzG^jM1W zhI0p}WcaX@7~U)0Xsc<7M}Zf~h>Rmip|cqoEwmQ8pozBga}p^$fnXiH)k{IqlnWqMT+Uasdc z+5Mq+PXC0zuQ^}v4ruuJyDlVG+B}h|<_tig-dQzCz27D@(E(BzNg3T6_0DMCV<@QQ z|F&=;7J$sklB%jRX&-41`Uj83##4dRs}bIDRl^7~QdSfkx0jFl*zGv%TEl715zxAD8FJ@u0x>h8~1KkLAM`LQSqkcUU z={?7K`WlLn_xmTr%PcWO?$r^knnd?Tos~kHWmAsV>c8rvx%!7Kg8!|TOX z2f*ub4cO5H7J48A33QR<<|~yLEPc({9Xlvwa&DOF&q-<&x&R-7xw`^|yia;yjbCbW z3`~=6NeIxB%pRKDwH@6X)C2fYIU6PRC5q_sRgS}F$sxHM z!9m-scYHKQnez1 zn-u`x$mjev+_){It=(=Avx|$(DkjsPzuEoKsXDqxKPCBOxtl(lr$3I4)+=L^q6Nbh!t_M`r4s?m+`l{ z6S8SIK0ZxqyNg#xiDn{4owI3u5p0o6b<$`^Y?zZViOxuRuc_OrChNSFJSn7d^Rq~% zY-olb@BRwD^Tn!8{jBh5;kTiS@HS1PKiD;$4P49{nSEh*Jm~g3f%nrPokEmmIw7i6 zVpoh+9dE2f9ZtBX znylA8Hsl|aGg#2ndM~omwAYA)_?&f4;c6gsEC#tf;&~Lk?RQX@lDL)BVhI>KtFTa9 z5Der|mM3J=dX7wLtnGc8SqS1;rKQNw!Nl)V{~3ZD&(!`okG%gw@MmZ228~+b&4ys{ zD4xvf0IcCX6xjtx8!(?!^m9g_M@04yG$O&u_1de-z1buYG}fekC zmp~xc_}XvIfZ6xmntxajLCUgC(A@Rn$V|` z^ux5;l-Nu$Mrr?pAjT|_BK={140(ABMM|ugHB2PN@kJyY!zwASf0rl~r~sEk^Q)2r zH8CFef21#{V%%+wzf>UHAz?uVe=`}$d2myL{BNwt^Rw^i6c>eK%`K!5Hl`9x=wYg( zo!Kgq(9x%s_sc*HpVg|ax$7v-9^QC*tMq&g_{rhgSZNTr`a1EYLX`qz3};^tSv*XE z!f$_SKC$-pU(XJd7gFd6c8>CRpdSIO)-dePZjuSCni`nOxj*yaY)NGqffEgWgtfBY zBfQ^+-hwiQRZ^*9m&Yarm1ghm^HeY)ORDrTEjuCuTpda+yJLEFv5J+e&P+1Y6XLF5X80GNX-qI}9hT@rg8m3%(~h4Te=uNZXN=8k!ppIEfNP zKLUG8X5zeOwl97uSACeOMzq`L6-b5?=1+k#D3*HT&m*BwCDK?c$IGAt-|sWjvDX5)ZT6MBs_rx2B}i}VFX8o? z&LP$~0Nia^Dv+<{ei#$v7cDNMV-QNK5loJKMOIGcUK=sWvAJQK+DWEKejb@4lEW)~ zE{PO5X$I6~Ifn-)tTDDBXgS+$>Vzq1HsLll8(0iyUA%uQhjv9e1KNkdzJ#E=TDT-=)PIr)sUYoQ!tNr6`khY#!Z4$Ey z=|l}|ek6sFch(0~vV}0dUta*;=bfUD5>k-8T_(}e%B*@$ApG`xXW6xSW3|DSvg)%v z#=tcKO_T(pSm$s(_V4opLo`Gc(|Nc{JeRQ^b1M=ZPu7ievQ9g+$RKO7fH(e>Vey)! z9917KR;?Q-_TEnyfm}A!jbU_3ssG?G@`V&3rG*sBqB7Sxs<)9|9Sx|YSL&h6Edy0tJUQTojFdg)45GIbZU)2 zAS@`*n=_VhY$x!9`ZEAjuDg+zu`=~oHFw~H+Y>eXf4xeC*8^UY)nyOP zPX^as8v@B-`5 zN&dec>3W&XCorZ~FzY=Y_!73^)`0F`VOHunb{jnucDhoSZ3Ry_S^ix6iAPP!vACoR zYQI^Eb>!jHC#{d7$P*Kl`;o($YCOfkhdH)y%Z5b z`BizCB8K*=ZPF~+nAoS&mwb$WC||;-qz#_#YX7H4xMI3u9<28r)NH>+grCzTmP(xI zpjJun&xjRC4HU$|ruDR=$rp`5Xub+vi&G4}i%Y6VlC}%*9}HcT3*ug92y6&LwA(CY zVr_+Pha;6RFdWJ}d(o>GWs@-KAl39fEk8O5WRc=Ypr9wbqm7<-Oi-Q-k7NiZVW7f! z!Z5f{WdaYx5R$*{+*S4@@nv){4~rTdfC;!DMqK{!nu4)`eM-eR_*79Ch6)_jb$iJf z<}b`nRrSz!5j#Qpm{?6c;Q-G%r%N`KW{lus@UTgyrk}qyN9$j=vZx4kP( zo3&3hLVp+6YCzQ`7qSgmDOmZ3P;)IuNU${=`b`)*v|3zwM2U6uhp(b~+E<`t09Q=q zD!D@vhZHGp!l;H0rX0Bp{S!u$VI^6}!6IP5J2caP*-$Pet_XWS?R@vA_(wbz;2fh4 zJhBg$6uv#)oVHm%h%GS(txQhb&?}q%(=?Yj*3wZPhpbULt>YRsi!?G~epFM3g$uDM z97}eMsicE`yzH;h6B|g&sOVlm9%S0+O^09bp5?J;vi*OHe0sH*)W$;p6Ve*ocwD7p zX3~Q8n?J$^={lLdC!YWtN7FAnr`%vs$CBK_a7qCJ|Su{6|ub0=)&cF`x~2q7L#TWkE)eDj`xsp|MdT*Q+VG2r3LErLhNF* zaIf1NC4XTey}1(EQ2h(I;%?=^!~=2Y-Kl?n2Ty}gt<{-{d(NCjvm5}EL(jUyuaE!z+*1Dp@Z zG>te9R03^BdED1nr&I43I_@NFlGC39GAznSBj%fo(l8a~#wxiuTg0WyAlpd8(?RLwyPM#D=Qwje?Mx%=A z&emYLDj&KmO72;p>gGxVW&py|1@WG$m#ymofuSDjN>}NC7|IBqc7srv1!w5AbJvW^@<1e9VwT+sVGEiI`aAV}lLq^3q`T8cbo z8}SmD{O6L;c(~Lh9zm2QbFycd=i*UxJVfyzuRrZZtRwF8S0($5SVR|SL+7RLp_I`{Y=X)vVf!o98;R1;!9q^ z_}8rqePB2`8*)WjcmSyyCxQ6{IV;;7xER7QH}WRq{J>qi(5Hfxhu#h32BTJ~EW8A% zqn^DJUP`2HtEXdhj@^TkCT%LD+|&pN%2o%&$UaswYXeGMUM3Z=%hH(J{WFV(e)4zx zdBMTBS_7&d?U{4Ib1tP*@4sullIePYlwH;=ssYle`nM%wKf28x;=~dND;ZNQGSGzx zVhS1gvU;R*1>=-*)e$6as6!mn&}mW|)H)tE!gg89iwYT^cs=^@_g!*baRx1AXNa8+ zZaS`ZH|b2u;5cwf^9?PaqGS@`t$tm#76+AK0s?HlR|YTO0BUHbQ-5}`=Kc5Hczqt9 zp&_W6hhhR`T4WXE3c8%u|1vcpO_4=STUCCZI`>O18P<>r_)#wthr1-Q%8|hKXCpEc zW9cY~-j21?%WEOixlq@>uY0n-BhM)&2URQ|MfS$s_+>lCPvzj}GIkI!Fq6@(5ES(! zY?XP0s4ya?8sG@T!uu`G({G07yJH;?z5!7hWNTC z6$XbU22lf3k&TRvcqnKD;l}wtz(v8JVFY8qG!OYY`8vI<1<=tRQ^Gk#MMBZ)ZI;30 zaLiCFgvg52mXVdJfCj^=HoohTp6c=Nb03WUS{@tb@^aRm|KAq@Jf^7nC@>9%rAt5m zTy^*x8tPC+8eN@>on+U%^Ae0DWQ}=!tU!@eq+if4aH*i=Bvd zon{VvO3FaA`H>&S$#excO2*Q@a5I;DcmgbnOx780Y2!VhT#pg}ruW)%K>ohKgRn`R~VN*Ir#8 z8FIs4faASH-<|^KAGrUy#wvEqbFx|eFDWgLhB)aWcJm2V_7Zxr_aMN@s=mbU6nPUU zNk^25l)N&TFcb_o88dOm;xs_#BI`~wq$#!#!m)T(U53tR1;IJ_PpGGV0@I}(=fIO# z=yIMTG1hC-QpV0`izv0d;~Q;KTEdDSO>44S@jY|BH$y zb2g8*+oL!J2DYyT7|CM$d2_$XM*8x5G`US13m)}~1WuvJsaVdZJX-A2p7E%m@aZO7s zf~6eu{nNNr{Qlctr~*+{8Fi{UXw{}GePMXCR!s9g1VZcpzk&H#Tdi|_ddx|D+itWCbd_oaYIUlr_@RG6Zz@f!qh$1aZ&%}TmE<$ zDb8Oo+~n_)?Jw@LmUNHN#>QO6sE>LbGJtXb-m222QxFmw832iF*r>wG{On2pMaci0 z+WDYMuh}m*cn{1;_dXaEwfW#q5$V{cE`N_yk3Y-rmEuDXOLIAv>KkBF-2JmU4fp@c z6$KB(;d<;TtLt6b`+v$CyA$}pC@E(i?&U;d8v6)BBFcP+-?V z_M6+=)7h>H-?5}Hf8w9Jr{@H!RFUd3gy^ZIngt%0TGzx-AuqwcDLty(b89hEgT?$D zC&r4!8b!${;6+Q4C&%_OIiVU6$(PxKR^$n8y`!I`l?5Wp50ai3zf zTrps@O|N@d5KC0tt_BvVI(S#s3355I48Cd6Pft{$XXoXQ<)+nW%6!zxp)7 z4DfRNHP71IvdNnj^KtjKk62aWcc$$sF^o{;l+dHjne(;m?lKUmhz@;n|5rg@KZk(V zb=Du({U?vxPLXV?dX;7*HueG)XRgEU)9;+@u8z|N!5tReS?g#_*Zx^%+Va>6mgc`x z9)l+%+U*nWUKf9!w8SmtK1TZ2(M0SK1b7_w4-Z4}5BHJaYg<_{)U<86Z8Bue15e3- zhR~zJl(2dPS(W$!YPm2Ol~HvYkeF!5G=F0M-u`|d2`^Mgtcdm#9b2QpW6{qKq~Ce2 zM3xh%-2qD17s##-55-GPi$Vml8F^eU9)EKt5RhpQ=?nB8!+_Ok_}CKoPf6o{lEd;ECPu3gtHYyZ|JXpPU|I4bOO) zoAg?(wfYh0BPbWOy2$)yC(aM}4BGAJHL2?V>}jmH3y(=*um}hXv1=kbasHpc!9|ck!g)-RPh-h6 zGu9U?dENlMIu-E=I6s|c@L`T{6L6N7m>)LK5|)9rTzZU%E4;~_!i();A&=)xma_pb z@ECL&06pD-o?KDYmGwwjB)^irnPRD#A42cZ;ZXvQ?;PAy6`2Yn*P~^;_L{{CqBB0E zqFXxpt|T9$=L>D~>ICy}gQRSC2#!c|G1%D7TFsxzDYb2WSWCvJZ8-$M(3D_dr z-EgUcyd+!`{o@Ts)0aZ;-u63Z*_X%M$klyu#XhGh++&n#zbJ7^j!Q$tgT}ThvTh?) z)%1-JQZ50G^Sw%H`i1{6N~Uzfg<7g zT{J3XJh16c=hM-6OO#)}oOY+PB>;*tp!}1qRQtFFpuXMit&PN2Yh@Mka4H#v)8cjt z*V^fI1W_XJRRAPxLSyiYLaDJ(tIY*t){ES-cz2tuY4$S+)IALxI2cSO)kwIUPlos9wKO$nh7Y zL#^v~!41g*{e3yMn&^nXW8a-$6y`fH(|alS_2UJ>|CmwFa`woWsviITnHs=WsqPAF zo)QRLTM9=Rx(WGxSDvbz2uX4K*3B{1*E*h(XqIg?ndz4>cAyDHrB!Ow`~5&JU2nxf z&-)y<8IDnw!vxCSO7%+OKiPZO9#Xbg$Ynp8ob%)+Z2zUz9K2Y}LlJCsfSZs4r9cK3 z@y5gcO4{zilOiizmKV=rirOvK@x2~r$H4G06b9@IkZ{iFR? z2k2yUgsH&6?d`Y@QHG+>iv1^vYyFZ_=KEAfrYjHZz%VRz`Exj%2csGz?8v(Z>%xQ7%qjWU8U9 zuMZ*0Qn+*N|Btb=3W_W2x-{S#A3!f+i{nKwUzLkD00@coa(XM~0S>wxbJ?Zmk z(p)GPaIzRo>>CPI{-a_>ZE!u_CF6Ya1u4o2S=alrU~DUrlOuHL_jdijlm@5AryZ*pq!3I z1+IqGN}Ao?B$Vl|cE(^g$i@EE{3!E~^4fS@&7FLp3BiV4KLcvn-g^R`m2)p-5}K}n zMc;z!E7%t&z=v|VJl;!C=HrRj-9m2nc$=B6_P@6X|7wG-hjK=eY4)H)CILUIDCn|a2+@YBWcN#k zrbcM3HQyH6I*|R470h{7I%e_fUM!LFn)Djc@UlC`#ErmbT6vNGMG7tbm8ehr@_U}Z zhmZ|K4DvWwe-rSFev>otJ2B9u^YFD8`2J?it}DVU>W6rs>_*KeCU2iTc5Sp86doe7 zXBGNF4TuDJaKXO<(cA@XAF~v!t5-xyUiY^^^48m#@~;*7AJNvYqRBhiv^sw5khlQh z5~$a=i-7bU#LvnQ@{1_bl4zb$lt2JBP}%j_$}b9-BEMSI7vSqE(%C83Hz?P*hl{=- zX7fAL__W4M7b)?XEuAqaWr1!E)r#I5*gm^Wmp5NgVce&@)#C(lsP;#KKp=y=6W^WT zq(3wvd*eyCz}MuX%*X7kdR*apkY!HCN7qUBiSZStwVUhP(d9O@2Y7;Y3;Ey`A86ZI zhYFUMM=I3^;pLWbF%C!kpIqC6**;?}Hzxf)nCTqF9f+8exjW4oYtU4CR3~~ZmnQif zr5ODiL(_#)&(9B6V_5>QFo@SDs>RB=(Rv+ZBDbxFv!xwtP1we=y!>2Fh+*7FykUI0 z0oH*StZQS+%!qL(!e=Sc&$Pa)WT~7chyC&`gf9j+%gf_758mTjTYThZI990D<2Y8| zq1Cl1Ka@6^&(FY&mXOexpp>{koXtPGqHtfc-&w!h6~)2QM^Uu7Ef-n~TqP!<`CSBl zvxI@2E|fVV(HPH369mzIcq<%9W%?5PLU$I9?BjI@XWvt?RN=>D%iG1tehJ3Cwh)IQbsal{P*wHAng-&o85 z4zWtVk>c4*E(wmX23D1g$i2(>`K32!z3=pzSc#UA;TMbAQCUM=Krq&~)-jz%e{^2? zQ5+y2#w1rIcx21lz3Z!1v*F2haj?%)6s34j3 z>+wo>4_1foo;uF!pU?_%M2f4I-iVa<7NeaIb_39A_{Z1Ft7wZD@;1=Mb)Tw?#8HE} z5G_o|i+oXx#PhVwEuZB~X8;!*pY5u!_cakMUD+ft*X4A<+j7kb005BJD2H35A`|as z?5ta(2a-|#yhs_?CPWkj1kx}YDSS#4v5f{r=Ljks8?U@4Zj7(>M|?ow3Q@AgboX=c zZ$IEwDdN?`k2J_ULp2kTdGiOC;TE+yv(-I3G9Cu8@bz)}*R)KP9>2@s;A?*riJ?)! z#e5EfF24&L41119htbVXaGeA#8OXqQ_Ga`qto_k&Gj7E0SWv8&@CPox)UtWI(b%xA z?!?_I2280aKgMj~Hp1r|pUdA=#T8PLk`@y>?l(&=%7GiU0}~&E7sbqmrMwyqM0{~- z+#wE9+pODNx;>PRuEI<2!VAJQlhAsRuatE`k>o6V*VviE6V*S+P40{Tkn+Ax-;`yq zSLv2a0ii4kF%TK{h3mwsPghsh-gs81{kfRWqXHwW?X84W*xF;hQl5#iHn&v>Q9NHK z20}wkV%jv-DpeZ~J+pR4pNHqShX(uy{KqEFATpwM!RH|>CCVyq%0$?!vjIdI^Rll< zeZ&-^o^VUYEAXf>6hhey8n)kGEImZsUWEq*WQA7fE*fo@MO_{v0dqT>P6yx&1P!Se zri*udx!Q~W<$*%rPfgt$YmJ3V{6(RIYBeqwdymnJoyx1?-Nyzaam4psQ(ljEC;SLS zZ1MF9IU#I(=;dO2PMGXUGHJczFszMu>FPn;ERHNREylthdBh!QX!$;ss>?P>sWN7% z#FUICv4&?{^L71<^lr6#+WpD%V~hiJ!bkLUhEh6S^@8qQ2@sIU+pyQLrS(g)olJ~{& z=X9`hh1ip@PyZ;8kHGT%dl{UxR;E#*D7BAq`*tfc_yVNkxj!3bA;?>!KoWDS4D9ZY zCNk#TrDCb+#7`1J@0@m6)>Ee5Hrj>2LwqmQBEt8~_kB5B3=j}8nzQ+E`rqjhRO^}Z z^%gT!Qjp#IlEnYn1)Lixx1ib4yqkNkWB+m){0wxvzBR!{!d#OJtS&DX8Q(1Z8rFEV zS>Z?wf|65=sRXb{8$~eim(v^MON}h*b+Y;973PX>UohZ&h>%ag*Y8jH?_5^=c1Bf>nIFF`Mref9Q8ikBOaQ-y;2#AgzM z7O^|(ef#{dZbWmnJ2riDrP%J}nsa|uW!^jaU9;-_cRw&PF2yQpJLVElY>uhtFeL+;^1=`}pN$r|3=xBujyK^#s@n?f!QBZI!vp>Gz#~+)_d%Tqnc~ ze22*E+MyB<_}RtpkLh2xw@!P&%q%m%Vb z#l^)EYmwjoT>EUxB9Mgy#$)Pb+6cK0Q3K&cR;@huUno0%*=bI@QnCl}!qBi!H_%ef zA3yd2cLPK;VrlaR*xR%9q#w$np^-%Bbol%n66>Amz_p(h+76qWJLA zxzU3^l0+^HK3gH4)^2!#+YCfl-aD!SW+NEK{ey$WLN!!H>OvXh@Ki0}-R=P&HM?%p zOqopMPyAt*$ABC>pNB)WUerUYEb#8T6pnkxo2956-!x8l@tlh_pVo`Du|YGUaV=Lf zVeJI0T3FJ61YYX6d%COv#=m&4u}_X@DUJ@MD3!W9^D)A{7cim{ObW^SBkou9@3>jf zgeMsxXc+Hx`7!DVLq0;2kvsi(Y;c4n2@J7!xPTt3@aa*<@jW*K14`hhO}Qd;O{l`X#Cp(BQ<% zN2l@eFGnbNY=6KW8NhLpBj}0s!)2(PsVIh`Ae_md-aJYBMu|eS+W0jxrE6l@^>Ftn zqdO7@+@O4+vJ8+&F3#w{`wg$%(3-^dEU}_=^9DDU)*3?R2OGgBWiHXscEBid%vJtI_lWRB2Em}ED^C2fm{~3S0AhB;^aqCH=5Q zl|H2q2u2n@;ui!WR`na{?09p>*MH~&xWzgjPEsTiAR(imNYW3!`%bm7Vb}Sw*<+-E zrkm=6vg6h+oATwqi$L7~QvwJL1ucjj2J2aE{{1?I5C{jYxkI!=d~|@ap@B-ef71U2 zg(?RSBqs%+2Er(l12G#23w?e)%l8H*Rn(AD8#_ z#S?I{0&$e7e3=;PYRfHYj^sc2Zg1aRT8*V6UEISr`#NP`=b2|g**w4_O1Xpen_y~w zPmn}{0x_4QkJ(sev&9;;d~%ibN;RnH&4*dp-DvpCx9)7l49K&suIhvD;;CW7VXH=x znS3^9EW4ra2Ls#K-n`Tnr+(F#kCEVzq;pxg8aq5~UPV*ooHbgvZmf-2@jXxHI%#;^ z*Gb>};QoLG69D%r6GJKW$qx~P1rwLTY9IlJuh1KaaDFDcL}f-<6(f4mw0Slw_R0x= zm`LGiPf|C8)n`t-#6gXK-g~3IIVl_;GLMa4KvF8BsO^`en^^-z8o>3Z-Kb7Ue>j_2 ztu%wr?p=s!%sNY(BkAilzKXoHv*~rkn8o1P4mxPPX*gBg@ZQJaVB>ero8ELHCB=>0 z#>td;%(8fdr@oO34wdg}TY*4GNV)4vh#8CegUM|sa}o>s@fzU=T88!1)N_XCcdP4V zG2D&WS?w~WPqzf16#VO0WX(RR z1)97TOS2Js(c}xY&f|3~gcHFbZ5W_eyi?I8FP+*aJY|==-5b3(8^2!a%j6s1z~~>+ z$m^F6(|d|!0MAGE{K~@3PEX8b8_LxA>^92zfGZv;_7ym0x+1+dt{phs?EY4xgo%N^ zSLHy&vd;3K+)Rw~x}2Z)UqupwCV|*JSkZd52LHG{7=^$uR!PhjHMyTy)uWb_=!J?b z@k2F{-wV%WlEa5$CT7&L*J}IzM<%8(YwDI9Z-5n`CC!(A&hL?l z@yCuo&QJrkvy*h&D-w;@x3}4xCzy`Na!5_!zi}f)6WP-Rz*Zr^-FB@5cFyoTl7zRw zbC#J+)LNtZy?e-Tckx=n29o`rj&>5|N{Oz%E(0 z=9%3C?9W%x=E-9`%5NyjcnjW6WY;Lv{GeX}|B^(@(E-nM#;UAA2 z^1Vry)0cN)VZMABDiHhQi+qkKd8{0c|5`mMU$(H%kA7F>TSG>aM?__XFx@uIugXHy z0mK$mJJdZgfr}ouZSW^Tt`gm@X6tjHDtg8@F7q*HjF}LL;&;KmBw`rd4Blc0rm%I+ zv2=rUI&__=yHU4k8Y=wEqXPweSnBTLBaQ0L|nTYAPZS*%B|}5|G`tL294pjEp<9+ zqTTL&@yAC9@>*(@B!^Fx4h)4_qPTc??oZ=--+2W7${BKC6SAu!q=_Y!Z)iZ}YINazvV6JsRQ)nn&$hxQxk2pffqb%gKx5bcCfPvQL@F~+8nb|Ce`(zT!&@cG( z_^K%H)OoL;$26Q9c|?J{HuAb&Uw7B{Ra!nbeHfD`GKzS*zN4DC7;;@zL1zTVPnD zw))?Y#E`1KRvZQ_aw%pC+w?;lZz5z}_1wM%BIXJaVPi|!l8dTLTp>iVjB-(SC>g1AUYooc|f-)y_3Cq6+O*a)cwlf4s?9U+i$2ul|Zq+vkWh z5{V7@*@P9w!U28l)O3A*eLNLqu$1!NW(oBKz`!8#I@z=64HQIIl4hGPOEZ(xG> z@BvTb(XhnNFd4Vu2}Nj)Td#IUu2|YN-${ARl;~!y_!E6qdhx7V=?yuHuvO4k%>;jF=C_tq;M|yWKr&cx)>7=dU8? z`lC8cve}%&orYn~eSHl>EOcTfwrA@*E*7qeNi;UOu5C>3p0x&VDNvPH0{Ie=zfiDE z;DVk#Uc1F)Fi1TO@5W(1JVB+`K zQZRc6{MEH5|s$t=Vz6lm)G}QBKK&&FwkJOm~pOk?Cf%Yf0}Og z_-JO|5}DSA8aPGai|Q#Cg(};*ES^tRtiIDD8;%S+zvcL;1?}Xh%YaI$~s_`}3iQFj zE8u0*aemr#GBm$qZ}q!G`-PB&_-&ZrONL)AaFe{@u!r&{;#OGs#;V$nW=I%}ZMEL> zi{<&<)DDYA6on`r#b?}9bJG}VW%AlRcD!y4%)@!FLw2#KH_NG`d1`V|8^qGf!nX#J z8gl!~nFG#W@;9f8)@z+u;w=X@}Av%h2pq4nf^T~K68?Kn|w4hlrn_Ki>FxQD5vY&XN3PWG$gZm-W+dg zji^H|jKS`B3KP6D(iYqs*GtN08z8!#!%3%gs#Bu<<-8~K`$DXQAuNkVvo?^3GyEo7 zix*72xVf=$6fqJBmU<^e!%YpBi)m14^%|j6if4Ig?(K0kw4AcRI6hf=GEn0?schy; zpq1SPIiKh|Pf#j)J33Q~AYlKTC5XRxiH?lo^e5hIs_+Xb1xC&WUl{d+k&!5vF6gshz@_@cUPqs2h6 z{xs$LcrQXGumh~=44!5fQLp@S9@v2BYRjZq_c8fcpwVXA%T9wmyG;3{9cPDmwF6XP z6oF}`dYBN}X4IhkTLts05)&uhkdB- z)xZLg@4W#W7iZEz_zxG7GZFg`X7Tr_t*x{;G~^zOe3mV zT!{s%Dc{j=#;pYi`Ugol02w@*V&8L`BT^G%G{J}unhz>yr}Kz{feD}tIT9mU=VuccLDmrl| zE^=YFE4g3-p5xxIfJI2E-pKCQIv*ggf@9qtFU!!&lB@K`S!4~>PxxeoeaqA$%xBAf zIvvbcuJPL-h%tLV467--NTZX&JPJ2|Do-@;<+dAELS|7fsP>LzOLUl9dC2egMl5uk z99T!}%RIkghmkiCJ$deHOM@s8-LX9*iEtw7hX%#IWKzF;Sc{VBt_$vf4GlQ`=<2f6 z=0dvoB|RrJQ_LX3{EY91vQlvb(c-=J;O#`~jc$v*?HR@24H?as2z#UoYKu!i8T1sw z!$pQoV9}_c4zX3v9!X(??ZFdA3xdrLi6jbk1_KSAL=pBxoKOdX?`(FF2Qvj!0pMpB z5)8H1-f24!=Xi_V$nTGNa_#w%-4Gf>F@YUzP^sOFgQb)W&x=8RQNf`Voxned4%)r| zbmukS^YyhcopkOW=b){S&L6V0YJOt5pzaCC&QMmXM7yA=GA!$ADg*siitvY=>E6NN zyw!0Aq#rrd-JCbEv6H~xeMlJQ7vUksCA{eKbwpq=Ery{vqU#^;G7=fZYyv~XSeZ2e zhm)jr$C_i7Tx0JPwoVn$Z>T?@8xXB^CE%pd?OUF=%g$_xS|#VcRG2Ufz$`C+8Fqga zRzzb!`;0{dX}cxrBdneob(FiZa$jZtFvjd^cwqVCHLm}#Y$zl@5;6rFKda$LXO?k= zJ{(N;_4HfyBD%s`9|py!Uh~jPE#g;J4*TPY5Q6n82r(-2{v7&dob68OjC&Qe=Akz@ z)aP*_cgzYd0)4<|ri3&t=y`kN1(3lu;@;*e6gE<7oT?;BRIZly*IGby8mll)pbV(~ zRRyhDe;9?^VHl^=_{HgWt3h7wp01P}?|{`3ASj)!6fAvdJP19BNZc-(34lQuir1?_ zW6CXgX}eorw@`X}O%Ti2?s;=TmreSyI+LRfnqu-P9IXXyDDhQ1y(0FFe4`Q)PN~ps zKYe2JCHn)B4d)yaJLNDUT9aY}_FY-@&)NgwJx{r&XzSkLo1bXbr2n*{;QG~LmFr)s zsLeyUF5&b=WC?ghm-`pQiRh?9@IdK4&7D8A3+y*)_r|CF4Z-ifmhV>xxpC_-YJtT& zyeIYJgR3|Jl{x9X-V!c@(gB}+z9?N8++1DUs zH=xf)=Im@jM*x00@y976S6VKG)#2fgXROx{fD^~}MYMb1Ivfm}^`IAX`}O);g0ZHw z`8YQf(q~Gp_9hTvbHu|zjS7>uUE<_+t=|JW@vv^gV7OX$3F2lgCb9w1%>ZLGoeuS! z3~p<<{)l9&*w+uz>Hh@4{1WhmAb3pRYE#Engw72Wx`;p#gJch?5Nk~reVIsVRycgq z66cb5fOL)Kiz^fnlulEjBH-4c*G)Q15AR4;8XfoB@xs9== zv{92%{h75e%Mpvk^#jO-3@;b2n@euRF3LQjfW;1 z(`&&mF!`O9E|#LK@0^?*9MDx&Cqe(PS8%>wZd~dM>R@`#%YVm{Wv=|4CjT8e!l1zT zniv)Lc0IY=3KAx?wXZiqNCDDav8!`W-q-3ITSB)J*p->vxTwV}T-!oMcr+Lt0v zu5UA{u@Rtf{ERkD;3dWp0otX2-`BTS1-irS0`9A$z!xj|WO3rwTSBI?VhU2X2u*>{$yU^&Pn`<;1z2Q<-#ph^0VoN0D!*ATlY)L@w9EJoYU7z4$r8 zpBlQ;m`)hiF63jBrd zVpI`Z+(Ov|V1LCz?2L~nk)I9DEqf5~hC6sZLkQ_}31$V}5Q+6Gd2;cys-jiF`&iP) z+s}4x(jnUj(O1qJ1V96r%rRgn{+=Wa%OvwSWrIFNju1&ln5N(sPm`K`Cr=k+$*Eb^ z1H415doEhZFl_E%uc6h2)GcfK*_2`_JDTKg4rx;QUaFrs#LOwWe^5rha!SKR=hL#Q zdw6o7`%^mvUR^u>=Zz5eh?mc5XC{Z`t@a5*Y^`D)o7#v9bcy(;`}bZB(>X4Fp3>9( zHHrP_9gT-hjQctyV~*-DsK&x1G8Pu`_uCJ*?iLP3-0g;-c#>WxKLJ{DcUnMcU@K6; zFxcMa>HH0+=_i5M|KYgpUC2k|@tzT5f_U_nwL$+n!Tv2{~l=umf&dc8& zWK)`6Oc51R`a+^-gb61FW-0H26B>ie|0Rfk>Mo25p84Fb^P8d0AXL5%z)6hfCB$)O zE1#^~`MGC1K3GFYk{$C`L|nDb{m#b07`-GHt#s!?RA@?!3t3oap#TT1pgjczh5qUw z`uep^*wl)gYWVjuc1OdTPj#~?wKb3Nbp;>kq&S+&+l~I!ksMD}?zuFT6EfWLbPg6k zy{9K!4vNR9u2YuNRrpjfu0m8$UekTLMW~7c_-Z>vcQ?O$C2f?Gr2r<0=hIfnlK#j)Y6f99ZEk-G|=BH{l4z- zS}q1M33X6M30`-@HOC_OWp@c3mp1QtBIn7qfUO zl~eC6-9X8=zRAa(M1L}*YybQIj3dS|MIs|$T8FcsH5nBXtYRb6<%)TX7gDPftL3Qc zoy=qeEnm|+q~j`ALz}HdU9}*Y$l8Sd9Pn9b>f)!{s}PTIqIcKAwxIikE4KlVA3)%) za0oz1PCksMYc@^==NgYvk7e?d*NHm*3AzHQ_5B*Qt2x!!{fVPSQMbdM3N!lelg$l2 zh<8j^wl3+_rY*g2qTjecZ`2A*BTo$xCSbqx(;Z1Ra4^)H3GR#YO4M9Gho3}sy9|b} zCCVToT4fv6-hwM3lHVJ`6;pYglz}q2z%uB8OQiqIeVLwhSEg?r`RkrU{la&Ft-g_M#zt1%J^-u{@pBoI?;Zr{jI9e4pLU94+Ti|G860a}I+sDpvLkm>bM238?0s2 zpCAQtIBQ9MhU~xc&jD;2)=Ae#pdE$SL3E7iW~(dwylS3Kv>_4zzhXNBrjXm-pX~U{ z7x+k%ay~8q1;?5$gbPAHoRj!14!i&$6e=O}_qVvbVAQ8yvPN7rF)>OP#-BulabEdw zRmCormik&OxIv~9js$BQEC@f*{{amo+?X~Adhc1zB}9)jbTL`SKPa#8Z>#8DuH`<{ zI$?7J-=x5PNdCalL>m753wIgy2l4wnf@=~{zu3hV17?YjHnRR`<4>QAIWJob9@wdd zm^;;e>`mT({GVOGY}IVB7N8!=C6*B-zK3Xm7f88e6$gOivO&;I6n zB@N^6bOL@LU_V7!x9>YwF6?yeClyaJSLL>I9FAV5ktyVGKTkP8BSXYvJqTEN<|}kv zA4V@4Ds*z;&=rXo=_=hT+}J>}dosuahw?q;9E`lZf5P*El!x8m9A@;0f>TVx^QE_$ zQX-_@_tCwL=_4mj!inT|(Qg4yf|cNpuPxyx!8560=*Y-i9^!2bGSa1>s3|B**3Kyj z2$@Q^z~xpDTrb3rRtUbu{Dpp9T1Ljp(=%Xi^@KFS;!EF$54Wm=$uw@d4M%807~mwc z;r(Gvg@8|`-=LeFc1DwVMt*NG#Fp(}o4MHoo+~p3&IN0U5p<+;h}RjYkzG(`pqJZr z^$>7$VPo3?y1pf_Hvym>qLuoi!sRwOA z%r96HS)L$DV*b4rV;N#rkBOB1(T{hKH+=|(1Tx;WAESc+9=iq1w5@liqEROOAnPB~ zSpwO<0V3)j`4-l+U&$P+E}*xF$Z*jshoZqivn!C|c+A7Ehsjv`X`Q z=>1Yd00>;EB06s`mfL=x^AXSfHZbXo3!Aa1$)J74esZ(b6ZX9Y+-MTvOLewt06#(Y z9&s!qKn)9qJxla;Im-oWJqW=M;oXyf#p8n%K9{u2^K zC}n}u_laBjD3aK707eFI4$C93IxLpyCDDpa2^A@rw40P4oew%;#lS}0O?G!D_c4mo z^YeGd7gB(A1@>(ruE!sZN*aUu-fR<7=~hYTQko)sU<1{pGj|Hv33twHV5edhzMS%@n=##JK!dA z+ubJ*fSp-YUiW*{!LTt8AbA4DWh?28h^@QH$`$k=W7S)rIC6pV4 z;n_)4LfEC*OaSmsWebOyvW@;hPb40<9PQ%4*A zA@tkyjIQLTx`AL?0R(}c^YWzQBx9{3YETu-p_|O8@p~eS62bRQe(mcP%PiJBSs}9A zeDge5VvGLf?RFqJ$N8PK39_Zk7RK`QDokLcer`0+-n^((p|t#{%e zviPNT7u9I8MPLoM189+BjBd%WV5PYdHC%4#bHc$Cb^ufAb$f#7yT=Y8;r)T;Za$WU zNe3)f^l7txq3#A`i&y0|a&#Pf#I`QQ>C>3FIn zFek^L6(fsurUEvf0!&mSPx|eso#Z-@NwpA;xC!8YecB90JwFP{#oLmOK~hNA{bbMa zHE=AJ&1!CPauUcpyb9RORV=$v(fYo&G3Ey9bJ7~T`)>nefb**xY$$w~jpGo?!oEr? z87d7Qm-IIuVj>(&cQtC}ZbgN#{<03BRSfRdY+2t?(*Zq$h%R7ZGE8Pt-UdTu?rB(q zVDDv^1%#b9_cAp^8=(hy-M!n}eI)hapMG82U3bZ(jAsivd^cDG>{L8ITu-i?eSO!eZ`9RD9cWrp+RVy=fiwJ zn#93W&z5OqSI=~ih>7f?D&Jerzd3$XYS=y$pz}>2m}x&=K%6GP2Ek z=P<~@#4i<7>;Vl2;=FUX1W69SCYsSp3t{)V7Pa5!_<~L5C6j=v?QfP-c<;N;!kjkGJI<>oDP^t^ zI|^hs+zjXEy6NOB#?pj@xo7x3{S1aEdA?pFfAo4j@32D=i|}q$Xa_xXulbJq zFL8Pc3o@g$9LSr0@pw6;!@=9VRI>_Tu)5V{dRBR#!w2iUHGp|a$fj2L?O|8}I+{ke z%{kazzs((*Uio}`bf{Ix^@MsOCPx?>1@`IkHlH*e40fAaM~ko%$BLqr_9@~ zxL;md`uX}pLv-!Q6|BW>Q$`3hu}%~t^tv<<-8?3updFuC&s zqQPaO3@$3N2vu56V$%DGl`IPI(5eg)dM7eP5Dn0k+rPtbFR??_iPCST8PhRuB5iUw<4)WZ2Si?Iir!?VR2vu3Bg_mP}_S#5w*sIwDrJziP1He9N* zyy_|!8~RiDJoZq*a1PY&O?2r2_6DM5z}~=ND!x{IZXa<^O`U7#^7dF(xu*2|u+bxP zZsTA6RWg)w{71E|DsB(OenXFB7Kra>zLt?Lt$dDd&DZcx#BnW5vOMNWn48lzct^q} zsh+^<0lI-R^2gJd=1T7pVz`E5)gri@Ot7>ML@dz}Ot~YyV@ZteEY?hIX1#gmM z-HjZy3dzxAC$e>xOv9-c>!Uia%iNuvto=)B9R(<*i)p{?m(U5 zo)Fpt61zY!VE*?*-8E3L2#G2BJYi?`5$FlHD%zZxW?gg&SkCn_a72!2L&lT>>Z8kb zzQX=QX#yX|J+v5ZdR?bhZ2~T@01+;yT?H(EQBDSaettD^@vYqolNq63vp*)`7W;3G z_`3cAVXidNa)zmCDW2BX(dMhZ2z+R#P2e0onyXCuAoVD4MR?iU=A8uSdN_z^NmRly z#Y|&02#Pe%V;P)Dr9DlfK%hXaLXVQ0ds1VgD25n-ZEr&Ti>m;tg2_|NazIvEsy%XE z-n}Rb+%UD<=_-8Vw~Nh)KPcyTjIlYC;*mc&QHzRyBA?$CaRCo#{(Ch>joUrswY$es z($uURQJ>`ZHZ50#>=N6+%*LwUl4l(3==i+jJI=1r0Pr;fyLOd|xQY$V0O0Z84zETH zu|KIw^xyt%eX-H{4yFnL_e?yQ?|5Vh7EJhPsz^%EN~^D!UG@s_1kP+V#4cXLa@<+s zN#qCXjS|cEsoCAsH=qshp`mUGYK0)vxeR7FI?|8SG2&KFt%Z@N-j2jB_~+;IOkr+HK&75mxi{k%@WA>;yX!sGg)ymU?c=`Rf{ z_xAql-`OMHVU6Oj#Vt2meMCNABL`82)Zp;F0}~Mb=Jr{L64@#y2sh;B1@K(=Vi{=G z+S1?@5(MHq&s0;3ii)=09S6qlu)IlktE&K@&W!u4yu$Ye%_OW|s=g1%);<728*nna zZ8)z0Lq2kB;?QJK3gNkX57;0Z|OT4 z#6H+a(*Z4i5Utm`BLl#G(U;sqZ%_Ob-QgrVtI-_9g(|e#e*mXH3L&dF!B~3mNE7JF zJZtGptwi^Oh9YRYSTnBs-zdz@4nWlUIlX;+I>!yb;-bnKKn$4AytjJ9B07cnYo>6A z`>VBbQc9&J@hg2B;Qn4`sIsY4tCb$Y>9d+GR!njRs=T>pzNL3^i$#*7@7^tTH^EBW zl&VpIq7Kz|Vh?=Jb?p6#DVeP{?@avhYxmg1!(me&sSEUdP4It84r?`Ub^MkB!r z0G^EaBEx(vpc4qbSuZvbBz~AY+WyplM4H+P{Xvo{(Q~HhOd_;^M+aSZ9ZDD`$X^cd z(yD*?f%>Wov&1^-@qNM-=h9`(9~?B1!?V?DCj&I@xEw7G2xb~yH&OZ_N9>KQK2B&i zDFC*c7+V7<;-Z*i_OES>#bCqfY{4x|1Iip=8pj~vt&zOZehEb@Q!kQeee=P%7(qpR z16}?Jtu0idhH#gtvf$HQghH*}0cv6)I?58nWJJbB+h(=J=5L5^opqi&+9+ZcG2T{> zmz!THW&!;=7qHm7`}lEi+te_Evc}@T=dR&v?YrCsEE$GS97(1vcrp>*s&)p)W zmS7fZRb623i%M+1ITl;IK>$6+i~p@mu92>{VFLNX1*j&xZI7(p$fbIvp_HgI+bL?xrmwoe(1JsfaKX{z> zSgx-xdVomuj1Pov!HZgPj;wjf`M#T-PVD#9V!{A0!ayf*8i&dF<<^^q8v~Q?OnEo_ zwDEZ6qEePcNSO);PEj==K)V;t)|lv=Vm&rVK;oj zSyV=&bqG*|eeku(uxme+h?7x#vO<1O;^m2q-`V{&ukQ(i3pxO^O5|I@!lFk@LL4?NLu=?o34Q##He~x8XlO%NfLoee%vPZv?O=#@ z4>Dg)%J0l?TpjScJNY}Fh6Of5pKP_RLn91pLz^Re52Ka`lKx>IATDJw0h>g!e~6D# z`xqEjznaZ>vkr=%#*9ZDvU3(Yyhy6M#^qMw4^TJs)2Y4FH#Uh`%JF?4WJx}@d6?i( zL}&U6Gjrldrq{pJfoj!7JD9+#uM=zXda}s?9RtJl?5{yR0fe7;^ccu!n%Z$8$WO8u z;C;e4Iz7-MdBk3XD;3Vbr%~@EzT!ZZOvd;vSRxwCORv7tB(uz0QENVSd9+^ngkb9P&XesO!D3PrK@#;@jhRZE^OtC z?)19zI4W@mwDjqz?WZUm+`cF}@L(r7k$=@S8D*?J>bE$1%%<0e zxWP^r5HD1n6^`jt>OrE3;)&Z-9_#*}w2QKI@$3H&+6844j4m+dLi;><|7k~Tt|PDm zQpnHxRf;xw(9awf18GxC2xvp-6^-bhHl?6tsOf`9g;uPwMczS)CdXGZa_ z)G62I_`(b_h;fO1ES?_PrPRUq{^m*l3ePQmOjtPNab1j%rWo#c{E+`X+fSd@rQtPR zJ$yUD#IV3n^`&|f12ACow^jM9r0RV%1=L5lxpola)N{G)}My4;`)y=dl4jQA z82vwT8OC}sr6j$OwRz;;Y8P2 z>xX=7DaY;-%jLW^Y5!HyZ~XEP)NLf*wyzW(#!fRCgEwpp32V6@tf*+^&0hIq07L)< zQT-3VzC=OZenD?L3V|yDvPhu&&M_9k81j`A9xDRC3-$6KgM_Gc0x)Ex+my&fgqkrSTZ9=&EO|9W*otRGM&L9oGr$i(q%ZLlieUMi#LtG~r~QmkfA zu&)@X*>&$?_#PkD62YMQ=%z(nZQv+cYxnjCO_Kx)9J0GO!-sCOWt9}pn>JdQ&LQVc z$Hs@U{BL{^;`fRajHt#CpuhFU4G-)WKA>vJvl1Mnu6_rldPyCXLqmgFJ@o78!X>AJ zJs>cKThH#q8 ziWv@0?)X*!F8nfe$~vk8pe_mq*cNS?KDkl`#zzvxqvz4Qn;2h0&en$1DH*&I`rc+? zaheFMkiB+o^h2IuP)!43V_ToUb(C&tYf#)s6kd8XxMcYnZZqRq02RSc=`KeDkxvxd zM#?^z6r!9~r@}~QGduFJMp5p-#sY5ZeA{xG8ua@7usfa!?GFTHx$Fn|XzSl+2?d7) zi}=0*xCOiIat+pHui%4N=f0XiFUMg5M-RIRIu3Xz3f-k{E#(!-y1&DB8t+G!Qbs)YyqQwKs#z(Ft7$a7P5x|8M0W-UIy9?fC#ZKZZEb5WMatg zuH>P2H!0d5t$}p@TG?DC#D1fzCzLj8BVXF?(Qf4R1+jBUy;+5Bk{C;>rmNY*>!(X; z8Yh=;(@Tk^j!9mkO&-5e4D;GguFR@RLC^2UOR)JGd|Ho51|i=bL>Unwse}7}Us3`Z z{5BDQECh@VfiQS+7l>xk(r&LbU)eWXoQc{4cR>0GzHo@k@@>hqM?0TEM_YwXLqWph z=9OX+i`ub}A(pZ1>VlBzr<)6#4L9>$3;_TYPJ`Zou2jt%ZRr_YUi}9;XHA**q=Xhkpo+Oh6a128ZgPyYd4#9ox3;bc{~YVaK*@+v?c1t*@S$dDr^p$JGC1 zol~{Xu64 zGh8feySuyKf3@F2E6G2%$KM@B|BvTT+wuS5Im`ld@0c_yGluW~+jaO=?~Vzg$!hov zHAf#5U|>j0(zN`ly}Y5j4CGqEy1Bb^MuxyCMH0YhB+i}tH?KWj$OuRaU%fnKKW#8H z!B7yG}S)rEo< zNR65(KVdUT81=Ud@b+?6^MmG+yzlElk^nG16<^?5RA5f%i0?HP+gb;q+2>a{B`o3t z)*)f1pg0tRVgLpP7UT~NM=@K0wzOV_a8!Z!{#2t+uH;Se=HNt0v67801$E@lnibXs zQV)n@6+Yfg>$h4)9qws>9{dNL74ln=f{74p^-VesarXnwnt45 zFf1N6EOPw2%W}9rtN-nnrOvyNmZhLBBX0CMnIlG|eY3lsqX5{`{v@;{O;E@rE}u7o zitU}$J4KeD@6$ia3R+#5A+u{bfTm%?)Z7KM?I5RqT*Ir;6qy@BBv*qH{gek|92nfY zKBb~jKButT>dCg0I_ z%^?QupZlZTh6rnp>NNdGq!o@@GP&XSHDKL@@==^Bpx5rGv54;j{LbwThbnhwawwpIP9UwWTl^^c9uhixq>wgeTn$_T zb#uRpF56R+jwZ^sw=|A~;h^eu*Z#fSGP5KpcHV4YO{NPUK&Nc-dw2N^PFORsvh#c2 zYB(v~0x;xQ8&|(+PW5k?Pul{@LLH(ene$tlJy#xfL=XG%Kl!KL525hi^fRv^B@*Yi zk&luZ7!t4&^;2oJDx*Zh8Ac=Z$t#|dbf0LoI4UeQs$~@d{^y|wU4D1%DHl;53|Ub2 z`s&~)tB|CoO+%Lma}xbtkD2J9E(IBbODC{lUXcHuEtpHKL2 z49>%@pg4*O+f`U=o1?$5+-;BL6YmUOA1o0tJ>T~&#Z2~Z2cw2!2_p*1IkykS)!*DM zxP0F&M2tkHyFPkN0U7e@>Z+Gl8xX6*<9ZIG6NAq#2Jyw$CGdt*_f&PwO2fAMdc7gV zd?Ow*Sy{%S`ms?M;9akfvjtMSO1pBW>9EI3t|T~+Vlr)h{(HChN4S>j&uVe6BlFJ` za;oUySk3r*Cpq&G%^gIoA?afDvJ&n2ngH+c|Dqy@%}H2uIlXt4%nrp(v=2Wezgx0z z3~*vJ_C%+vrbQBEzYt5aNJNY8!kS^Ud&1DmCKR=LnlMjMZO6=f07zlzdjooJb^Y6U7k<>c5 z;!+O9wV9=owSnS`iZ|0RYs(XgK9PxEAm}J4DDT!NG65}tIdSJ;xSGnib@6;hbo=ms z3Zu)y85Bg#p$??Sak0K0bcK z!o|hqze4Sl*yElApzAjVml?s7DCe0)L8xoWpeM?~%_-4;Npkcoz+5T+Z+h^08dk`K z%}p*H7_odf?kO5M{S=fK3^Un}fDu|%I>swIGc&7cdlVXwgg@mm9!ZECjvF}P`w-eY za|<&wV<`$gf$$V~JA^c6xtx>FpgFrHF)7;4gk% zUC-`0$Y|~lBV9rUMP798?m;6EUOH!Mf? z*47}W+bkG+CPMLNXAlXiw}d)oT445tR`WMjr_{!z#ZGAC_QzAIy_KUw%qTF(qUp3| zcR~04!->*AcF zxd9f~>iH&5^t(5lAUHtX;qW|UM!n8o73pF{Gq-~lLP|=C+wFFtz_K1?98KYy!1lmg znSQrlN0vDIsP;{fbt}H*=xrn-}`I?C@Wj!+D zjfUXA??Ot8h>T@W895BRGCpUhhI%^vXF9YH(E|E*y<>dWM6kC@USAWCx7FcEdpGtPfU3wW?u)&?m&o=-{PPv4JjnqVn&8oD*N_rqn6s{3Z?Zr z{hVJ;8;P+#!i|oJB-yOh=_1~53%7C%Ww58LS2|7>@i`Alb3kSqABp&!wy#l@mFHDu zu;tR(KG#E{cHS$B?R0rWRO}kh^69pZBa~-aCC-&d7X^45tm{2CZH~|Sw{YpX3$a~v zbF2(zbGYE#Klgu%iUu?4cWYuc$UZ3tF=B+GZGRse9*$C_+oDncfLHhNH~HS6k%jO;qz}Q%!PzPzKBHdi-;4}C)4pXdSF7N$ zPTwUx(-o*o=+)|_!^-sL3!N?xP;!W5_3EvOzZ{UuR~e8|z*!eCDAt<~n?0w4^Vn*5 zJfA~Gy}yG8lz88tT{N1hHVb^bj8LC^Z%>RaH}FCrjNjrDY!W>=U8n+rC4@;dzBc)L z>9k9Es$_Q68OZ8liCA}?Jv_Pt``61b^Am8z*=VJ5nelq?Pqhv^mMSxX8wnx-I*@?%%wyv6DFA zFfP}a4Ps5R+cn|`yv0stDRT0-UaeI~k)gDy1IZ>H`x>ScT3uF?j-S7A_=rk4m^6ax zVDk*Uq}+d@ZRRe#(wD{z)F)CG3eWGC=mqg1M9!%=MinWefC_K^ifpU2L(qX2iNetF zBS1uR=l>OhiJI^YUsibzy*PeBs=Kd(Tx{H?g-%Rfxo*YK{wovWc_?JwA+XT&D9i0f zWVJpY{D<4}G7t*xeYyN;-WAQX+@cx=XUA@@&z+5u{kfhb&3;(z{d~(P@A&ctqw)bPL4cnnp}%H>lKH z@w#|CZwH!w`xXEK{#K^Bfv6CPr0J#+_3S+G+2G8 zW(pL`4~dJ{Iyz4DNObJ$c6+`(_LAw}6yc4r>^WZvgv$uk0vWS(cl)~IJm8gJU{F%< zv1CK?Ak5!*4uDL*xEuX{gWs=5!F35T!$%l5yqwj>2{Wo;?rWAu+2hA8sjP@ZX^o5Qc*Fes!JC zPVWJVO6!bF?G9p*ZIYt*0b^5Fv*)3$29WpBYwLHTFzLZsAtCGhv-P%>s@>?BayhE>t|C~sTRmx+XlwuR*whS1QowI7 z@;&(ft91AG&=0Y-?e$%o;%BmQcwabaYqU;wr-!#M_EdH+A>nnqf@~#x50&pE-iGTx&_{Z(;g`pQMkSAz7Tu&1^idlIp_)qCwO&v8qLp! z)O9#7z4g&gp$;d4`CjX)^Zz`%3Tdh{>aR{cRBr6aw%XcM zgbsl1uR#jGbHCybkOZ99zwfp+hCo}a{a9H&z!bM~T(03##h_~?2H~K?$koOVbw7ZyVYu3OFZrVU zpJ%9VYyiA>fC92!_E8Z%b$YIIvSr4}i`6t$MZCW*cqBa#o;ZnS z0+`LmY$5@$w=~p~6=()peZrQdo}vkI6y&0pq*5sfJdt`Zy|g_YNOb+a6s5Of+J5Co zLpNJm;DDZOxVAn;KBL>|IkB~ezW0Z=1hmdy_hTrtEmZWH=F0Rj%V1A&SsB{BaMneDz7nALZ8i94zkf$P@Xg?J0(pHU&Yw)> zB{Jy*%A`p`!I(`(7X~0|H;g>ESfb8y81)*Z3*V55c1lAh|FS_bI9?1@zC@+0V$)K3 zfOlGyFYz1?GwOBKJq7d<3HmMUU>|^e1pB=l)Kf)aefNo643|!#11%CgQDOwo7I^aa zG1+36DkNtm!?PefE{vndVc=pNL&MB>41S&I?cD3nfP)&qxdoDQ2nbO@v0D7Zm|c*_ z^MCe-fe?Y@+Dr_57hwm#z$k$^PMZb;yU9lZDInllbN1ho+8Z*!HcbokKa8Kd7NC^G;$v)tHXp4vJCiBp;2EI;Q479b!aT%K?lcwc5)gd0{`l8gmjVB4TA`` z1KhSKc=$Iy&)4&Tf`T8wE+}DI{hflsb8!{Xmd91M!v~Z4Zmpx`rIx?l)zOJ=eo547 zw4{zld1UC2$~$W;3sC5Get|GhNMoqq@DPVCEF_|IOE8%@T=b*!@yS6X2Cn;k-VBdGvmMPrF)#FHUE-ok+%{C@ug=vso)$ zOTd)fScY>A7BMh9D?t8K$t0q}tzM`!2)K*OQyDXVD)w2?kaKu$ zsB0k8X(c4NBH~~eZ1(_YjeXGEh{R9n_IaBJO5Q27eW{YFwNr7@ie=13It;XAFl831 zk6X%J_w=6l>slCdP_hDp!Rq@qea9$@O0KU$xEhf}Hz(K1eYcPI((3qZ{3eT~Dv2*u zXR3a(VAR)yScVjNf>@Y06O)O1NgB0s-`8!soTy7+Ku;cnWsP4pGT_SeUkl_ghOWs9~jH#5(R z^$GLk4Z`xn{lkR}uUeTNK15h*2~n84-76lh-pmjOH+N~4_xRjYm7ERGOz z1n#Th!wlTQ0n*}tp?-K^ z;8nm+3CR9clqSgq$f>>Vhnz$aj({Jc6Fn18m&-~sb4uZ1FQgpa!dicdr$waCpjZ>N zHY#aQTD!p0azX8hE}7g6*X<@oa)ox>E?0i*c727nJzf7S9+5QL3_OMf34t;r#K+do z_2J$QV-kVL#{pgkkd_2ud&kGAPF1G0*GOB$ze3hU^48ohG@0CsP^7G^@c2|^u|L4U zxDJv-kkmORfYDg{9gVlv75vj?Dx04miwS`ZrW!od?6Bu7mGkYqHA=C-(PqN}(zSmz zv=ra1X`9-oEN;i~Pf_f)psI|FStES-ozMxb8ue1UL~~9~91!#KEa1m;eIwaimISCS zA1?c$aa;ldLxDM~HeywnpncC7&@XBVXBeJkjD8wF5t^c~>LMoR{C-V-J94)N$87brNWzT&{%`DW}#8<@KUnn?x2Lip~C zxu^u~d=DmS&AX6E1^xR3g()GYrwIkGySz4=BpnwGlR#Sz9vfu@yL^>_0S6ekqtiQ8 zI;3lU1uNghZiL9FD>(UiCH+N6Lj1blx#71j@s_W`M6Cy}j8%S-?lZL@Z`{P;;+{F& zdu!UuUgc@iT3zk2N4D7jS!_Ovn~hroONJDlWYFmt=(WvyYpz&Ym^o*6k#(!seC>B| zq6x-{G*YY&#n)L~)dJ>Xs8Dd<;qR9wH;+jova>n;{1kj#YVidBnw> zWMr?_+o?Q&Bnl>n@vyGn2Y;ZlU>V12eUgCxP^H-gp(7x{bcY7W`@3zAE_J=1M5zHx z(j#K4%OCp5m$xZE4^9Q$0+W(^3~dlZi8IIk$`=~heytI@^jBKi3a}_mUDSz5Y|L8Z z@0RShY9Tx1{&K)mlg@P5b*3HU5Ue)I1HX8X)s?)`w_u4bTkXc4c5&5mEl3sV#oT4N zU>v@iJMc!V=K{ECq5bVY-%oTtCtjk0q3+R}zV#c?89haT)mx&Q4OP@F0c93l67F_L zL@Y3M(0`fq`p+9e)aMaio70pD@7mf9T~Z1-n-V5p7qJJ*{Cg7exVT+j|Ej?^Sg&3 zDUpF;dOu0)2=71=BR<9 zTb;oR>Hm=4cnMNUw$dhi;~ETB2fcaux-P*&R#;)FJ^~eLT&2@4TwFMcP(nJZ;4#%R zL_#>j3J5%*_Q;85KjQyEhzG?~zME+$Shwnfl!nAG&oBK{e>hdz+Jq(gr97{5IHaIe4e1du)kY+~b zk50AZ!pJ@bwPn}n5E0xF9br!=J|C)R)w!j86DEhYIF`^+-2ub zy|?LWI-P6W&T%~qEe@^tD9lE~SO`o7E(TK*MP?9^V6%a+w^%|%^CMx92rq(ZN;4zH zqAmtOd=O1`XF2B}6qZcS$&e8)dhw@GL?w9G@4k>_R~OK(Cor(!5beqI7I1UD?w@rImxJRe3{&#U zdYg?E+k{wzNHod7>Af#V50{*ha`Uzee$H+X?m!>lJKG%Aq$#M1h4?|cATs?1rX;Tf z!@2vQRpj`jR5kO$O}l}!0C=g}YDFtGe*g`&o=_BMD_DI-IeeBt=GFv8H5L{)40x*6 zIZSrs#7O_Z0#2$pK*MbJrK^J$OUp}nzAq^JpyqY^pvj3AwLCuae}0B74fKUZ0$s6N zYFkwPG7rx@gj;1C34Z=Y+(D|cV+}TUruEPB!E1W)EcHjzC-N2Cn+>QSXjgAyrfxS} z$NfkxI>5%kolO+iFcD`9laMe~1-2%?PfZxTzdz7Yq-o!TsB40Mfs$a zHiEBq1s!FvAm{+(L>PqJ;u;?yKlDc7z-^D5*llt`H~b+IBr!IkM#W%9Z>QXLeA zH6}Me(YXhB%(B$>E7FTSkS04Pf2g)&_)^7`pT$;^C|_SEY=XkWM-20ajGqS2$uD|{ zFRu~;1O0|CeTnaw#sbcuo_G?YY1v)vA%yuj?SHJm`61Sr1Xk}R^+>+@Y}~zX`*as;g0_q zU}<@RHTon(e&$CJ6C0G&-N0qGg5NxUNl`xnpT* z8r+=4(p(c%On^?Xn0o}m-Vf(MqdvOccl*!OjOBFLy&Bo>36H~5UKn5dMpNR}!NKg6 zr}tAK&!0&LvO&ifUD+4B-(H^-FrP7AbsIIVvY)l<^EpzFOk=kPOlViigA*@rbuqmv zII+y{%+D-@8$8$wlMi6gw1-}PeIw-af}pEXy(^jl2kJ-Iu4_5y(-l&Az-x=s!I;e+ zH#FIZ$V*?MD0pRJzH#8BLP_QX!H={OAA%fpocI=l`+L9|6%T@GKkC#QjZJWa1`4AO z$Le+XnA+H^V@)>#1xC}3^?1E-uHXf@>gGR8>&Bz5n%Q{_NoqnA>;qkH`AsgxYj=T4`Fm;~& ztAM>oH0A*StM(;kn)CDWg;l|uz^5UemQcNm;u{+=CC!CSbGWvhZqGF_(}XJ~3a6_g zAWK{IGFR=lI>9OTwzXilAhTNChm*PCvG!tmE8w(}9UXeSFThfwA|tWf=xHo0XPec3 z0|&CjvY#KG$1>+I6^pB5a2V>uf+(JVfuQENm9;43R~HDu^l0rwBJ5sIdd&rjiSfbQ z58?wLK@K7u{ogfaR}tq`s{Le_2eYD>1TvA8g~f9ezd)^Rv7N|ll|G-bl@-mm;DVYd zA+0z=kI$SDdQB$mteTd?5pWNiH;zi7#?TTd?|bNfzhIAmu@Qc41t1%NSc@I~E;j<8 z=xL`mgU@+trUxX^O7i{~c69Un`jN!aV4TUq>G{}kfY1Z{H~f%9&MUJEJXC!w^XIf~ z%R-}aShaq)u;gdUV28xH`vuKTt(?ynPaEKJOM+NS{SOvk6PIb5i&>twSAj*Z3yO`@Zg4pvf3eo4R+Veyd<&S` z1&|R3U5#0IBT4i*#Sw|<7GlQLs~U~H zd7_>wmhBHX=I1C*#hQ*K(bF<*qKX1&^=6wf=a?Fd=+U|o{ggBrE@Y~CKXv;Widk=g z+2fR4{(f=6r=4P%`3TxRhskcpPa3&Rbd@Wg)o|jsTq6)L(JTzqcghihp{Rmida;Rc zGFH^1THgeqv>NVMceyIgFK2udBUvd>7Q_6NL5FxnD5xkjwXn-JYD(d<>3JTw>a6RV zn&dCU<+{avLc_}ZG(cx$s??fEQh`G```v-{avlK}TwNuLN|_!N<>_!~a68b^g|99? zsR0AVh@#~=J%vfbX|V})zcX^pgx^lOeM`?m%FLV_?mHU95%Oqj#*83ry9qwIy7y;;gNnVq(xSNi1T ziIYW!u}30^XNey*h=2Qa2CDajP_+~lGV2q^)dG{V!Z%*4D>rcld3pKJDn1P%;n!+A zf^S$DeXa1x+su$Cv9Xt1F;pu-(X9Tk{W-+BvwKw4T2057u7?c?QR-E@rfp+rwksK> z#(-QRV1Abzi$S;6a}CKRWlP$2^j38+63cQuN5E{n?`9CiYIa?d3i&FG7$C_Vg{XNQ zSc%)XXcPr*UOLBEz?U0c$qprF*tbp_kxcptefdppe#2jV&hu(7gbhT8a?GbPk-^@cXUVqF(0-hY z1mh~VY+&hk`OT;M$^`(%oh$*b?PX!g|Ab^QX>2j&tl**NYpte2*?Qoqnf)jE!>#kb zZQwQQ{RiwKzQRr6Tbu(1uf!S%HLm-3jM=%K+-U~2f>`#MXbY24Pt3wl4h4gwyK16E zvQkSe;a0{~F@vTIzB`2{mibw?ej+dGgSV>3G+T-9hW=8zcd|HX9y;w5;cIYN4|hi| zB)%md1NT<2BSf#UC8#H*{>U@w`M=d)E@~uY;5W>YSZW*_{Nfg8$30}ePdp7JzNLfn zL&p|pApLwbuHY>JL~nDk7v4xP9=9{CeD$IV_rI^&`P4rFlANi+x0Geub0ykwMm>wm z|DY7SePB(8q_Tq`VUzvujpXmrB^@eeQ;^-|xT=w+lg?^bJEy3Ms{g#?#}LcYDOZd4RHp8&@a$Q35_xus5my_z?or8 z6_3;&zUgb8$7N9w>DKwfaq@-YCu4π>pgg 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 literal 0 HcmV?d00001 diff --git a/output/playwright/pr-64/screenshots/MT-14-native-dispose-cleanup.png b/output/playwright/pr-64/screenshots/MT-14-native-dispose-cleanup.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a338f2cdfbdca5b986cf6395212eee804213b2 GIT binary patch literal 254229 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 P&OoFj

  • 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