diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e646e914..00000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,105 +0,0 @@ -name: Benchmark - -on: - workflow_dispatch: - pull_request: - types: [opened, synchronize] - paths-ignore: - - "**/*.md" - push: - branches: - - main - paths-ignore: - - "**/*.md" - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: - contents: read - -jobs: - benchmark: - name: Benchmark - runs-on: ubuntu-latest - steps: - - name: Checkout Branch - uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - - - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 - with: - version: 11.3.0 - - - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 - with: - node-version-file: .node-version - cache: pnpm - - - name: Setup benchmark data - # Lifecycle scripts are disabled via benches/pnpm-workspace.yaml (ignoreScripts), - # so no dependency postinstall runs. Do NOT add --ignore-workspace: it would - # bypass that config file. - run: cd benches && pnpm install - - - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - with: - cache-key: benchmark - cache-save-if: ${{ github.ref_name == 'main' }} - - - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # v2.75.18 - with: - tool: cargo-codspeed - - - uses: ./.github/actions/pnpm - - name: Build Benchmark - env: - RUSTFLAGS: "-C debuginfo=1 -C strip=none -g" - run: cargo codspeed build - - - name: Prepare Valgrind temporary directory - run: mkdir -p "${RUNNER_TEMP}/codspeed-valgrind-tmp" - - - name: Run CPU benchmark - uses: CodSpeedHQ/action@d872884a306dd4853acf0f584f4b706cf0cc72a2 # https://github.com/CodSpeedHQ/action/releases/tag/v4.13.0 - timeout-minutes: 30 - env: - TMPDIR: ${{ runner.temp }}/codspeed-valgrind-tmp - CODSPEED_EXPERIMENTAL_FAIR_SCHED: true - MIMALLOC_PURGE_DELAY: "-1" - with: - mode: simulation - run: cargo codspeed run - token: ${{ secrets.CODSPEED_TOKEN }} - runner-version: 4.13.0 - - - name: Run memory benchmark - uses: CodSpeedHQ/action@d872884a306dd4853acf0f584f4b706cf0cc72a2 # https://github.com/CodSpeedHQ/action/releases/tag/v4.13.0 - timeout-minutes: 30 - env: - CODSPEED_EXPERIMENTAL_FAIR_SCHED: true - with: - mode: memory - run: cargo codspeed run - token: ${{ secrets.CODSPEED_TOKEN }} - runner-version: 4.13.0 - - - name: Prepare Valgrind temporary files artifact - if: ${{ always() }} - run: | - mkdir -p "${RUNNER_TEMP}/codspeed-valgrind-tmp" - { - echo "TMPDIR=${RUNNER_TEMP}/codspeed-valgrind-tmp" - echo - find "${RUNNER_TEMP}/codspeed-valgrind-tmp" -mindepth 1 -maxdepth 2 -printf '%M %s %p\n' | sort - } > "${RUNNER_TEMP}/codspeed-valgrind-tmp/MANIFEST.txt" - - - name: Upload Valgrind temporary files - if: ${{ always() }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: codspeed-valgrind-tmp - path: ${{ runner.temp }}/codspeed-valgrind-tmp - include-hidden-files: true - if-no-files-found: ignore - overwrite: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f95c4f7..f0f15d6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,31 +45,6 @@ jobs: cache-key: warm - run: cargo check --all-features --locked - - name: Publish Dry-run Check - run: cargo publish --dry-run - - # Only need to build the test to create a warm cache on the main branch - - name: Build cache by Cargo Check and Cargo Test - if: ${{ github.ref_name == 'main' }} - run: cargo test --all-features --no-run - env: - RUST_MIN_STACK: 8388608 - - wasm: - name: Check Wasm - runs-on: ubuntu-latest - steps: - - uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - - - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - with: - cache-key: wasm - cache-save-if: ${{ github.ref_name == 'main' }} - - name: Check - run: | - rustup target add wasm32-unknown-unknown - cargo check --all-features --target wasm32-unknown-unknown - wasi: name: Test wasi target runs-on: ubuntu-latest @@ -175,17 +150,6 @@ jobs: cache-save-if: ${{ github.ref_name == 'main' }} - run: cargo clippy --all-features -- -D warnings - doc: - name: Doc - runs-on: ubuntu-latest - steps: - - uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - with: - components: rust-docs - cache-save-if: ${{ github.ref_name == 'main' }} - - run: RUSTDOCFLAGS='-D warnings --cfg docsrs' cargo doc --no-deps --all-features - test: name: Test strategy: @@ -210,10 +174,6 @@ jobs: with: cache-key: warm cache-save-if: false - - run: cargo test --doc - - run: cargo test --all-features - env: - RUST_MIN_STACK: 8388608 - name: Build Node Bindings run: npm run build:binding:debug - name: Test diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml deleted file mode 100644 index d36f8792..00000000 --- a/.github/workflows/codecov.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: Code Coverage # Run cargo-llvm-cov and upload to codecov.io - -on: - workflow_dispatch: - pull_request: - types: [opened, synchronize] - paths-ignore: - - "**/*.md" - push: - branches: - - main - paths-ignore: - - "**/*.md" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref_name != 'main' }} - -permissions: - contents: read - -jobs: - coverage: - name: Code Coverage - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - - - uses: ./.github/actions/pnpm - - - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - with: - cache-key: codecov - cache-save-if: ${{ github.ref_name == 'main' }} - components: llvm-tools-preview - - - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # v2.75.18 - with: - tool: cargo-llvm-cov - - - run: cargo llvm-cov --lcov --output-path lcov.info - env: - RUST_MIN_STACK: 8388608 - - - name: Upload Artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: codecov - path: lcov.info - - # codecov often fails, use another workflow for retry - upload-codecov: - name: Upload coverage file - runs-on: ubuntu-latest - needs: coverage - # Check if the event is not triggered by a fork by checking whether CODECOV_TOKEN is set - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - steps: - - name: Checkout - if: env.CODECOV_TOKEN - uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - - - name: Download coverage file - if: env.CODECOV_TOKEN - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: codecov - - - name: Upload to codecov.io - if: env.CODECOV_TOKEN - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 - with: - token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: true - files: lcov.info diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml deleted file mode 100644 index d154813e..00000000 --- a/.github/workflows/fuzz.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Fuzz - -on: - schedule: - # Nightly short fuzz run at 03:00 UTC - - cron: "0 3 * * *" - workflow_dispatch: - inputs: - max_total_time: - description: "Seconds to run the fuzzer" - default: "300" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - -defaults: - run: - shell: bash - -jobs: - fuzz: - name: Nightly Fuzz - runs-on: ubuntu-latest - permissions: - contents: read - issues: write # open an issue when a scheduled run finds a crash - steps: - - uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - - - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - with: - # cargo-fuzz requires a nightly toolchain - toolchain: nightly - cache-key: fuzz - - # Build from source: the binstall musl binary of cargo-fuzz defaults its - # build target to musl, whose std isn't installed on the gnu runner. - - run: cargo install cargo-fuzz - - # Carry the corpus across runs so nightly fuzzing keeps making progress - # instead of starting cold every night. - - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - with: - path: fuzz/corpus - key: fuzz-corpus-${{ github.run_id }} - restore-keys: fuzz-corpus- - - - name: Run fuzzer - working-directory: fuzz - run: cargo +nightly fuzz run --sanitizer none resolver -- -only_ascii=1 -max_total_time=${{ inputs.max_total_time || '300' }} - - - name: Upload crash artifacts - if: failure() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: fuzz-artifacts - path: fuzz/artifacts - if-no-files-found: ignore - - # Only scheduled runs file an issue; manual workflow_dispatch failures don't. - - name: Open issue on scheduled crash - if: failure() && github.event_name == 'schedule' - env: - GH_TOKEN: ${{ github.token }} - RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - run: | - # Idempotent: creates the label, or updates it if it already exists. - gh label create fuzz-crash --force --color B60205 \ - --description "Crash found by the nightly fuzz run" - # Skip if a crash issue is already open, so a persisting crash isn't re-filed nightly. - if [ "$(gh issue list --state open --label fuzz-crash --json number --jq 'length')" -gt 0 ]; then - echo "An open fuzz crash issue already exists; skipping." - exit 0 - fi - gh issue create \ - --title "Nightly fuzz crash ($(date -u +%F))" \ - --label fuzz-crash \ - --body "The nightly fuzz run found a crash. Download the reproducing input from the **fuzz-artifacts** artifact on the failed run. - - Run: $RUN_URL" diff --git a/.github/workflows/release-plz.yml b/.github/workflows/release-plz.yml deleted file mode 100644 index abd010e1..00000000 --- a/.github/workflows/release-plz.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Release Plz - -on: - workflow_dispatch: - inputs: - commit: - required: true - type: string - description: "Full Commit SHA to release" - dry_run: - type: boolean - description: "DryRun release" - required: false - default: false - -permissions: {} - -jobs: - release-plz: - name: Release-plz - runs-on: ubuntu-latest - environment: crate - permissions: - # OIDC trusted publishing to crates.io - id-token: write - # push release tag - contents: write - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - fetch-depth: 0 - ref: ${{ inputs.commit }} - - - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - with: - cache-save-if: ${{ github.ref_name == 'main' }} - cache-key: warm - - - uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # v1.0.4 - id: auth - - - name: Publish - run: cargo publish - if: ${{ !inputs.dry_run }} - env: - CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} - - - name: Dry Run Publish - run: cargo publish --dry-run - if: inputs.dry_run - env: - CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} - - - name: Push tag - run: | - version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "rspack_resolver") | .version') - echo tagging v$version - git config --global --add safe.directory /github/workspace - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git status - git tag v$version -m v$version - git push origin v$version diff --git a/.gitignore b/.gitignore index 95680d9d..73783be0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ target/ node_modules -fuzz/Cargo.lock artifacts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e1e7b9b..ba08f967 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,8 +3,10 @@ Thanks A lof for your interest in contributing to this project! We welcome contributions from everyone. Below are some guidelines to help you get started. -Rspack-Resolver is built using [Rust](https://www.rust-lang.org/) and [NAPI-RS](https://napi.rs/), -then released as both npm [package](https://www.npmjs.com/package/@rspack/resolver) and Rust [crate](https://crates.io/crates/rspack_resolver). +Rspack-Resolver is the npm [package](https://www.npmjs.com/package/@rspack/resolver) built with [NAPI-RS](https://napi.rs/) +on top of the [`rspack_resolver`](https://crates.io/crates/rspack_resolver) crate, whose source lives in the +[rspack](https://github.com/web-infra-dev/rspack/tree/main/crates/rspack_resolver) repository. +Changes to the resolving algorithm belong there; this repository only wires the crate to Node.js. ## Prerequisites @@ -50,11 +52,6 @@ npm run build:release You can switch to `profiling` and `debug` profile by `npm run build:profiling` and `npm run build:debug` respectively. -```bash -# Run all Rust tests -cargo test -``` - ```bash # Run all Node.js tests npm run test @@ -62,16 +59,9 @@ npm run test ## Releasing -### Publish Crate - -1. create a release branch as `release/x.y.z` -2. Bump version in `Cargo.toml` -3. Commit and push the release branch -4. Run the `release-plz.yml` workflow in GitHub Actions to publish the crate to [crates.io](https://crates.io/crates/rspack_resolver). - ### Publish NPM Package -In most cases, We publish @rspack/resolver npm package after rspack-resolver crate. +Bump `rspack_resolver` in `napi/Cargo.toml` first when the npm release needs a newer crate. 1. Bump version by `./x version ` in the root directory 2. Commit and push the release branch diff --git a/Cargo.lock b/Cargo.lock index a2492558..7f3dd0f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adler2" @@ -23,33 +23,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - [[package]] name = "arc-swap" version = "1.9.1" @@ -76,21 +49,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" version = "2.10.0" @@ -105,163 +63,19 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "camino" -version = "1.2.2" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" dependencies = [ "serde_core", ] -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "cc" -version = "1.2.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" -dependencies = [ - "find-msvc-tools", - "shlex", -] - [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "clap" -version = "4.5.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" -dependencies = [ - "clap_builder", -] - -[[package]] -name = "clap_builder" -version = "4.5.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" -dependencies = [ - "anstyle", - "clap_lex", -] - -[[package]] -name = "clap_lex" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" - -[[package]] -name = "codspeed" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ce4a32373a5c84f4fa785099b300b9b1796311abc122b9eb62c65fa615145d" -dependencies = [ - "anyhow", - "cc", - "colored", - "getrandom", - "glob", - "libc", - "nix", - "serde", - "serde_json", - "statrs", -] - -[[package]] -name = "codspeed-criterion-compat" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5557c4e023f427ba208b849193c51c2ebd40534828490cd3f5f7f7fc0284ce5" -dependencies = [ - "clap", - "codspeed", - "codspeed-criterion-compat-walltime", - "colored", - "futures", - "regex", - "tokio", -] - -[[package]] -name = "codspeed-criterion-compat-walltime" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ac19f0a5c3542301e9d011d658f93c3f550698ec8ba7d7c072692e7924c401" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "codspeed", - "criterion-plot", - "futures", - "is-terminal", - "itertools", - "num-traits", - "once_cell", - "oorandom", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.59.0", -] - [[package]] name = "concurrent_lru" version = "0.2.0" @@ -280,6 +94,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cow-utils" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "417bef24afe1460300965a25ff4a24b8b45ad011948302ec221e8a0a81eb2c79" + [[package]] name = "crc32fast" version = "1.5.0" @@ -289,47 +109,12 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "ctor" version = "1.0.6" @@ -338,9 +123,9 @@ checksum = "6d765eb1c0bda10d31e0ea185f5ee15da532d60b0912d2bd1441783439e749c5" [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -350,27 +135,12 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "document-features" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" -dependencies = [ - "litrs", -] - [[package]] name = "dunce" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - [[package]] name = "endian-type" version = "0.2.0" @@ -383,35 +153,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "fancy-regex" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277" -dependencies = [ - "bit-set", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "filetime" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.60.2", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - [[package]] name = "flate2" version = "1.1.5" @@ -526,34 +267,6 @@ dependencies = [ "slab", ] -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "zerocopy", -] - [[package]] name = "halfbrown" version = "0.4.0" @@ -587,12 +300,6 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "indexmap" version = "2.14.0" @@ -605,26 +312,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "is-terminal" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.15" @@ -662,27 +349,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "libmimalloc-sys" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "libredox" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags", - "libc", - "redox_syscall", -] - [[package]] name = "libz-rs-sys" version = "0.5.2" @@ -692,12 +358,6 @@ dependencies = [ "zlib-rs", ] -[[package]] -name = "litrs" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - [[package]] name = "lock_api" version = "0.4.14" @@ -713,15 +373,6 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "mimalloc" -version = "0.1.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" -dependencies = [ - "libmimalloc-sys", -] - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -801,18 +452,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "nix" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nodejs-built-in-modules" version = "1.0.0" @@ -825,19 +464,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" -[[package]] -name = "normalize-path" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5438dd2b2ff4c6df6e1ce22d825ed2fa93ee2922235cc45186991717f0a892d" - [[package]] name = "nu-ansi-term" version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.60.2", + "windows-sys", ] [[package]] @@ -851,15 +484,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "oorandom" -version = "11.1.5" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "parking_lot_core" @@ -888,18 +515,18 @@ checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pnp" -version = "0.12.9" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d021b5b4a2ea34bf137831fbbc5856e9c7ca70861f95a0f8dc51323b6e821faa" +checksum = "e57281b9cdf635e68b57fc347e213b413f099d57cdd708182d5e759418d41485" dependencies = [ "byteorder", "concurrent_lru", - "fancy-regex", "flate2", "indexmap", "nodejs-built-in-modules", "pathdiff", "radix_trie", + "regress", "rustc-hash", "serde", "serde_json", @@ -934,26 +561,6 @@ dependencies = [ "nibble_vec", ] -[[package]] -name = "rayon" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -1012,6 +619,16 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +[[package]] +name = "regress" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "158a764437582235e3501f683b93a0a6f8d825d04a789dbe5ed30b8799b8908a" +dependencies = [ + "hashbrown 0.16.1", + "memchr", +] + [[package]] name = "rspack_napi_resolver" version = "0.0.0" @@ -1026,24 +643,21 @@ dependencies = [ [[package]] name = "rspack_resolver" -version = "0.10.0" +version = "0.102.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa7b457b1bb9b5dec84da9736ab8c852a7ee599670ea2218321e6de7fd729c6" dependencies = [ "arc-swap", "async-trait", "camino", "cfg-if", - "codspeed-criterion-compat", + "cow-utils", "dashmap", - "document-features", "dunce", "futures", "indexmap", "json-strip-comments", - "mimalloc", - "normalize-path", "pnp", - "rayon", - "regex", "rustc-hash", "serde", "serde_json", @@ -1051,7 +665,6 @@ dependencies = [ "thiserror", "tokio", "tracing", - "vfs", ] [[package]] @@ -1072,15 +685,6 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -1146,12 +750,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "simd-adler32" version = "0.3.7" @@ -1160,9 +758,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simd-json" -version = "0.17.0" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4255126f310d2ba20048db6321c81ab376f6a6735608bf11f0785c41f01f64e3" +checksum = "e32d7ab2678282d21e53374fbead7119b7eacbede73685dcaac472870a29a11c" dependencies = [ "halfbrown", "ref-cast", @@ -1190,16 +788,6 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "statrs" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a3fe7c28c6512e766b0874335db33c94ad7b8f9054228ae1c2abd47ce7d335e" -dependencies = [ - "approx", - "num-traits", -] - [[package]] name = "syn" version = "2.0.108" @@ -1240,21 +828,11 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "pin-project-lite", "tokio-macros", @@ -1338,78 +916,19 @@ dependencies = [ "ryu", ] -[[package]] -name = "vfs" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d33cbe2ac48f2a446f04c33aef4906078ffd224888df5ae60b7ed401ded771" -dependencies = [ - "filetime", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.60.2", -] - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows-targets", ] [[package]] @@ -1419,132 +938,64 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - [[package]] name = "windows_aarch64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - [[package]] name = "windows_aarch64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - [[package]] name = "windows_i686_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - [[package]] name = "windows_i686_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - [[package]] name = "windows_i686_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - [[package]] name = "windows_x86_64_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - [[package]] name = "windows_x86_64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - [[package]] name = "windows_x86_64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "zerocopy" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zlib-rs" version = "0.5.2" diff --git a/Cargo.toml b/Cargo.toml index 4abcdb63..f853083a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,143 +2,6 @@ members = ["napi"] resolver = "2" -[package] -authors = ["Rspack"] -categories = ["development-tools"] -description = "ESM / CJS module resolution" -edition = "2021" -homepage = "https://github.com/rstackjs/rspack-resolver" -include = ["/src", "/examples", "/benches", "!/benches/pnpm-lock.yaml", "!/benches/node_modules"] -keywords = ["node", "resolve", "cjs", "esm", "enhanced-resolve"] -license = "MIT" -name = "rspack_resolver" -readme = "README.md" -repository = "https://github.com/rstackjs/rspack-resolver" -rust-version = "1.70" -version = "0.10.0" - -[lib] -doctest = false - -[[bench]] -harness = false -name = "resolver" - -[lints.clippy] -all = { level = "warn", priority = -1 } -cargo = { level = "warn", priority = -1 } -# restriction -dbg_macro = "warn" -todo = "warn" -unimplemented = "warn" -# I like the explicitness of this rule as it removes confusion around `clone`. -# This increases readability, avoids `clone` mindlessly and heap allocating on accident. -clone_on_ref_ptr = "warn" -# These two are mutually exclusive, I like `mod.rs` files for better fuzzy searches on module entries. -empty_drop = "warn" -empty_structs_with_brackets = "warn" -exit = "warn" -filetype_is_file = "warn" -get_unwrap = "warn" -impl_trait_in_params = "warn" -rc_buffer = "warn" -rc_mutex = "warn" -rest_pat_in_fully_bound_structs = "warn" -self_named_module_files = "warn" # "-Wclippy::mod_module_files" -undocumented_unsafe_blocks = "warn" -unnecessary_safety_comment = "warn" -# I want to write the best Rust code so both pedantic and nursery is enabled. -# We should only disable rules globally if they are either false positives, chaotic, or does not make sense. -nursery = { level = "warn", priority = -1 } -pedantic = { level = "warn", priority = -1 } -# Allowed rules -# pedantic -# This rule is too pedantic, I don't want to force this because naming things are hard. -module_name_repetitions = "allow" -# All triggers are mostly ignored in our codebase, so this is ignored globally. -struct_excessive_bools = "allow" -too_many_lines = "allow" -# #[must_use] is creating too much noise for this codebase, it does not add much value except nagging -# the programmer to add a #[must_use] after clippy has been run. -# Having #[must_use] every where also hinders readability. -must_use_candidate = "allow" -# used_underscore_binding= "allow" -doc_markdown = "allow" -# nursery -# `const` functions do not make sense for our project because this is not a `const` library. -# This rule also confuses new comers and forces them to add `const` blindlessly without any reason. -missing_const_for_fn = "allow" -# cargo -multiple_crate_versions = "allow" - -[[example]] -name = "resolver" - -[dependencies] -dashmap = "6.1.0" -serde = { version = "1.0.228", features = ["derive"] } # derive for Deserialize from package.json -serde_json = { version = "1.0.150", features = [ - "preserve_order", -] } # preserve_order: package_json.exports requires order such as `["require", "import", "default"]` -tracing = "0.1.44" - -simd-json = { version = "0.17.0", features = ["serde_impl", "runtime-detection"], default-features = false } - -camino = { version = "1.2.2", features = ["serde1"] } # UTF-8 path types used for all internal path representations -cfg-if = "1.0.4" -dunce = "1.0.5" # Normalize Windows paths to the most compatible format, avoiding UNC where possible -indexmap = { version = "2.14.0", features = ["serde"] } -json-strip-comments = "3.1.1" -rustc-hash = { version = "2.1.2", default-features = false, features = ["std"] } -thiserror = "2.0.18" - -pnp = { version = "0.12.9", optional = true } - -arc-swap = { version = "1.9.1", optional = true } -async-trait = "0.1.89" -document-features = { version = "0.2.12", optional = true } -futures = "0.3.32" - -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -tokio = { version = "1.52.3", default-features = false, features = ["sync", "rt-multi-thread", "macros"] } -[target.'cfg(target_arch = "wasm32")'.dependencies] -tokio = { version = "1.52.3", default-features = false, features = ["sync", "rt", "macros"] } - -[dev-dependencies] -criterion = { version = "4.3.0", package = "codspeed-criterion-compat", default-features = false, features = [ - "async_tokio", -] } - -normalize-path = { version = "0.2.1" } -rayon = { version = "1.12.0" } -regex = "1.12.4" -vfs = "0.13.0" # for testing with in memory file system - -# Benchmark allocator features kept aligned with rspack's `xtask/benchmark`. -[target.'cfg(target_os = "linux")'.dev-dependencies] -mimalloc = { version = "0.1.48", features = ["local_dynamic_tls", "v3"] } - -[target.'cfg(target_os = "macos")'.dev-dependencies] -mimalloc = { version = "0.1.48", features = ["v3"] } - -[target.'cfg(all(not(target_os = "linux"), not(target_os = "macos"), not(target_family = "wasm")))'.dev-dependencies] -mimalloc = { version = "0.1.48", features = ["v3"] } - -[features] -default = ["yarn_pnp"] -## Enables the [PackageJson::raw_json] API, -## which returns the `package.json` with `serde_json::Value`. -package_json_raw_json_api = [] -## [Yarn Plug'n'Play](https://yarnpkg.com/features/pnp) -yarn_pnp = ["pnp", "arc-swap"] -# For remove tracing calls in release build -enable_instrument = [] - -[package.metadata.docs.rs] -all-features = true -rustdoc-args = ["--cfg", "docsrs"] - -# For napi [profile.release] # Configurations explicitly listed here for clarity. # Using the best options for performance. diff --git a/README.md b/README.md index b287381c..f5fa3fa0 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ Rust port of [enhanced-resolve](https://github.com/webpack/enhanced-resolve). +This repository ships the `@rspack/resolver` npm package. The `rspack_resolver` crate it binds to is developed in +[rspack](https://github.com/web-infra-dev/rspack/tree/main/crates/rspack_resolver). + - built-in [tsconfig-paths-webpack-plugin](https://github.com/jonaskello/tsconfig-paths-webpack-plugin) - support extending tsconfig defined in `tsconfig.extends` - support paths alias defined in `tsconfig.compilerOptions.paths` diff --git a/benches/package.json b/benches/package.json deleted file mode 100644 index ecc68c2d..00000000 --- a/benches/package.json +++ /dev/null @@ -1,989 +0,0 @@ -{ - "name": "benches", - "version": "1.0.0", - "main": "index.js", - "scripts": { - "test": "cargo bench" - }, - "keywords": [], - "author": "pshu", - "license": "MIT", - "type": "commonjs", - "description": "resolver benchmark fixture project", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@angular-devkit/core": "^19.2.4", - "@angular/common": "^19.2.3", - "@angular/compiler": "^19.2.3", - "@angular/core": "^19.2.3", - "@angular/forms": "^19.2.3", - "@angular/platform-browser": "^19.2.3", - "@angular/platform-browser-dynamic": "^19.2.3", - "@angular/router": "^19.2.3", - "@aws-crypto/sha256-browser": "^5.2.0", - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-sdk/client-s3": "^3.774.0", - "@aws-sdk/client-sso-oidc": "^3.774.0", - "@aws-sdk/client-sts": "^3.774.0", - "@aws-sdk/core": "^3.774.0", - "@aws-sdk/credential-provider-node": "^3.774.0", - "@aws-sdk/middleware-host-header": "^3.774.0", - "@aws-sdk/middleware-logger": "^3.734.0", - "@aws-sdk/middleware-recursion-detection": "^3.772.0", - "@aws-sdk/middleware-user-agent": "^3.774.0", - "@aws-sdk/region-config-resolver": "^3.734.0", - "@aws-sdk/types": "^3.734.0", - "@aws-sdk/util-endpoints": "^3.743.0", - "@aws-sdk/util-user-agent-browser": "^3.734.0", - "@aws-sdk/util-user-agent-node": "^3.774.0", - "@azure/abort-controller": "^2.1.2", - "@babel/code-frame": "^7.26.2", - "@babel/core": "^7.26.10", - "@babel/generator": "^7.27.0", - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.27.0", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/helpers": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.27.0", - "@babel/plugin-transform-runtime": "^7.26.10", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typescript": "^7.27.0", - "@babel/preset-env": "^7.26.9", - "@babel/preset-react": "^7.26.3", - "@babel/preset-typescript": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.27.0", - "@colors/colors": "^1.6.0", - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.23.0", - "@floating-ui/dom": "^1.6.13", - "@graphql-tools/utils": "^10.8.6", - "@grpc/grpc-js": "^1.13.1", - "@grpc/proto-loader": "^0.7.13", - "@jest/globals": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/gen-mapping": "^0.3.8", - "@jridgewell/resolve-uri": "^3.1.2", - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.25", - "@mui/material": "^6.4.8", - "@nestjs/common": "^11.0.12", - "@nodelib/fs.stat": "^4.0.0", - "@nodelib/fs.walk": "^3.0.1", - "@octokit/rest": "^21.1.1", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.200.0", - "@opentelemetry/semantic-conventions": "^1.30.0", - "@popperjs/core": "^2.11.8", - "@radix-ui/react-slot": "^1.1.2", - "@rollup/pluginutils": "^5.1.4", - "@sinclair/typebox": "^0.34.31", - "@sindresorhus/is": "^7.0.1", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/hash-node": "^4.0.2", - "@smithy/invalid-dependency": "^4.0.2", - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/property-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", - "@smithy/util-utf8": "^4.0.0", - "@swc/core": "^1.11.13", - "@swc/helpers": "^0.5.15", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.2.0", - "@testing-library/user-event": "^14.6.1", - "@typescript-eslint/eslint-plugin": "^8.37.0", - "@typescript-eslint/parser": "^8.37.0", - "@typescript-eslint/scope-manager": "^8.37.0", - "@typescript-eslint/type-utils": "^8.37.0", - "@typescript-eslint/types": "^8.37.0", - "@typescript-eslint/typescript-estree": "^8.37.0", - "@typescript-eslint/utils": "^8.37.0", - "@typescript-eslint/visitor-keys": "^8.37.0", - "JSONStream": "^1.3.5", - "abbrev": "^3.0.0", - "abort-controller": "^3.0.0", - "accepts": "^1.3.8", - "acorn": "^8.14.1", - "acorn-globals": "^7.0.1", - "acorn-jsx": "^5.3.2", - "acorn-walk": "^8.3.4", - "adm-zip": "^0.5.16", - "agent-base": "^7.1.3", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "ajv-keywords": "^5.1.0", - "ansi-colors": "^4.1.3", - "ansi-escapes": "^7.0.0", - "ansi-regex": "^6.1.0", - "ansi-styles": "^6.2.1", - "any-promise": "^1.3.0", - "anymatch": "^3.1.3", - "archiver": "^7.0.1", - "arg": "^5.0.2", - "argparse": "^2.0.1", - "aria-query": "^5.3.2", - "array-buffer-byte-length": "^1.0.2", - "array-flatten": "^3.0.0", - "array-includes": "^3.1.8", - "array-union": "^3.0.1", - "array.prototype.findlast": "^1.2.5", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "arraybuffer.prototype.slice": "^1.0.4", - "arrify": "^3.0.0", - "asap": "^2.0.6", - "assert": "^2.1.0", - "assertion-error": "^2.0.1", - "ast-types": "^0.14.2", - "astral-regex": "^2.0.0", - "async": "^3.2.6", - "async-retry": "^1.3.3", - "asynckit": "^0.4.0", - "atob": "^2.1.2", - "autoprefixer": "^10.4.21", - "available-typed-arrays": "^1.0.7", - "aws-sdk": "^2.1692.0", - "axe-core": "^4.10.3", - "axios": "^1.8.2", - "axobject-query": "^4.1.0", - "babel-jest": "^29.7.0", - "babel-loader": "^10.0.0", - "babel-plugin-istanbul": "^7.0.0", - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.1.0", - "babel-preset-jest": "^29.6.3", - "balanced-match": "^3.0.1", - "base64-js": "^1.5.1", - "big.js": "^6.2.2", - "bignumber.js": "^9.1.2", - "binary-extensions": "^3.0.0", - "bindings": "^1.5.0", - "bl": "^6.1.0", - "bluebird": "^3.7.2", - "bn.js": "^5.2.1", - "body-parser": "^1.20.3", - "boolbase": "^1.0.0", - "bowser": "^2.11.0", - "boxen": "^8.0.1", - "brace-expansion": "^4.0.0", - "braces": "^3.0.3", - "browserslist": "^4.24.4", - "bser": "^2.1.1", - "buffer": "^6.0.3", - "buffer-crc32": "^1.0.0", - "buffer-from": "^1.1.2", - "builtin-modules": "^5.0.0", - "busboy": "^1.6.0", - "bytes": "^3.1.2", - "cac": "^6.7.14", - "cacache": "^19.0.1", - "call-bind": "^1.0.8", - "callsites": "^4.2.0", - "camelcase": "^8.0.0", - "caniuse-lite": "^1.0.30001707", - "caseless": "^0.12.0", - "chai": "^5.2.0", - "chalk": "^5.4.1", - "change-case": "^5.4.4", - "char-regex": "^2.0.2", - "chardet": "^2.1.0", - "cheerio": "^1.0.0", - "chokidar": "^4.0.3", - "chownr": "^3.0.0", - "chrome-trace-event": "^1.0.4", - "cjs-module-lexer": "^2.1.0", - "classnames": "^2.5.1", - "clean-css": "^5.3.3", - "clean-stack": "^5.2.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "cli-table3": "^0.6.5", - "cli-truncate": "^4.0.0", - "cli-width": "^4.1.0", - "cliui": "^9.0.1", - "clone": "^2.1.2", - "clone-deep": "^4.0.1", - "clsx": "^2.1.1", - "co": "^4.6.0", - "collect-v8-coverage": "^1.0.2", - "color": "^5.0.0", - "color-convert": "^3.0.1", - "color-name": "^2.0.0", - "color-string": "^2.0.1", - "colorette": "^2.0.20", - "colors": "^1.4.0", - "combined-stream": "^1.0.8", - "commander": "^13.1.0", - "commondir": "^1.0.1", - "component-emitter": "^2.0.0", - "compression": "^1.8.0", - "concat-map": "^0.0.2", - "concat-stream": "^2.0.0", - "configstore": "^7.0.0", - "connect": "^3.7.0", - "consola": "^3.4.2", - "content-disposition": "^0.5.4", - "content-type": "^1.0.5", - "convert-source-map": "^2.0.0", - "cookie": "^1.0.2", - "cookie-parser": "^1.4.7", - "cookie-signature": "^1.2.2", - "core-js": "^3.41.0", - "core-js-compat": "^3.41.0", - "core-util-is": "^1.0.3", - "cors": "^2.8.5", - "cosmiconfig": "^9.0.0", - "create-require": "^1.1.1", - "cross-env": "^7.0.3", - "cross-fetch": "^4.1.0", - "cross-spawn": "^7.0.6", - "crypto-js": "^4.2.0", - "css-loader": "^7.1.2", - "css-select": "^5.1.0", - "css-tree": "^3.1.0", - "css-what": "^6.1.0", - "cssesc": "^3.0.0", - "cssnano": "^7.0.6", - "cssom": "^0.5.0", - "cssstyle": "^4.3.0", - "d3-array": "^3.2.4", - "d3-scale": "^4.0.2", - "data-uri-to-buffer": "^6.0.2", - "data-urls": "^5.0.0", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "date-fns": "^4.1.0", - "dateformat": "^5.0.3", - "dayjs": "^1.11.13", - "debug": "^4.4.0", - "decamelize": "^6.0.0", - "decimal.js": "10.4.3", - "decompress-response": "^9.0.0", - "dedent": "^1.5.3", - "deep-eql": "^5.0.2", - "deep-equal": "^2.2.3", - "deep-extend": "^0.6.0", - "deep-is": "^0.1.4", - "deepmerge": "^4.3.1", - "defaults": "^3.0.0", - "define-data-property": "^1.1.4", - "define-lazy-prop": "^3.0.0", - "define-properties": "^1.2.1", - "delayed-stream": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.2.0", - "detect-indent": "^7.0.1", - "detect-libc": "^2.0.3", - "detect-newline": "^4.0.1", - "diff": "^7.0.0", - "diff-sequences": "^29.6.3", - "dir-glob": "^3.0.1", - "doctrine": "^3.0.0", - "dom-accessibility-api": "^0.7.0", - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "dompurify": "^3.2.4", - "domutils": "^3.2.2", - "dot-prop": "^9.0.0", - "dotenv": "^16.4.7", - "dotenv-expand": "^12.0.1", - "duplexer": "^0.1.2", - "eastasianwidth": "^0.3.0", - "ee-first": "^1.1.1", - "ejs": "^3.1.10", - "electron-to-chromium": "^1.5.123", - "elliptic": "^6.6.1", - "emittery": "^1.1.0", - "emoji-regex": "^10.4.0", - "encodeurl": "^2.0.0", - "encoding": "^0.1.13", - "end-of-stream": "^1.4.4", - "enhanced-resolve": "^5.17.1", - "enquirer": "^2.4.1", - "entities": "^6.0.0", - "env-paths": "^3.0.0", - "envinfo": "^7.14.0", - "error-ex": "^1.3.2", - "error-stack-parser": "^2.1.4", - "es-abstract": "^1.23.9", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-iterator-helpers": "^1.2.1", - "es-module-lexer": "^1.6.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-shim-unscopables": "^1.1.0", - "es-to-primitive": "^1.3.0", - "es6-promise": "^4.2.8", - "esbuild": "^0.25.1", - "escalade": "^3.2.0", - "escape-html": "^1.0.3", - "escape-string-regexp": "^5.0.0", - "eslint": "^9.31.0", - "eslint-config-prettier": "^10.1.8", - "eslint-import-resolver-node": "^0.3.9", - "eslint-import-resolver-typescript": "^4.4.4", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-prettier": "^5.5.3", - "eslint-plugin-react": "^7.37.5", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esprima": "^4.0.1", - "esquery": "^1.6.0", - "esrecurse": "^4.3.0", - "estraverse": "^5.3.0", - "estree-walker": "^3.0.3", - "etag": "^1.8.1", - "event-target-shim": "^6.0.2", - "eventemitter2": "^6.4.9", - "eventemitter3": "^5.0.1", - "events": "^3.3.0", - "execa": "^9.5.2", - "exit": "^0.1.2", - "expect": "^29.7.0", - "express": "^4.21.2", - "extend": "^3.0.2", - "extend-shallow": "^3.0.2", - "external-editor": "^3.1.0", - "fast-deep-equal": "^3.1.3", - "fast-diff": "^1.3.0", - "fast-glob": "^3.3.3", - "fast-json-stable-stringify": "^2.1.0", - "fast-levenshtein": "^3.0.0", - "fast-xml-parser": "^5.0.9", - "fastq": "^1.19.1", - "fb-watchman": "^2.0.2", - "figlet": "^1.8.0", - "file-entry-cache": "^10.0.7", - "file-type": "^20.4.1", - "filesize": "^10.1.6", - "fill-range": "^7.1.1", - "finalhandler": "^2.1.0", - "find-cache-dir": "^5.0.0", - "find-up": "^7.0.0", - "flat": "^6.0.1", - "flat-cache": "^6.1.7", - "flatted": "^3.3.3", - "follow-redirects": "^1.15.9", - "for-each": "^0.3.5", - "for-in": "^1.0.2", - "foreground-child": "^3.3.1", - "form-data": "^4.0.2", - "forwarded": "^0.2.0", - "fraction.js": "^5.2.1", - "framer-motion": "^12.5.0", - "fresh": "^0.5.2", - "fs-extra": "^11.3.0", - "fs-minipass": "^3.0.3", - "fs.realpath": "^1.0.0", - "function-bind": "^1.1.2", - "function.prototype.name": "^1.1.8", - "functions-have-names": "^1.2.3", - "gensync": "1.0.0-beta.2", - "get-caller-file": "^2.0.5", - "get-intrinsic": "^1.3.0", - "get-package-type": "^0.1.0", - "get-stdin": "^9.0.0", - "get-stream": "^9.0.1", - "get-symbol-description": "^1.1.0", - "get-tsconfig": "^4.10.0", - "get-value": "^4.0.1", - "glob": "^11.0.1", - "glob-parent": "^6.0.2", - "global-prefix": "^4.0.0", - "globals": "^16.0.0", - "globalthis": "^1.0.4", - "globby": "^14.1.0", - "google-auth-library": "^9.15.1", - "gopd": "^1.2.0", - "got": "^14.4.6", - "graceful-fs": "^4.2.11", - "graphemer": "^1.4.0", - "graphql": "^16.10.0", - "handlebars": "^4.7.8", - "has-bigints": "^1.1.0", - "has-flag": "^5.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "has-tostringtag": "^1.0.2", - "hash.js": "^1.1.7", - "hasown": "^2.0.2", - "he": "^1.2.0", - "highlight.js": "^11.11.1", - "hosted-git-info": "^8.0.2", - "html-entities": "^2.5.3", - "html-escaper": "^3.0.3", - "html-webpack-plugin": "^5.6.3", - "htmlparser2": "^10.0.0", - "http-cache-semantics": "^4.1.1", - "http-errors": "^2.0.0", - "http-proxy-agent": "^7.0.2", - "http-proxy-middleware": "^3.0.5", - "http-signature": "^1.4.0", - "https-proxy-agent": "^7.0.6", - "husky": "^9.1.7", - "i18next": "^24.2.3", - "iconv-lite": "^0.6.3", - "ieee754": "^1.2.1", - "ignore": "^7.0.3", - "image-size": "^2.0.2", - "immer": "^10.1.1", - "immutable": "^5.0.3", - "import-fresh": "^3.3.1", - "import-local": "^3.2.0", - "imurmurhash": "^0.1.4", - "indent-string": "^5.0.0", - "inherits": "^2.0.4", - "ini": "^5.0.0", - "inquirer": "^12.5.0", - "internal-slot": "^1.1.0", - "interpret": "^3.1.1", - "ioredis": "^5.6.0", - "ip-address": "^10.0.1", - "ipaddr.js": "2.2.0", - "is-array-buffer": "^3.0.5", - "is-arrayish": "^0.3.2", - "is-bigint": "^1.1.0", - "is-binary-path": "^3.0.0", - "is-callable": "^1.2.7", - "is-ci": "^4.1.0", - "is-core-module": "^2.16.1", - "is-data-view": "^1.0.2", - "is-docker": "^3.0.0", - "is-extendable": "^1.0.1", - "is-extglob": "^2.1.1", - "is-finalizationregistry": "^1.1.1", - "is-fullwidth-code-point": "^5.0.0", - "is-generator-fn": "^3.0.0", - "is-generator-function": "^1.1.0", - "is-glob": "^4.0.3", - "is-interactive": "^2.0.0", - "is-map": "^2.0.3", - "is-negative-zero": "^2.0.3", - "is-number": "^7.0.0", - "is-path-inside": "^4.0.0", - "is-plain-obj": "^4.1.0", - "is-plain-object": "^5.0.0", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-stream": "^4.0.1", - "is-typed-array": "^1.1.15", - "is-unicode-supported": "^2.1.0", - "is-weakmap": "^2.0.2", - "is-weakref": "^1.1.1", - "is-weakset": "^2.0.4", - "is-wsl": "^3.1.0", - "isarray": "^2.0.5", - "isexe": "^3.1.1", - "isobject": "^4.0.0", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-instrument": "^6.0.3", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", - "istanbul-reports": "^3.1.7", - "iterator.prototype": "^1.1.5", - "jackspeak": "^4.1.0", - "jake": "^10.9.2", - "jest": "^29.7.0", - "jest-changed-files": "^29.7.0", - "jest-circus": "^29.7.0", - "jest-cli": "^29.7.0", - "jest-config": "^29.7.0", - "jest-diff": "^29.7.0", - "jest-docblock": "^29.7.0", - "jest-each": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-pnp-resolver": "^1.2.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "jiti": "^2.4.2", - "joi": "^17.13.3", - "jose": "^6.0.10", - "jquery": "^3.7.1", - "js-cookie": "^3.0.5", - "js-tokens": "^9.0.1", - "js-yaml": "^4.1.0", - "jsbn": "^1.1.0", - "jsdom": "^26.0.0", - "jsesc": "^3.1.0", - "json-buffer": "^3.0.1", - "json-parse-better-errors": "^1.0.2", - "json-parse-even-better-errors": "^4.0.0", - "json-schema-traverse": "^1.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "json5": "^2.2.3", - "jsonc-parser": "^3.3.1", - "jsonfile": "^6.1.0", - "jsonparse": "^1.3.1", - "jsonwebtoken": "^9.0.2", - "jsx-ast-utils": "^3.3.5", - "jszip": "^3.10.1", - "jws": "^4.0.0", - "jwt-decode": "^4.0.0", - "keyv": "^5.3.2", - "kind-of": "^6.0.3", - "kleur": "^4.1.5", - "koa": "^2.16.1", - "less": "^4.2.2", - "less-loader": "^12.2.0", - "levn": "^0.4.1", - "lilconfig": "^3.1.3", - "lines-and-columns": "^2.0.4", - "lint-staged": "^15.5.0", - "listr2": "^8.2.5", - "load-json-file": "^7.0.1", - "loader-utils": "^3.3.1", - "locate-path": "^7.2.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "lodash.camelcase": "^4.3.0", - "lodash.isequal": "^4.5.0", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.merge": "^4.6.2", - "log-symbols": "^7.0.0", - "log-update": "^6.1.0", - "log4js": "^6.9.1", - "loglevel": "^1.9.2", - "long": "^5.3.1", - "loose-envify": "^1.4.0", - "lowercase-keys": "^3.0.0", - "lru-cache": "^11.1.0", - "luxon": "^3.5.0", - "magic-string": "^0.30.17", - "make-dir": "^5.0.0", - "make-error": "^1.3.6", - "map-obj": "^5.0.2", - "markdown-it": "^14.1.0", - "marked": "^15.0.7", - "md5": "^2.3.0", - "mdn-data": "^2.18.0", - "media-typer": "^1.1.0", - "memfs": "^4.17.0", - "meow": "^13.2.0", - "merge-descriptors": "^2.0.0", - "merge-stream": "^2.0.0", - "merge2": "^1.4.1", - "methods": "^1.1.2", - "micromatch": "^4.0.8", - "mime": "^4.0.6", - "mime-db": "^1.54.0", - "mime-types": "^2.1.35", - "mini-css-extract-plugin": "^2.9.2", - "minimalistic-assert": "^1.0.1", - "minimatch": "^10.0.1", - "minimist": "^1.2.8", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mitt": "^3.0.1", - "mkdirp": "^3.0.1", - "mocha": "^11.1.0", - "moment": "^2.30.1", - "moment-timezone": "^0.5.48", - "mongodb": "^6.15.0", - "mongoose": "^8.13.0", - "morgan": "^1.10.0", - "ms": "^2.1.3", - "multer": "^2.0.2", - "mustache": "^4.2.0", - "mute-stream": "^2.0.0", - "mz": "^2.7.0", - "nan": "^2.22.2", - "nanoid": "^5.1.5", - "natural-compare": "^1.4.0", - "negotiator": "^1.0.0", - "neo-async": "^2.6.2", - "next": "^15.4.8", - "nice-try": "^3.0.1", - "node-addon-api": "^8.3.1", - "node-fetch": "^3.3.2", - "node-forge": "^1.3.1", - "node-gyp-build": "^4.8.4", - "node-int64": "^0.4.0", - "nodemailer": "^6.10.0", - "nodemon": "^3.1.9", - "nopt": "^8.1.0", - "normalize-package-data": "^7.0.0", - "normalize-path": "^3.0.0", - "normalize-range": "^0.1.2", - "normalize-url": "^8.0.1", - "npm": "^11.2.0", - "npm-package-arg": "^12.0.2", - "npm-run-path": "^6.0.0", - "nth-check": "^2.1.1", - "nwsapi": "^2.2.19", - "object-assign": "^4.1.1", - "object-hash": "^3.0.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "on-finished": "^2.4.1", - "on-headers": "^1.0.2", - "once": "^1.4.0", - "onetime": "^7.0.0", - "open": "^10.1.0", - "optionator": "^0.9.4", - "ora": "^8.2.0", - "p-cancelable": "^4.0.1", - "p-limit": "^6.2.0", - "p-locate": "^6.0.0", - "p-map": "^7.0.3", - "p-retry": "^6.2.1", - "p-try": "^3.0.0", - "pako": "^2.1.0", - "parse-json": "^8.2.0", - "parse5": "^7.2.1", - "parseurl": "^1.3.3", - "path": "^0.12.7", - "path-browserify": "^1.0.1", - "path-exists": "^5.0.0", - "path-key": "^4.0.0", - "path-parse": "^1.0.7", - "path-scurry": "^2.0.0", - "path-to-regexp": "^8.2.0", - "path-type": "^6.0.0", - "pathe": "^2.0.3", - "performance-now": "^2.1.0", - "pg": "^8.14.1", - "picocolors": "^1.1.1", - "picomatch": "^4.0.2", - "pify": "^6.1.0", - "pino": "^9.6.0", - "pirates": "^4.0.6", - "pkg-dir": "^8.0.0", - "playwright": "^1.51.1", - "pluralize": "^8.0.0", - "pnpm": "^11.3.0", - "polished": "^4.3.1", - "possible-typed-array-names": "^1.1.0", - "postcss": "8.4.33", - "postcss-import": "^16.1.0", - "postcss-load-config": "^6.0.1", - "postcss-loader": "^8.1.1", - "postcss-nested": "^7.0.2", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0", - "prelude-ls": "^1.2.1", - "prettier": "^3.5.3", - "pretty-bytes": "^6.1.1", - "pretty-format": "^29.7.0", - "prismjs": "^1.30.0", - "process": "^0.11.10", - "process-nextick-args": "^2.0.1", - "progress": "^2.0.3", - "promise": "^8.3.0", - "promise-retry": "^2.0.1", - "prompts": "^2.4.2", - "prop-types": "^15.8.1", - "protobufjs": "^7.4.0", - "proxy-addr": "^2.0.7", - "proxy-from-env": "^1.1.0", - "psl": "^1.15.0", - "pump": "^3.0.2", - "punycode": "^2.3.1", - "qs": "^6.14.0", - "query-string": "^9.1.1", - "querystringify": "^2.2.0", - "queue-microtask": "^1.2.3", - "raf": "^3.4.1", - "ramda": "^0.30.1", - "randombytes": "^2.1.0", - "range-parser": "^1.2.1", - "raw-body": "^3.0.0", - "rc": "^1.2.8", - "react": "^18.3.1", - "react-dom": "^19.0.0", - "react-hook-form": "^7.54.2", - "react-is": "^19.0.0", - "react-redux": "^9.2.0", - "react-refresh": "^0.16.0", - "react-router": "^7.5.2", - "react-router-dom": "^7.4.0", - "react-transition-group": "^4.4.5", - "read-pkg": "^9.0.1", - "readable-stream": "^4.7.0", - "readdirp": "^4.1.2", - "recast": "^0.23.11", - "rechoir": "^0.8.0", - "redent": "^4.0.0", - "redux": "^5.0.1", - "redux-thunk": "^3.1.0", - "reflect-metadata": "^0.2.2", - "reflect.getprototypeof": "^1.0.10", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regenerator-runtime": "^0.14.1", - "regenerator-transform": "^0.15.2", - "regexp.prototype.flags": "^1.5.4", - "regexpu-core": "^6.2.0", - "regjsparser": "^0.12.0", - "repeat-string": "^1.6.1", - "require-directory": "^2.1.1", - "require-from-string": "^2.0.2", - "require-main-filename": "^2.0.0", - "requires-port": "^1.0.0", - "reselect": "^5.1.1", - "resize-observer-polyfill": "^1.5.1", - "resolve": "^1.22.10", - "resolve-cwd": "^3.0.0", - "resolve-from": "^5.0.0", - "resolve.exports": "^2.0.3", - "responselike": "^3.0.0", - "restore-cursor": "^5.1.0", - "retry": "^0.13.1", - "reusify": "^1.1.0", - "rfdc": "^1.4.1", - "rimraf": "^6.0.1", - "rollup": "^4.37.0", - "run-async": "^3.0.0", - "run-parallel": "^1.2.0", - "rxjs": "^7.8.2", - "safe-array-concat": "^1.1.3", - "safe-buffer": "^5.2.1", - "safe-regex-test": "^1.1.0", - "safer-buffer": "^2.1.2", - "sass": "^1.86.0", - "sass-loader": "^16.0.5", - "sax": "^1.4.1", - "saxes": "^6.0.0", - "scheduler": "^0.25.0", - "schema-utils": "^4.3.0", - "semver": "^7.7.1", - "send": "^1.1.0", - "serve-static": "^1.16.2", - "set-blocking": "^2.0.0", - "set-function-length": "^1.2.2", - "set-function-name": "^2.0.2", - "set-value": "^4.1.0", - "setimmediate": "^1.0.5", - "setprototypeof": "^1.2.0", - "shallow-clone": "^3.0.1", - "sharp": "^0.33.5", - "shebang-command": "^2.0.0", - "shebang-regex": "^4.0.0", - "shell-quote": "^1.8.2", - "shelljs": "^0.9.2", - "side-channel": "^1.1.0", - "signal-exit": "^4.1.0", - "simple-git": "^3.27.0", - "sisteransi": "^1.0.5", - "slash": "^5.1.0", - "slice-ansi": "^7.1.0", - "smart-buffer": "^4.2.0", - "socket.io": "^4.8.1", - "socket.io-client": "^4.8.1", - "socks": "^2.8.4", - "socks-proxy-agent": "^8.0.5", - "source-map": "^0.7.4", - "source-map-js": "^1.2.1", - "source-map-support": "^0.5.21", - "spdx-correct": "^3.2.0", - "spdx-expression-parse": "^4.0.0", - "split2": "^4.2.0", - "sprintf-js": "^1.1.3", - "sshpk": "^1.18.0", - "ssri": "^12.0.0", - "stack-utils": "^2.0.6", - "statuses": "^2.0.1", - "stream-browserify": "^3.0.0", - "string-length": "^6.0.0", - "string-width": "^7.2.0", - "string.prototype.matchall": "^4.0.12", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "string_decoder": "^1.3.0", - "strip-ansi": "^7.1.0", - "strip-bom": "^5.0.0", - "strip-final-newline": "^4.0.0", - "strip-indent": "^4.0.0", - "strip-json-comments": "^5.0.1", - "style-loader": "^4.0.0", - "sucrase": "^3.35.0", - "superagent": "^10.2.0", - "supports-color": "^10.0.0", - "supports-preserve-symlinks-flag": "^1.0.0", - "svgo": "^3.3.2", - "symbol-tree": "^3.2.4", - "tailwind-merge": "^3.0.2", - "tailwindcss": "^4.0.15", - "tapable": "^2.2.1", - "tar": "^7.4.3", - "tar-stream": "^3.1.7", - "terser-webpack-plugin": "^5.3.14", - "test-exclude": "^7.0.1", - "text-table": "^0.2.0", - "thenify": "^3.3.1", - "thenify-all": "^1.6.0", - "through": "^2.3.8", - "through2": "^4.0.2", - "tiny-invariant": "^1.3.3", - "tiny-warning": "^1.0.3", - "tmp": "^0.2.3", - "tmpl": "^1.0.5", - "to-regex-range": "^5.0.1", - "toidentifier": "^1.0.1", - "tough-cookie": "^5.1.2", - "tr46": "^5.1.0", - "tree-kill": "^1.2.2", - "ts-api-utils": "^2.1.0", - "ts-jest": "^29.3.0", - "ts-loader": "^9.5.2", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "tslib": "^2.8.1", - "tweetnacl": "^1.0.3", - "type-check": "^0.4.0", - "type-detect": "^4.1.0", - "type-is": "^1.6.18", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "typedarray": "^0.0.7", - "typedarray-to-buffer": "^4.0.0", - "typescript": "^5.6.2", - "ua-parser-js": "^2.0.3", - "unbox-primitive": "^1.1.0", - "underscore": "^1.13.7", - "undici": "^7.5.0", - "unicode-canonical-property-names-ecmascript": "^2.0.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.2.0", - "unicode-property-aliases-ecmascript": "^2.1.0", - "unified": "^11.0.5", - "unique-filename": "^4.0.0", - "unique-slug": "^5.0.0", - "unique-string": "^3.0.0", - "unist-util-visit": "^5.0.0", - "unpipe": "^1.0.0", - "update-browserslist-db": "^1.1.3", - "update-notifier": "^7.3.1", - "uri-js": "^4.4.1", - "url": "^0.11.4", - "url-join": "^5.0.0", - "url-parse": "^1.5.10", - "use-sync-external-store": "^1.4.0", - "util-deprecate": "^1.0.2", - "utils-merge": "^1.0.1", - "uuid": "^11.1.0", - "v8-compile-cache-lib": "^3.0.1", - "v8-to-istanbul": "^9.3.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^6.0.0", - "validator": "^13.15.0", - "vary": "^1.1.2", - "verror": "^1.10.1", - "vite": "^6.2.7", - "vue": "^3.5.13", - "vue-router": "^4.5.0", - "w3c-xmlserializer": "^5.0.0", - "walker": "^1.0.8", - "watchpack": "^2.4.2", - "wcwidth": "^1.0.1", - "web-vitals": "^4.2.4", - "webidl-conversions": "^7.0.0", - "webpack": "^5.98.0", - "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.1", - "webpack-merge": "^6.0.1", - "webpack-sources": "^3.2.3", - "whatwg-encoding": "^3.1.1", - "whatwg-fetch": "^3.6.20", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.2.0", - "which": "^5.0.0", - "which-boxed-primitive": "^1.1.1", - "which-builtin-type": "^1.2.1", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.19", - "winston": "^3.17.0", - "word-wrap": "^1.2.5", - "wordwrap": "^1.0.0", - "wrap-ansi": "^9.0.0", - "wrappy": "^1.0.2", - "write-file-atomic": "^6.0.0", - "ws": "^8.18.1", - "xml-name-validator": "^5.0.0", - "xml2js": "^0.6.2", - "xmlbuilder": "^15.1.1", - "xtend": "^4.0.2", - "y18n": "^5.0.8", - "yallist": "^5.0.0", - "yaml": "^2.7.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1", - "yn": "^5.0.0", - "yocto-queue": "^1.2.1", - "yup": "^1.6.1", - "zod": "^3.24.2", - "zone.js": "^0.15.0" - } -} diff --git a/benches/pnpm-lock.yaml b/benches/pnpm-lock.yaml deleted file mode 100644 index b74b9e90..00000000 --- a/benches/pnpm-lock.yaml +++ /dev/null @@ -1,23957 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@ampproject/remapping': - specifier: ^2.3.0 - version: 2.3.0 - '@angular-devkit/core': - specifier: ^19.2.4 - version: 19.2.4(chokidar@4.0.3) - '@angular/common': - specifier: ^19.2.3 - version: 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) - '@angular/compiler': - specifier: ^19.2.3 - version: 19.2.3 - '@angular/core': - specifier: ^19.2.3 - version: 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) - '@angular/forms': - specifier: ^19.2.3 - version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2) - '@angular/platform-browser': - specifier: ^19.2.3 - version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) - '@angular/platform-browser-dynamic': - specifier: ^19.2.3 - version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/compiler@19.2.3)(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))) - '@angular/router': - specifier: ^19.2.3 - version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2) - '@aws-crypto/sha256-browser': - specifier: ^5.2.0 - version: 5.2.0 - '@aws-crypto/sha256-js': - specifier: ^5.2.0 - version: 5.2.0 - '@aws-sdk/client-s3': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/client-sso-oidc': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/client-sts': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/core': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/credential-provider-node': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/middleware-host-header': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/middleware-logger': - specifier: ^3.734.0 - version: 3.734.0 - '@aws-sdk/middleware-recursion-detection': - specifier: ^3.772.0 - version: 3.772.0 - '@aws-sdk/middleware-user-agent': - specifier: ^3.774.0 - version: 3.774.0 - '@aws-sdk/region-config-resolver': - specifier: ^3.734.0 - version: 3.734.0 - '@aws-sdk/types': - specifier: ^3.734.0 - version: 3.734.0 - '@aws-sdk/util-endpoints': - specifier: ^3.743.0 - version: 3.743.0 - '@aws-sdk/util-user-agent-browser': - specifier: ^3.734.0 - version: 3.734.0 - '@aws-sdk/util-user-agent-node': - specifier: ^3.774.0 - version: 3.774.0 - '@azure/abort-controller': - specifier: ^2.1.2 - version: 2.1.2 - '@babel/code-frame': - specifier: ^7.26.2 - version: 7.26.2 - '@babel/core': - specifier: ^7.26.10 - version: 7.26.10(supports-color@10.0.0) - '@babel/generator': - specifier: ^7.27.0 - version: 7.27.0 - '@babel/helper-annotate-as-pure': - specifier: ^7.25.9 - version: 7.25.9 - '@babel/helper-compilation-targets': - specifier: ^7.27.0 - version: 7.27.0 - '@babel/helper-module-imports': - specifier: ^7.25.9 - version: 7.25.9(supports-color@10.0.0) - '@babel/helper-module-transforms': - specifier: ^7.26.0 - version: 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': - specifier: ^7.26.5 - version: 7.26.5 - '@babel/helper-string-parser': - specifier: ^7.25.9 - version: 7.25.9 - '@babel/helper-validator-identifier': - specifier: ^7.25.9 - version: 7.25.9 - '@babel/helper-validator-option': - specifier: ^7.25.9 - version: 7.25.9 - '@babel/helpers': - specifier: ^7.27.0 - version: 7.27.0 - '@babel/parser': - specifier: ^7.27.0 - version: 7.27.0 - '@babel/plugin-syntax-import-meta': - specifier: ^7.10.4 - version: 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-jsx': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-typescript': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-arrow-functions': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-async-to-generator': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-classes': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-destructuring': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-modules-commonjs': - specifier: ^7.26.3 - version: 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-react-jsx': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-regenerator': - specifier: ^7.27.0 - version: 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-runtime': - specifier: ^7.26.10 - version: 7.26.10(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-spread': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-template-literals': - specifier: ^7.26.8 - version: 7.26.8(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-typescript': - specifier: ^7.27.0 - version: 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/preset-env': - specifier: ^7.26.9 - version: 7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/preset-react': - specifier: ^7.26.3 - version: 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/preset-typescript': - specifier: ^7.27.0 - version: 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/template': - specifier: ^7.27.0 - version: 7.27.0 - '@babel/traverse': - specifier: ^7.23.2 - version: 7.27.0(supports-color@10.0.0) - '@babel/types': - specifier: ^7.27.0 - version: 7.27.0 - '@colors/colors': - specifier: ^1.6.0 - version: 1.6.0 - '@emotion/react': - specifier: ^11.14.0 - version: 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@eslint/eslintrc': - specifier: ^3.3.1 - version: 3.3.1(supports-color@10.0.0) - '@eslint/js': - specifier: ^9.23.0 - version: 9.23.0 - '@floating-ui/dom': - specifier: ^1.6.13 - version: 1.6.13 - '@graphql-tools/utils': - specifier: ^10.8.6 - version: 10.8.6(graphql@16.10.0) - '@grpc/grpc-js': - specifier: ^1.13.1 - version: 1.13.1 - '@grpc/proto-loader': - specifier: ^0.7.13 - version: 0.7.13 - '@jest/globals': - specifier: ^29.7.0 - version: 29.7.0(supports-color@10.0.0) - '@jest/types': - specifier: ^29.6.3 - version: 29.6.3 - '@jridgewell/gen-mapping': - specifier: ^0.3.8 - version: 0.3.8 - '@jridgewell/resolve-uri': - specifier: ^3.1.2 - version: 3.1.2 - '@jridgewell/sourcemap-codec': - specifier: ^1.5.0 - version: 1.5.0 - '@jridgewell/trace-mapping': - specifier: ^0.3.25 - version: 0.3.25 - '@mui/material': - specifier: ^6.4.8 - version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@nestjs/common': - specifier: ^11.0.12 - version: 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nodelib/fs.stat': - specifier: ^4.0.0 - version: 4.0.0 - '@nodelib/fs.walk': - specifier: ^3.0.1 - version: 3.0.1 - '@octokit/rest': - specifier: ^21.1.1 - version: 21.1.1 - '@opentelemetry/api': - specifier: ^1.9.0 - version: 1.9.0 - '@opentelemetry/core': - specifier: ^2.0.0 - version: 2.0.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': - specifier: ^0.200.0 - version: 0.200.0(@opentelemetry/api@1.9.0)(supports-color@10.0.0) - '@opentelemetry/semantic-conventions': - specifier: ^1.30.0 - version: 1.30.0 - '@popperjs/core': - specifier: ^2.11.8 - version: 2.11.8 - '@radix-ui/react-slot': - specifier: ^1.1.2 - version: 1.1.2(@types/react@19.0.12)(react@18.3.1) - '@rollup/pluginutils': - specifier: ^5.1.4 - version: 5.1.4(rollup@4.37.0) - '@sinclair/typebox': - specifier: ^0.34.31 - version: 0.34.31 - '@sindresorhus/is': - specifier: ^7.0.1 - version: 7.0.1 - '@smithy/config-resolver': - specifier: ^4.1.0 - version: 4.1.0 - '@smithy/core': - specifier: ^3.2.0 - version: 3.2.0 - '@smithy/fetch-http-handler': - specifier: ^5.0.2 - version: 5.0.2 - '@smithy/hash-node': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/invalid-dependency': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/is-array-buffer': - specifier: ^4.0.0 - version: 4.0.0 - '@smithy/middleware-content-length': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/middleware-endpoint': - specifier: ^4.1.0 - version: 4.1.0 - '@smithy/middleware-retry': - specifier: ^4.1.0 - version: 4.1.0 - '@smithy/middleware-serde': - specifier: ^4.0.3 - version: 4.0.3 - '@smithy/middleware-stack': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/node-config-provider': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/node-http-handler': - specifier: ^4.0.4 - version: 4.0.4 - '@smithy/property-provider': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/protocol-http': - specifier: ^5.1.0 - version: 5.1.0 - '@smithy/types': - specifier: ^4.2.0 - version: 4.2.0 - '@smithy/url-parser': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/util-base64': - specifier: ^4.0.0 - version: 4.0.0 - '@smithy/util-body-length-browser': - specifier: ^4.0.0 - version: 4.0.0 - '@smithy/util-body-length-node': - specifier: ^4.0.0 - version: 4.0.0 - '@smithy/util-buffer-from': - specifier: ^4.0.0 - version: 4.0.0 - '@smithy/util-defaults-mode-browser': - specifier: ^4.0.8 - version: 4.0.8 - '@smithy/util-defaults-mode-node': - specifier: ^4.0.8 - version: 4.0.8 - '@smithy/util-endpoints': - specifier: ^3.0.2 - version: 3.0.2 - '@smithy/util-middleware': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/util-retry': - specifier: ^4.0.2 - version: 4.0.2 - '@smithy/util-utf8': - specifier: ^4.0.0 - version: 4.0.0 - '@swc/core': - specifier: ^1.11.13 - version: 1.11.13(@swc/helpers@0.5.15) - '@swc/helpers': - specifier: ^0.5.15 - version: 0.5.15 - '@testing-library/jest-dom': - specifier: ^6.6.3 - version: 6.6.3 - '@testing-library/react': - specifier: ^16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - '@testing-library/user-event': - specifier: ^14.6.1 - version: 14.6.1(@testing-library/dom@10.4.0) - '@typescript-eslint/eslint-plugin': - specifier: ^8.37.0 - version: 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/parser': - specifier: ^8.37.0 - version: 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/scope-manager': - specifier: ^8.37.0 - version: 8.37.0 - '@typescript-eslint/type-utils': - specifier: ^8.37.0 - version: 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/types': - specifier: ^8.37.0 - version: 8.37.0 - '@typescript-eslint/typescript-estree': - specifier: ^8.37.0 - version: 8.37.0(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/utils': - specifier: ^8.37.0 - version: 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': - specifier: ^8.37.0 - version: 8.37.0 - JSONStream: - specifier: ^1.3.5 - version: 1.3.5 - abbrev: - specifier: ^3.0.0 - version: 3.0.0 - abort-controller: - specifier: ^3.0.0 - version: 3.0.0 - accepts: - specifier: ^1.3.8 - version: 1.3.8 - acorn: - specifier: ^8.14.1 - version: 8.14.1 - acorn-globals: - specifier: ^7.0.1 - version: 7.0.1 - acorn-jsx: - specifier: ^5.3.2 - version: 5.3.2(acorn@8.14.1) - acorn-walk: - specifier: ^8.3.4 - version: 8.3.4 - adm-zip: - specifier: ^0.5.16 - version: 0.5.16 - agent-base: - specifier: ^7.1.3 - version: 7.1.3 - ajv: - specifier: ^8.17.1 - version: 8.17.1 - ajv-formats: - specifier: ^3.0.1 - version: 3.0.1(ajv@8.17.1) - ajv-keywords: - specifier: ^5.1.0 - version: 5.1.0(ajv@8.17.1) - ansi-colors: - specifier: ^4.1.3 - version: 4.1.3 - ansi-escapes: - specifier: ^7.0.0 - version: 7.0.0 - ansi-regex: - specifier: ^6.1.0 - version: 6.1.0 - ansi-styles: - specifier: ^6.2.1 - version: 6.2.1 - any-promise: - specifier: ^1.3.0 - version: 1.3.0 - anymatch: - specifier: ^3.1.3 - version: 3.1.3 - archiver: - specifier: ^7.0.1 - version: 7.0.1 - arg: - specifier: ^5.0.2 - version: 5.0.2 - argparse: - specifier: ^2.0.1 - version: 2.0.1 - aria-query: - specifier: ^5.3.2 - version: 5.3.2 - array-buffer-byte-length: - specifier: ^1.0.2 - version: 1.0.2 - array-flatten: - specifier: ^3.0.0 - version: 3.0.0 - array-includes: - specifier: ^3.1.8 - version: 3.1.8 - array-union: - specifier: ^3.0.1 - version: 3.0.1 - array.prototype.findlast: - specifier: ^1.2.5 - version: 1.2.5 - array.prototype.findlastindex: - specifier: ^1.2.6 - version: 1.2.6 - array.prototype.flat: - specifier: ^1.3.3 - version: 1.3.3 - array.prototype.flatmap: - specifier: ^1.3.3 - version: 1.3.3 - array.prototype.tosorted: - specifier: ^1.1.4 - version: 1.1.4 - arraybuffer.prototype.slice: - specifier: ^1.0.4 - version: 1.0.4 - arrify: - specifier: ^3.0.0 - version: 3.0.0 - asap: - specifier: ^2.0.6 - version: 2.0.6 - assert: - specifier: ^2.1.0 - version: 2.1.0 - assertion-error: - specifier: ^2.0.1 - version: 2.0.1 - ast-types: - specifier: ^0.14.2 - version: 0.14.2 - astral-regex: - specifier: ^2.0.0 - version: 2.0.0 - async: - specifier: ^3.2.6 - version: 3.2.6 - async-retry: - specifier: ^1.3.3 - version: 1.3.3 - asynckit: - specifier: ^0.4.0 - version: 0.4.0 - atob: - specifier: ^2.1.2 - version: 2.1.2 - autoprefixer: - specifier: ^10.4.21 - version: 10.4.21(postcss@8.4.33) - available-typed-arrays: - specifier: ^1.0.7 - version: 1.0.7 - aws-sdk: - specifier: ^2.1692.0 - version: 2.1692.0 - axe-core: - specifier: ^4.10.3 - version: 4.10.3 - axios: - specifier: ^1.8.2 - version: 1.10.0(debug@4.4.0(supports-color@10.0.0)) - axobject-query: - specifier: ^4.1.0 - version: 4.1.0 - babel-jest: - specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - babel-loader: - specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.26.10(supports-color@10.0.0))(webpack@5.98.0) - babel-plugin-istanbul: - specifier: ^7.0.0 - version: 7.0.0(supports-color@10.0.0) - babel-plugin-jest-hoist: - specifier: ^29.6.3 - version: 29.6.3 - babel-preset-current-node-syntax: - specifier: ^1.1.0 - version: 1.1.0(@babel/core@7.26.10(supports-color@10.0.0)) - babel-preset-jest: - specifier: ^29.6.3 - version: 29.6.3(@babel/core@7.26.10(supports-color@10.0.0)) - balanced-match: - specifier: ^3.0.1 - version: 3.0.1 - base64-js: - specifier: ^1.5.1 - version: 1.5.1 - big.js: - specifier: ^6.2.2 - version: 6.2.2 - bignumber.js: - specifier: ^9.1.2 - version: 9.1.2 - binary-extensions: - specifier: ^3.0.0 - version: 3.0.0 - bindings: - specifier: ^1.5.0 - version: 1.5.0 - bl: - specifier: ^6.1.0 - version: 6.1.0 - bluebird: - specifier: ^3.7.2 - version: 3.7.2 - bn.js: - specifier: ^5.2.1 - version: 5.2.1 - body-parser: - specifier: ^1.20.3 - version: 1.20.3(supports-color@10.0.0) - boolbase: - specifier: ^1.0.0 - version: 1.0.0 - bowser: - specifier: ^2.11.0 - version: 2.11.0 - boxen: - specifier: ^8.0.1 - version: 8.0.1 - brace-expansion: - specifier: ^4.0.0 - version: 4.0.0 - braces: - specifier: ^3.0.3 - version: 3.0.3 - browserslist: - specifier: ^4.24.4 - version: 4.24.4 - bser: - specifier: ^2.1.1 - version: 2.1.1 - buffer: - specifier: ^6.0.3 - version: 6.0.3 - buffer-crc32: - specifier: ^1.0.0 - version: 1.0.0 - buffer-from: - specifier: ^1.1.2 - version: 1.1.2 - builtin-modules: - specifier: ^5.0.0 - version: 5.0.0 - busboy: - specifier: ^1.6.0 - version: 1.6.0 - bytes: - specifier: ^3.1.2 - version: 3.1.2 - cac: - specifier: ^6.7.14 - version: 6.7.14 - cacache: - specifier: ^19.0.1 - version: 19.0.1 - call-bind: - specifier: ^1.0.8 - version: 1.0.8 - callsites: - specifier: ^4.2.0 - version: 4.2.0 - camelcase: - specifier: ^8.0.0 - version: 8.0.0 - caniuse-lite: - specifier: ^1.0.30001707 - version: 1.0.30001707 - caseless: - specifier: ^0.12.0 - version: 0.12.0 - chai: - specifier: ^5.2.0 - version: 5.2.0 - chalk: - specifier: ^5.4.1 - version: 5.4.1 - change-case: - specifier: ^5.4.4 - version: 5.4.4 - char-regex: - specifier: ^2.0.2 - version: 2.0.2 - chardet: - specifier: ^2.1.0 - version: 2.1.0 - cheerio: - specifier: ^1.0.0 - version: 1.0.0 - chokidar: - specifier: ^4.0.3 - version: 4.0.3 - chownr: - specifier: ^3.0.0 - version: 3.0.0 - chrome-trace-event: - specifier: ^1.0.4 - version: 1.0.4 - cjs-module-lexer: - specifier: ^2.1.0 - version: 2.1.0 - classnames: - specifier: ^2.5.1 - version: 2.5.1 - clean-css: - specifier: ^5.3.3 - version: 5.3.3 - clean-stack: - specifier: ^5.2.0 - version: 5.2.0 - cli-cursor: - specifier: ^5.0.0 - version: 5.0.0 - cli-spinners: - specifier: ^3.2.0 - version: 3.2.0 - cli-table3: - specifier: ^0.6.5 - version: 0.6.5 - cli-truncate: - specifier: ^4.0.0 - version: 4.0.0 - cli-width: - specifier: ^4.1.0 - version: 4.1.0 - cliui: - specifier: ^9.0.1 - version: 9.0.1 - clone: - specifier: ^2.1.2 - version: 2.1.2 - clone-deep: - specifier: ^4.0.1 - version: 4.0.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - co: - specifier: ^4.6.0 - version: 4.6.0 - collect-v8-coverage: - specifier: ^1.0.2 - version: 1.0.2 - color: - specifier: ^5.0.0 - version: 5.0.0 - color-convert: - specifier: ^3.0.1 - version: 3.0.1 - color-name: - specifier: ^2.0.0 - version: 2.0.0 - color-string: - specifier: ^2.0.1 - version: 2.0.1 - colorette: - specifier: ^2.0.20 - version: 2.0.20 - colors: - specifier: ^1.4.0 - version: 1.4.0 - combined-stream: - specifier: ^1.0.8 - version: 1.0.8 - commander: - specifier: ^13.1.0 - version: 13.1.0 - commondir: - specifier: ^1.0.1 - version: 1.0.1 - component-emitter: - specifier: ^2.0.0 - version: 2.0.0 - compression: - specifier: ^1.8.0 - version: 1.8.0(supports-color@10.0.0) - concat-map: - specifier: ^0.0.2 - version: 0.0.2 - concat-stream: - specifier: ^2.0.0 - version: 2.0.0 - configstore: - specifier: ^7.0.0 - version: 7.0.0 - connect: - specifier: ^3.7.0 - version: 3.7.0(supports-color@10.0.0) - consola: - specifier: ^3.4.2 - version: 3.4.2 - content-disposition: - specifier: ^0.5.4 - version: 0.5.4 - content-type: - specifier: ^1.0.5 - version: 1.0.5 - convert-source-map: - specifier: ^2.0.0 - version: 2.0.0 - cookie: - specifier: ^1.0.2 - version: 1.0.2 - cookie-parser: - specifier: ^1.4.7 - version: 1.4.7 - cookie-signature: - specifier: ^1.2.2 - version: 1.2.2 - core-js: - specifier: ^3.41.0 - version: 3.41.0 - core-js-compat: - specifier: ^3.41.0 - version: 3.41.0 - core-util-is: - specifier: ^1.0.3 - version: 1.0.3 - cors: - specifier: ^2.8.5 - version: 2.8.5 - cosmiconfig: - specifier: ^9.0.0 - version: 9.0.0(typescript@5.8.2) - create-require: - specifier: ^1.1.1 - version: 1.1.1 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - cross-fetch: - specifier: ^4.1.0 - version: 4.1.0(encoding@0.1.13) - cross-spawn: - specifier: ^7.0.6 - version: 7.0.6 - crypto-js: - specifier: ^4.2.0 - version: 4.2.0 - css-loader: - specifier: ^7.1.2 - version: 7.1.2(webpack@5.98.0) - css-select: - specifier: ^5.1.0 - version: 5.1.0 - css-tree: - specifier: ^3.1.0 - version: 3.1.0 - css-what: - specifier: ^6.1.0 - version: 6.1.0 - cssesc: - specifier: ^3.0.0 - version: 3.0.0 - cssnano: - specifier: ^7.0.6 - version: 7.0.6(postcss@8.4.33) - cssom: - specifier: ^0.5.0 - version: 0.5.0 - cssstyle: - specifier: ^4.3.0 - version: 4.3.0 - d3-array: - specifier: ^3.2.4 - version: 3.2.4 - d3-scale: - specifier: ^4.0.2 - version: 4.0.2 - data-uri-to-buffer: - specifier: ^6.0.2 - version: 6.0.2 - data-urls: - specifier: ^5.0.0 - version: 5.0.0 - data-view-buffer: - specifier: ^1.0.2 - version: 1.0.2 - data-view-byte-length: - specifier: ^1.0.2 - version: 1.0.2 - data-view-byte-offset: - specifier: ^1.0.1 - version: 1.0.1 - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - dateformat: - specifier: ^5.0.3 - version: 5.0.3 - dayjs: - specifier: ^1.11.13 - version: 1.11.13 - debug: - specifier: ^4.4.0 - version: 4.4.0(supports-color@10.0.0) - decamelize: - specifier: ^6.0.0 - version: 6.0.0 - decimal.js: - specifier: 10.4.3 - version: 10.4.3 - decompress-response: - specifier: ^9.0.0 - version: 9.0.0 - dedent: - specifier: ^1.5.3 - version: 1.5.3(babel-plugin-macros@3.1.0) - deep-eql: - specifier: ^5.0.2 - version: 5.0.2 - deep-equal: - specifier: ^2.2.3 - version: 2.2.3 - deep-extend: - specifier: ^0.6.0 - version: 0.6.0 - deep-is: - specifier: ^0.1.4 - version: 0.1.4 - deepmerge: - specifier: ^4.3.1 - version: 4.3.1 - defaults: - specifier: ^3.0.0 - version: 3.0.0 - define-data-property: - specifier: ^1.1.4 - version: 1.1.4 - define-lazy-prop: - specifier: ^3.0.0 - version: 3.0.0 - define-properties: - specifier: ^1.2.1 - version: 1.2.1 - delayed-stream: - specifier: ^1.0.0 - version: 1.0.0 - depd: - specifier: ^2.0.0 - version: 2.0.0 - destroy: - specifier: ^1.2.0 - version: 1.2.0 - detect-indent: - specifier: ^7.0.1 - version: 7.0.1 - detect-libc: - specifier: ^2.0.3 - version: 2.0.3 - detect-newline: - specifier: ^4.0.1 - version: 4.0.1 - diff: - specifier: ^7.0.0 - version: 7.0.0 - diff-sequences: - specifier: ^29.6.3 - version: 29.6.3 - dir-glob: - specifier: ^3.0.1 - version: 3.0.1 - doctrine: - specifier: ^3.0.0 - version: 3.0.0 - dom-accessibility-api: - specifier: ^0.7.0 - version: 0.7.0 - dom-serializer: - specifier: ^2.0.0 - version: 2.0.0 - domelementtype: - specifier: ^2.3.0 - version: 2.3.0 - domhandler: - specifier: ^5.0.3 - version: 5.0.3 - dompurify: - specifier: ^3.2.4 - version: 3.2.4 - domutils: - specifier: ^3.2.2 - version: 3.2.2 - dot-prop: - specifier: ^9.0.0 - version: 9.0.0 - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - dotenv-expand: - specifier: ^12.0.1 - version: 12.0.1 - duplexer: - specifier: ^0.1.2 - version: 0.1.2 - eastasianwidth: - specifier: ^0.3.0 - version: 0.3.0 - ee-first: - specifier: ^1.1.1 - version: 1.1.1 - ejs: - specifier: ^3.1.10 - version: 3.1.10 - electron-to-chromium: - specifier: ^1.5.123 - version: 1.5.123 - elliptic: - specifier: ^6.6.1 - version: 6.6.1 - emittery: - specifier: ^1.1.0 - version: 1.1.0 - emoji-regex: - specifier: ^10.4.0 - version: 10.4.0 - encodeurl: - specifier: ^2.0.0 - version: 2.0.0 - encoding: - specifier: ^0.1.13 - version: 0.1.13 - end-of-stream: - specifier: ^1.4.4 - version: 1.4.4 - enhanced-resolve: - specifier: ^5.17.1 - version: 5.18.1 - enquirer: - specifier: ^2.4.1 - version: 2.4.1 - entities: - specifier: ^6.0.0 - version: 6.0.0 - env-paths: - specifier: ^3.0.0 - version: 3.0.0 - envinfo: - specifier: ^7.14.0 - version: 7.14.0 - error-ex: - specifier: ^1.3.2 - version: 1.3.2 - error-stack-parser: - specifier: ^2.1.4 - version: 2.1.4 - es-abstract: - specifier: ^1.23.9 - version: 1.23.9 - es-define-property: - specifier: ^1.0.1 - version: 1.0.1 - es-errors: - specifier: ^1.3.0 - version: 1.3.0 - es-iterator-helpers: - specifier: ^1.2.1 - version: 1.2.1 - es-module-lexer: - specifier: ^1.6.0 - version: 1.6.0 - es-object-atoms: - specifier: ^1.1.1 - version: 1.1.1 - es-set-tostringtag: - specifier: ^2.1.0 - version: 2.1.0 - es-shim-unscopables: - specifier: ^1.1.0 - version: 1.1.0 - es-to-primitive: - specifier: ^1.3.0 - version: 1.3.0 - es6-promise: - specifier: ^4.2.8 - version: 4.2.8 - esbuild: - specifier: ^0.25.1 - version: 0.25.1 - escalade: - specifier: ^3.2.0 - version: 3.2.0 - escape-html: - specifier: ^1.0.3 - version: 1.0.3 - escape-string-regexp: - specifier: ^5.0.0 - version: 5.0.0 - eslint: - specifier: ^9.31.0 - version: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - eslint-config-prettier: - specifier: ^10.1.8 - version: 10.1.8(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)) - eslint-import-resolver-node: - specifier: ^0.3.9 - version: 0.3.9(supports-color@10.0.0) - eslint-import-resolver-typescript: - specifier: ^4.4.4 - version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) - eslint-plugin-import: - specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) - eslint-plugin-jest: - specifier: ^29.0.1 - version: 29.0.1(@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(supports-color@10.0.0)(typescript@5.8.2) - eslint-plugin-prettier: - specifier: ^5.5.3 - version: 5.5.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(prettier@3.5.3) - eslint-plugin-react: - specifier: ^7.37.5 - version: 7.37.5(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)) - eslint-scope: - specifier: ^8.3.0 - version: 8.3.0 - eslint-visitor-keys: - specifier: ^4.2.0 - version: 4.2.0 - espree: - specifier: ^10.3.0 - version: 10.3.0 - esprima: - specifier: ^4.0.1 - version: 4.0.1 - esquery: - specifier: ^1.6.0 - version: 1.6.0 - esrecurse: - specifier: ^4.3.0 - version: 4.3.0 - estraverse: - specifier: ^5.3.0 - version: 5.3.0 - estree-walker: - specifier: ^3.0.3 - version: 3.0.3 - etag: - specifier: ^1.8.1 - version: 1.8.1 - event-target-shim: - specifier: ^6.0.2 - version: 6.0.2 - eventemitter2: - specifier: ^6.4.9 - version: 6.4.9 - eventemitter3: - specifier: ^5.0.1 - version: 5.0.1 - events: - specifier: ^3.3.0 - version: 3.3.0 - execa: - specifier: ^9.5.2 - version: 9.5.2 - exit: - specifier: ^0.1.2 - version: 0.1.2 - expect: - specifier: ^29.7.0 - version: 29.7.0 - express: - specifier: ^4.21.2 - version: 4.21.2(supports-color@10.0.0) - extend: - specifier: ^3.0.2 - version: 3.0.2 - extend-shallow: - specifier: ^3.0.2 - version: 3.0.2 - external-editor: - specifier: ^3.1.0 - version: 3.1.0 - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 - fast-diff: - specifier: ^1.3.0 - version: 1.3.0 - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 - fast-json-stable-stringify: - specifier: ^2.1.0 - version: 2.1.0 - fast-levenshtein: - specifier: ^3.0.0 - version: 3.0.0 - fast-xml-parser: - specifier: ^5.0.9 - version: 5.0.9 - fastq: - specifier: ^1.19.1 - version: 1.19.1 - fb-watchman: - specifier: ^2.0.2 - version: 2.0.2 - figlet: - specifier: ^1.8.0 - version: 1.8.0 - file-entry-cache: - specifier: ^10.0.7 - version: 10.0.7 - file-type: - specifier: ^20.4.1 - version: 20.4.1(supports-color@10.0.0) - filesize: - specifier: ^10.1.6 - version: 10.1.6 - fill-range: - specifier: ^7.1.1 - version: 7.1.1 - finalhandler: - specifier: ^2.1.0 - version: 2.1.0(supports-color@10.0.0) - find-cache-dir: - specifier: ^5.0.0 - version: 5.0.0 - find-up: - specifier: ^7.0.0 - version: 7.0.0 - flat: - specifier: ^6.0.1 - version: 6.0.1 - flat-cache: - specifier: ^6.1.7 - version: 6.1.7 - flatted: - specifier: ^3.3.3 - version: 3.3.3 - follow-redirects: - specifier: ^1.15.9 - version: 1.15.9(debug@4.4.0(supports-color@10.0.0)) - for-each: - specifier: ^0.3.5 - version: 0.3.5 - for-in: - specifier: ^1.0.2 - version: 1.0.2 - foreground-child: - specifier: ^3.3.1 - version: 3.3.1 - form-data: - specifier: ^4.0.2 - version: 4.0.2 - forwarded: - specifier: ^0.2.0 - version: 0.2.0 - fraction.js: - specifier: ^5.2.1 - version: 5.2.1 - framer-motion: - specifier: ^12.5.0 - version: 12.6.0(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - fresh: - specifier: ^0.5.2 - version: 0.5.2 - fs-extra: - specifier: ^11.3.0 - version: 11.3.0 - fs-minipass: - specifier: ^3.0.3 - version: 3.0.3 - fs.realpath: - specifier: ^1.0.0 - version: 1.0.0 - function-bind: - specifier: ^1.1.2 - version: 1.1.2 - function.prototype.name: - specifier: ^1.1.8 - version: 1.1.8 - functions-have-names: - specifier: ^1.2.3 - version: 1.2.3 - gensync: - specifier: 1.0.0-beta.2 - version: 1.0.0-beta.2 - get-caller-file: - specifier: ^2.0.5 - version: 2.0.5 - get-intrinsic: - specifier: ^1.3.0 - version: 1.3.0 - get-package-type: - specifier: ^0.1.0 - version: 0.1.0 - get-stdin: - specifier: ^9.0.0 - version: 9.0.0 - get-stream: - specifier: ^9.0.1 - version: 9.0.1 - get-symbol-description: - specifier: ^1.1.0 - version: 1.1.0 - get-tsconfig: - specifier: ^4.10.0 - version: 4.10.0 - get-value: - specifier: ^4.0.1 - version: 4.0.1 - glob: - specifier: ^11.0.1 - version: 11.0.1 - glob-parent: - specifier: ^6.0.2 - version: 6.0.2 - global-prefix: - specifier: ^4.0.0 - version: 4.0.0 - globals: - specifier: ^16.0.0 - version: 16.0.0 - globalthis: - specifier: ^1.0.4 - version: 1.0.4 - globby: - specifier: ^14.1.0 - version: 14.1.0 - google-auth-library: - specifier: ^9.15.1 - version: 9.15.1(encoding@0.1.13)(supports-color@10.0.0) - gopd: - specifier: ^1.2.0 - version: 1.2.0 - got: - specifier: ^14.4.6 - version: 14.4.6 - graceful-fs: - specifier: ^4.2.11 - version: 4.2.11 - graphemer: - specifier: ^1.4.0 - version: 1.4.0 - graphql: - specifier: ^16.10.0 - version: 16.10.0 - handlebars: - specifier: ^4.7.8 - version: 4.7.8 - has-bigints: - specifier: ^1.1.0 - version: 1.1.0 - has-flag: - specifier: ^5.0.1 - version: 5.0.1 - has-property-descriptors: - specifier: ^1.0.2 - version: 1.0.2 - has-proto: - specifier: ^1.2.0 - version: 1.2.0 - has-symbols: - specifier: ^1.1.0 - version: 1.1.0 - has-tostringtag: - specifier: ^1.0.2 - version: 1.0.2 - hash.js: - specifier: ^1.1.7 - version: 1.1.7 - hasown: - specifier: ^2.0.2 - version: 2.0.2 - he: - specifier: ^1.2.0 - version: 1.2.0 - highlight.js: - specifier: ^11.11.1 - version: 11.11.1 - hosted-git-info: - specifier: ^8.0.2 - version: 8.0.2 - html-entities: - specifier: ^2.5.3 - version: 2.5.3 - html-escaper: - specifier: ^3.0.3 - version: 3.0.3 - html-webpack-plugin: - specifier: ^5.6.3 - version: 5.6.3(webpack@5.98.0) - htmlparser2: - specifier: ^10.0.0 - version: 10.0.0 - http-cache-semantics: - specifier: ^4.1.1 - version: 4.1.1 - http-errors: - specifier: ^2.0.0 - version: 2.0.0 - http-proxy-agent: - specifier: ^7.0.2 - version: 7.0.2(supports-color@10.0.0) - http-proxy-middleware: - specifier: ^3.0.5 - version: 3.0.5(supports-color@10.0.0) - http-signature: - specifier: ^1.4.0 - version: 1.4.0 - https-proxy-agent: - specifier: ^7.0.6 - version: 7.0.6(supports-color@10.0.0) - husky: - specifier: ^9.1.7 - version: 9.1.7 - i18next: - specifier: ^24.2.3 - version: 24.2.3(typescript@5.8.2) - iconv-lite: - specifier: ^0.6.3 - version: 0.6.3 - ieee754: - specifier: ^1.2.1 - version: 1.2.1 - ignore: - specifier: ^7.0.3 - version: 7.0.3 - image-size: - specifier: ^2.0.2 - version: 2.0.2 - immer: - specifier: ^10.1.1 - version: 10.1.1 - immutable: - specifier: ^5.0.3 - version: 5.0.3 - import-fresh: - specifier: ^3.3.1 - version: 3.3.1 - import-local: - specifier: ^3.2.0 - version: 3.2.0 - imurmurhash: - specifier: ^0.1.4 - version: 0.1.4 - indent-string: - specifier: ^5.0.0 - version: 5.0.0 - inherits: - specifier: ^2.0.4 - version: 2.0.4 - ini: - specifier: ^5.0.0 - version: 5.0.0 - inquirer: - specifier: ^12.5.0 - version: 12.5.0(@types/node@22.13.13) - internal-slot: - specifier: ^1.1.0 - version: 1.1.0 - interpret: - specifier: ^3.1.1 - version: 3.1.1 - ioredis: - specifier: ^5.6.0 - version: 5.6.0(supports-color@10.0.0) - ip-address: - specifier: ^10.0.1 - version: 10.0.1 - ipaddr.js: - specifier: 2.2.0 - version: 2.2.0 - is-array-buffer: - specifier: ^3.0.5 - version: 3.0.5 - is-arrayish: - specifier: ^0.3.2 - version: 0.3.2 - is-bigint: - specifier: ^1.1.0 - version: 1.1.0 - is-binary-path: - specifier: ^3.0.0 - version: 3.0.0 - is-callable: - specifier: ^1.2.7 - version: 1.2.7 - is-ci: - specifier: ^4.1.0 - version: 4.1.0 - is-core-module: - specifier: ^2.16.1 - version: 2.16.1 - is-data-view: - specifier: ^1.0.2 - version: 1.0.2 - is-docker: - specifier: ^3.0.0 - version: 3.0.0 - is-extendable: - specifier: ^1.0.1 - version: 1.0.1 - is-extglob: - specifier: ^2.1.1 - version: 2.1.1 - is-finalizationregistry: - specifier: ^1.1.1 - version: 1.1.1 - is-fullwidth-code-point: - specifier: ^5.0.0 - version: 5.0.0 - is-generator-fn: - specifier: ^3.0.0 - version: 3.0.0 - is-generator-function: - specifier: ^1.1.0 - version: 1.1.0 - is-glob: - specifier: ^4.0.3 - version: 4.0.3 - is-interactive: - specifier: ^2.0.0 - version: 2.0.0 - is-map: - specifier: ^2.0.3 - version: 2.0.3 - is-negative-zero: - specifier: ^2.0.3 - version: 2.0.3 - is-number: - specifier: ^7.0.0 - version: 7.0.0 - is-path-inside: - specifier: ^4.0.0 - version: 4.0.0 - is-plain-obj: - specifier: ^4.1.0 - version: 4.1.0 - is-plain-object: - specifier: ^5.0.0 - version: 5.0.0 - is-regex: - specifier: ^1.2.1 - version: 1.2.1 - is-set: - specifier: ^2.0.3 - version: 2.0.3 - is-shared-array-buffer: - specifier: ^1.0.4 - version: 1.0.4 - is-stream: - specifier: ^4.0.1 - version: 4.0.1 - is-typed-array: - specifier: ^1.1.15 - version: 1.1.15 - is-unicode-supported: - specifier: ^2.1.0 - version: 2.1.0 - is-weakmap: - specifier: ^2.0.2 - version: 2.0.2 - is-weakref: - specifier: ^1.1.1 - version: 1.1.1 - is-weakset: - specifier: ^2.0.4 - version: 2.0.4 - is-wsl: - specifier: ^3.1.0 - version: 3.1.0 - isarray: - specifier: ^2.0.5 - version: 2.0.5 - isexe: - specifier: ^3.1.1 - version: 3.1.1 - isobject: - specifier: ^4.0.0 - version: 4.0.0 - istanbul-lib-coverage: - specifier: ^3.2.2 - version: 3.2.2 - istanbul-lib-instrument: - specifier: ^6.0.3 - version: 6.0.3(supports-color@10.0.0) - istanbul-lib-report: - specifier: ^3.0.1 - version: 3.0.1 - istanbul-lib-source-maps: - specifier: ^5.0.6 - version: 5.0.6(supports-color@10.0.0) - istanbul-reports: - specifier: ^3.1.7 - version: 3.1.7 - iterator.prototype: - specifier: ^1.1.5 - version: 1.1.5 - jackspeak: - specifier: ^4.1.0 - version: 4.1.0 - jake: - specifier: ^10.9.2 - version: 10.9.2 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-changed-files: - specifier: ^29.7.0 - version: 29.7.0 - jest-circus: - specifier: ^29.7.0 - version: 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0) - jest-cli: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-config: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-diff: - specifier: ^29.7.0 - version: 29.7.0 - jest-docblock: - specifier: ^29.7.0 - version: 29.7.0 - jest-each: - specifier: ^29.7.0 - version: 29.7.0 - jest-environment-jsdom: - specifier: ^29.7.0 - version: 29.7.0(supports-color@10.0.0) - jest-environment-node: - specifier: ^29.7.0 - version: 29.7.0 - jest-get-type: - specifier: ^29.6.3 - version: 29.6.3 - jest-haste-map: - specifier: ^29.7.0 - version: 29.7.0 - jest-leak-detector: - specifier: ^29.7.0 - version: 29.7.0 - jest-matcher-utils: - specifier: ^29.7.0 - version: 29.7.0 - jest-message-util: - specifier: ^29.7.0 - version: 29.7.0 - jest-mock: - specifier: ^29.7.0 - version: 29.7.0 - jest-pnp-resolver: - specifier: ^1.2.3 - version: 1.2.3(jest-resolve@29.7.0) - jest-regex-util: - specifier: ^29.6.3 - version: 29.6.3 - jest-resolve: - specifier: ^29.7.0 - version: 29.7.0 - jest-resolve-dependencies: - specifier: ^29.7.0 - version: 29.7.0(supports-color@10.0.0) - jest-runner: - specifier: ^29.7.0 - version: 29.7.0(supports-color@10.0.0) - jest-runtime: - specifier: ^29.7.0 - version: 29.7.0(supports-color@10.0.0) - jest-snapshot: - specifier: ^29.7.0 - version: 29.7.0(supports-color@10.0.0) - jest-util: - specifier: ^29.7.0 - version: 29.7.0 - jest-validate: - specifier: ^29.7.0 - version: 29.7.0 - jest-watcher: - specifier: ^29.7.0 - version: 29.7.0 - jest-worker: - specifier: ^29.7.0 - version: 29.7.0 - jiti: - specifier: ^2.4.2 - version: 2.4.2 - joi: - specifier: ^17.13.3 - version: 17.13.3 - jose: - specifier: ^6.0.10 - version: 6.0.10 - jquery: - specifier: ^3.7.1 - version: 3.7.1 - js-cookie: - specifier: ^3.0.5 - version: 3.0.5 - js-tokens: - specifier: ^9.0.1 - version: 9.0.1 - js-yaml: - specifier: ^4.1.0 - version: 4.1.0 - jsbn: - specifier: ^1.1.0 - version: 1.1.0 - jsdom: - specifier: ^26.0.0 - version: 26.0.0(supports-color@10.0.0) - jsesc: - specifier: ^3.1.0 - version: 3.1.0 - json-buffer: - specifier: ^3.0.1 - version: 3.0.1 - json-parse-better-errors: - specifier: ^1.0.2 - version: 1.0.2 - json-parse-even-better-errors: - specifier: ^4.0.0 - version: 4.0.0 - json-schema-traverse: - specifier: ^1.0.0 - version: 1.0.0 - json-stable-stringify-without-jsonify: - specifier: ^1.0.1 - version: 1.0.1 - json5: - specifier: ^2.2.3 - version: 2.2.3 - jsonc-parser: - specifier: ^3.3.1 - version: 3.3.1 - jsonfile: - specifier: ^6.1.0 - version: 6.1.0 - jsonparse: - specifier: ^1.3.1 - version: 1.3.1 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 - jsx-ast-utils: - specifier: ^3.3.5 - version: 3.3.5 - jszip: - specifier: ^3.10.1 - version: 3.10.1 - jws: - specifier: ^4.0.0 - version: 4.0.0 - jwt-decode: - specifier: ^4.0.0 - version: 4.0.0 - keyv: - specifier: ^5.3.2 - version: 5.3.2 - kind-of: - specifier: ^6.0.3 - version: 6.0.3 - kleur: - specifier: ^4.1.5 - version: 4.1.5 - koa: - specifier: ^2.16.1 - version: 2.16.1(supports-color@10.0.0) - less: - specifier: ^4.2.2 - version: 4.2.2 - less-loader: - specifier: ^12.2.0 - version: 12.2.0(less@4.2.2)(webpack@5.98.0) - levn: - specifier: ^0.4.1 - version: 0.4.1 - lilconfig: - specifier: ^3.1.3 - version: 3.1.3 - lines-and-columns: - specifier: ^2.0.4 - version: 2.0.4 - lint-staged: - specifier: ^15.5.0 - version: 15.5.0(supports-color@10.0.0) - listr2: - specifier: ^8.2.5 - version: 8.2.5 - load-json-file: - specifier: ^7.0.1 - version: 7.0.1 - loader-utils: - specifier: ^3.3.1 - version: 3.3.1 - locate-path: - specifier: ^7.2.0 - version: 7.2.0 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 - lodash.camelcase: - specifier: ^4.3.0 - version: 4.3.0 - lodash.isequal: - specifier: ^4.5.0 - version: 4.5.0 - lodash.isplainobject: - specifier: ^4.0.6 - version: 4.0.6 - lodash.isstring: - specifier: ^4.0.1 - version: 4.0.1 - lodash.merge: - specifier: ^4.6.2 - version: 4.6.2 - log-symbols: - specifier: ^7.0.0 - version: 7.0.0 - log-update: - specifier: ^6.1.0 - version: 6.1.0 - log4js: - specifier: ^6.9.1 - version: 6.9.1(supports-color@10.0.0) - loglevel: - specifier: ^1.9.2 - version: 1.9.2 - long: - specifier: ^5.3.1 - version: 5.3.1 - loose-envify: - specifier: ^1.4.0 - version: 1.4.0 - lowercase-keys: - specifier: ^3.0.0 - version: 3.0.0 - lru-cache: - specifier: ^11.1.0 - version: 11.1.0 - luxon: - specifier: ^3.5.0 - version: 3.6.0 - magic-string: - specifier: ^0.30.17 - version: 0.30.17 - make-dir: - specifier: ^5.0.0 - version: 5.0.0 - make-error: - specifier: ^1.3.6 - version: 1.3.6 - map-obj: - specifier: ^5.0.2 - version: 5.0.2 - markdown-it: - specifier: ^14.1.0 - version: 14.1.0 - marked: - specifier: ^15.0.7 - version: 15.0.7 - md5: - specifier: ^2.3.0 - version: 2.3.0 - mdn-data: - specifier: ^2.18.0 - version: 2.18.0 - media-typer: - specifier: ^1.1.0 - version: 1.1.0 - memfs: - specifier: ^4.17.0 - version: 4.17.0 - meow: - specifier: ^13.2.0 - version: 13.2.0 - merge-descriptors: - specifier: ^2.0.0 - version: 2.0.0 - merge-stream: - specifier: ^2.0.0 - version: 2.0.0 - merge2: - specifier: ^1.4.1 - version: 1.4.1 - methods: - specifier: ^1.1.2 - version: 1.1.2 - micromatch: - specifier: ^4.0.8 - version: 4.0.8 - mime: - specifier: ^4.0.6 - version: 4.0.6 - mime-db: - specifier: ^1.54.0 - version: 1.54.0 - mime-types: - specifier: ^2.1.35 - version: 2.1.35 - mini-css-extract-plugin: - specifier: ^2.9.2 - version: 2.9.2(webpack@5.98.0) - minimalistic-assert: - specifier: ^1.0.1 - version: 1.0.1 - minimatch: - specifier: ^10.0.1 - version: 10.0.1 - minimist: - specifier: ^1.2.8 - version: 1.2.8 - minipass: - specifier: ^7.1.2 - version: 7.1.2 - minizlib: - specifier: ^3.0.1 - version: 3.0.1 - mitt: - specifier: ^3.0.1 - version: 3.0.1 - mkdirp: - specifier: ^3.0.1 - version: 3.0.1 - mocha: - specifier: ^11.1.0 - version: 11.1.0 - moment: - specifier: ^2.30.1 - version: 2.30.1 - moment-timezone: - specifier: ^0.5.48 - version: 0.5.48 - mongodb: - specifier: ^6.15.0 - version: 6.15.0(socks@2.8.4) - mongoose: - specifier: ^8.13.0 - version: 8.13.0(socks@2.8.4)(supports-color@10.0.0) - morgan: - specifier: ^1.10.0 - version: 1.10.0(supports-color@10.0.0) - ms: - specifier: ^2.1.3 - version: 2.1.3 - multer: - specifier: ^2.0.2 - version: 2.0.2 - mustache: - specifier: ^4.2.0 - version: 4.2.0 - mute-stream: - specifier: ^2.0.0 - version: 2.0.0 - mz: - specifier: ^2.7.0 - version: 2.7.0 - nan: - specifier: ^2.22.2 - version: 2.22.2 - nanoid: - specifier: ^5.1.5 - version: 5.1.5 - natural-compare: - specifier: ^1.4.0 - version: 1.4.0 - negotiator: - specifier: ^1.0.0 - version: 1.0.0 - neo-async: - specifier: ^2.6.2 - version: 2.6.2 - next: - specifier: ^15.4.8 - version: 15.5.9(@babel/core@7.26.10(supports-color@10.0.0))(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)(sass@1.86.0) - nice-try: - specifier: ^3.0.1 - version: 3.0.1 - node-addon-api: - specifier: ^8.3.1 - version: 8.3.1 - node-fetch: - specifier: ^3.3.2 - version: 3.3.2 - node-forge: - specifier: ^1.3.1 - version: 1.3.1 - node-gyp-build: - specifier: ^4.8.4 - version: 4.8.4 - node-int64: - specifier: ^0.4.0 - version: 0.4.0 - nodemailer: - specifier: ^6.10.0 - version: 6.10.0 - nodemon: - specifier: ^3.1.9 - version: 3.1.9 - nopt: - specifier: ^8.1.0 - version: 8.1.0 - normalize-package-data: - specifier: ^7.0.0 - version: 7.0.0 - normalize-path: - specifier: ^3.0.0 - version: 3.0.0 - normalize-range: - specifier: ^0.1.2 - version: 0.1.2 - normalize-url: - specifier: ^8.0.1 - version: 8.0.1 - npm: - specifier: ^11.2.0 - version: 11.2.0 - npm-package-arg: - specifier: ^12.0.2 - version: 12.0.2 - npm-run-path: - specifier: ^6.0.0 - version: 6.0.0 - nth-check: - specifier: ^2.1.1 - version: 2.1.1 - nwsapi: - specifier: ^2.2.19 - version: 2.2.19 - object-assign: - specifier: ^4.1.1 - version: 4.1.1 - object-hash: - specifier: ^3.0.0 - version: 3.0.0 - object-inspect: - specifier: ^1.13.4 - version: 1.13.4 - object-keys: - specifier: ^1.1.1 - version: 1.1.1 - object.assign: - specifier: ^4.1.7 - version: 4.1.7 - object.entries: - specifier: ^1.1.9 - version: 1.1.9 - object.fromentries: - specifier: ^2.0.8 - version: 2.0.8 - object.groupby: - specifier: ^1.0.3 - version: 1.0.3 - object.values: - specifier: ^1.2.1 - version: 1.2.1 - on-finished: - specifier: ^2.4.1 - version: 2.4.1 - on-headers: - specifier: ^1.0.2 - version: 1.0.2 - once: - specifier: ^1.4.0 - version: 1.4.0 - onetime: - specifier: ^7.0.0 - version: 7.0.0 - open: - specifier: ^10.1.0 - version: 10.1.0 - optionator: - specifier: ^0.9.4 - version: 0.9.4 - ora: - specifier: ^8.2.0 - version: 8.2.0 - p-cancelable: - specifier: ^4.0.1 - version: 4.0.1 - p-limit: - specifier: ^6.2.0 - version: 6.2.0 - p-locate: - specifier: ^6.0.0 - version: 6.0.0 - p-map: - specifier: ^7.0.3 - version: 7.0.3 - p-retry: - specifier: ^6.2.1 - version: 6.2.1 - p-try: - specifier: ^3.0.0 - version: 3.0.0 - pako: - specifier: ^2.1.0 - version: 2.1.0 - parse-json: - specifier: ^8.2.0 - version: 8.2.0 - parse5: - specifier: ^7.2.1 - version: 7.2.1 - parseurl: - specifier: ^1.3.3 - version: 1.3.3 - path: - specifier: ^0.12.7 - version: 0.12.7 - path-browserify: - specifier: ^1.0.1 - version: 1.0.1 - path-exists: - specifier: ^5.0.0 - version: 5.0.0 - path-key: - specifier: ^4.0.0 - version: 4.0.0 - path-parse: - specifier: ^1.0.7 - version: 1.0.7 - path-scurry: - specifier: ^2.0.0 - version: 2.0.0 - path-to-regexp: - specifier: ^8.2.0 - version: 8.2.0 - path-type: - specifier: ^6.0.0 - version: 6.0.0 - pathe: - specifier: ^2.0.3 - version: 2.0.3 - performance-now: - specifier: ^2.1.0 - version: 2.1.0 - pg: - specifier: ^8.14.1 - version: 8.14.1 - picocolors: - specifier: ^1.1.1 - version: 1.1.1 - picomatch: - specifier: ^4.0.2 - version: 4.0.2 - pify: - specifier: ^6.1.0 - version: 6.1.0 - pino: - specifier: ^9.6.0 - version: 9.6.0 - pirates: - specifier: ^4.0.6 - version: 4.0.6 - pkg-dir: - specifier: ^8.0.0 - version: 8.0.0 - playwright: - specifier: ^1.51.1 - version: 1.51.1 - pluralize: - specifier: ^8.0.0 - version: 8.0.0 - pnpm: - specifier: ^11.3.0 - version: 11.3.0 - polished: - specifier: ^4.3.1 - version: 4.3.1 - possible-typed-array-names: - specifier: ^1.1.0 - version: 1.1.0 - postcss: - specifier: 8.4.33 - version: 8.4.33 - postcss-import: - specifier: ^16.1.0 - version: 16.1.0(postcss@8.4.33) - postcss-load-config: - specifier: ^6.0.1 - version: 6.0.1(jiti@2.4.2)(postcss@8.4.33)(yaml@2.7.0) - postcss-loader: - specifier: ^8.1.1 - version: 8.1.1(postcss@8.4.33)(typescript@5.8.2)(webpack@5.98.0) - postcss-nested: - specifier: ^7.0.2 - version: 7.0.2(postcss@8.4.33) - postcss-selector-parser: - specifier: ^7.1.0 - version: 7.1.0 - postcss-value-parser: - specifier: ^4.2.0 - version: 4.2.0 - prelude-ls: - specifier: ^1.2.1 - version: 1.2.1 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - pretty-bytes: - specifier: ^6.1.1 - version: 6.1.1 - pretty-format: - specifier: ^29.7.0 - version: 29.7.0 - prismjs: - specifier: ^1.30.0 - version: 1.30.0 - process: - specifier: ^0.11.10 - version: 0.11.10 - process-nextick-args: - specifier: ^2.0.1 - version: 2.0.1 - progress: - specifier: ^2.0.3 - version: 2.0.3 - promise: - specifier: ^8.3.0 - version: 8.3.0 - promise-retry: - specifier: ^2.0.1 - version: 2.0.1 - prompts: - specifier: ^2.4.2 - version: 2.4.2 - prop-types: - specifier: ^15.8.1 - version: 15.8.1 - protobufjs: - specifier: ^7.4.0 - version: 7.4.0 - proxy-addr: - specifier: ^2.0.7 - version: 2.0.7 - proxy-from-env: - specifier: ^1.1.0 - version: 1.1.0 - psl: - specifier: ^1.15.0 - version: 1.15.0 - pump: - specifier: ^3.0.2 - version: 3.0.2 - punycode: - specifier: ^2.3.1 - version: 2.3.1 - qs: - specifier: ^6.14.0 - version: 6.14.0 - query-string: - specifier: ^9.1.1 - version: 9.1.1 - querystringify: - specifier: ^2.2.0 - version: 2.2.0 - queue-microtask: - specifier: ^1.2.3 - version: 1.2.3 - raf: - specifier: ^3.4.1 - version: 3.4.1 - ramda: - specifier: ^0.30.1 - version: 0.30.1 - randombytes: - specifier: ^2.1.0 - version: 2.1.0 - range-parser: - specifier: ^1.2.1 - version: 1.2.1 - raw-body: - specifier: ^3.0.0 - version: 3.0.0 - rc: - specifier: ^1.2.8 - version: 1.2.8 - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@18.3.1) - react-hook-form: - specifier: ^7.54.2 - version: 7.54.2(react@18.3.1) - react-is: - specifier: ^19.0.0 - version: 19.0.0 - react-redux: - specifier: ^9.2.0 - version: 9.2.0(@types/react@19.0.12)(react@18.3.1)(redux@5.0.1) - react-refresh: - specifier: ^0.16.0 - version: 0.16.0 - react-router: - specifier: ^7.5.2 - version: 7.7.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - react-router-dom: - specifier: ^7.4.0 - version: 7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - react-transition-group: - specifier: ^4.4.5 - version: 4.4.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - read-pkg: - specifier: ^9.0.1 - version: 9.0.1 - readable-stream: - specifier: ^4.7.0 - version: 4.7.0 - readdirp: - specifier: ^4.1.2 - version: 4.1.2 - recast: - specifier: ^0.23.11 - version: 0.23.11 - rechoir: - specifier: ^0.8.0 - version: 0.8.0 - redent: - specifier: ^4.0.0 - version: 4.0.0 - redux: - specifier: ^5.0.1 - version: 5.0.1 - redux-thunk: - specifier: ^3.1.0 - version: 3.1.0(redux@5.0.1) - reflect-metadata: - specifier: ^0.2.2 - version: 0.2.2 - reflect.getprototypeof: - specifier: ^1.0.10 - version: 1.0.10 - regenerate: - specifier: ^1.4.2 - version: 1.4.2 - regenerate-unicode-properties: - specifier: ^10.2.0 - version: 10.2.0 - regenerator-runtime: - specifier: ^0.14.1 - version: 0.14.1 - regenerator-transform: - specifier: ^0.15.2 - version: 0.15.2 - regexp.prototype.flags: - specifier: ^1.5.4 - version: 1.5.4 - regexpu-core: - specifier: ^6.2.0 - version: 6.2.0 - regjsparser: - specifier: ^0.12.0 - version: 0.12.0 - repeat-string: - specifier: ^1.6.1 - version: 1.6.1 - require-directory: - specifier: ^2.1.1 - version: 2.1.1 - require-from-string: - specifier: ^2.0.2 - version: 2.0.2 - require-main-filename: - specifier: ^2.0.0 - version: 2.0.0 - requires-port: - specifier: ^1.0.0 - version: 1.0.0 - reselect: - specifier: ^5.1.1 - version: 5.1.1 - resize-observer-polyfill: - specifier: ^1.5.1 - version: 1.5.1 - resolve: - specifier: ^1.22.10 - version: 1.22.10 - resolve-cwd: - specifier: ^3.0.0 - version: 3.0.0 - resolve-from: - specifier: ^5.0.0 - version: 5.0.0 - resolve.exports: - specifier: ^2.0.3 - version: 2.0.3 - responselike: - specifier: ^3.0.0 - version: 3.0.0 - restore-cursor: - specifier: ^5.1.0 - version: 5.1.0 - retry: - specifier: ^0.13.1 - version: 0.13.1 - reusify: - specifier: ^1.1.0 - version: 1.1.0 - rfdc: - specifier: ^1.4.1 - version: 1.4.1 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 - rollup: - specifier: ^4.37.0 - version: 4.37.0 - run-async: - specifier: ^3.0.0 - version: 3.0.0 - run-parallel: - specifier: ^1.2.0 - version: 1.2.0 - rxjs: - specifier: ^7.8.2 - version: 7.8.2 - safe-array-concat: - specifier: ^1.1.3 - version: 1.1.3 - safe-buffer: - specifier: ^5.2.1 - version: 5.2.1 - safe-regex-test: - specifier: ^1.1.0 - version: 1.1.0 - safer-buffer: - specifier: ^2.1.2 - version: 2.1.2 - sass: - specifier: ^1.86.0 - version: 1.86.0 - sass-loader: - specifier: ^16.0.5 - version: 16.0.5(sass@1.86.0)(webpack@5.98.0) - sax: - specifier: ^1.4.1 - version: 1.4.1 - saxes: - specifier: ^6.0.0 - version: 6.0.0 - scheduler: - specifier: ^0.25.0 - version: 0.25.0 - schema-utils: - specifier: ^4.3.0 - version: 4.3.0 - semver: - specifier: ^7.7.1 - version: 7.7.1 - send: - specifier: ^1.1.0 - version: 1.1.0(supports-color@10.0.0) - serve-static: - specifier: ^1.16.2 - version: 1.16.2(supports-color@10.0.0) - set-blocking: - specifier: ^2.0.0 - version: 2.0.0 - set-function-length: - specifier: ^1.2.2 - version: 1.2.2 - set-function-name: - specifier: ^2.0.2 - version: 2.0.2 - set-value: - specifier: ^4.1.0 - version: 4.1.0 - setimmediate: - specifier: ^1.0.5 - version: 1.0.5 - setprototypeof: - specifier: ^1.2.0 - version: 1.2.0 - shallow-clone: - specifier: ^3.0.1 - version: 3.0.1 - sharp: - specifier: ^0.33.5 - version: 0.33.5 - shebang-command: - specifier: ^2.0.0 - version: 2.0.0 - shebang-regex: - specifier: ^4.0.0 - version: 4.0.0 - shell-quote: - specifier: ^1.8.2 - version: 1.8.2 - shelljs: - specifier: ^0.9.2 - version: 0.9.2 - side-channel: - specifier: ^1.1.0 - version: 1.1.0 - signal-exit: - specifier: ^4.1.0 - version: 4.1.0 - simple-git: - specifier: ^3.27.0 - version: 3.27.0(supports-color@10.0.0) - sisteransi: - specifier: ^1.0.5 - version: 1.0.5 - slash: - specifier: ^5.1.0 - version: 5.1.0 - slice-ansi: - specifier: ^7.1.0 - version: 7.1.0 - smart-buffer: - specifier: ^4.2.0 - version: 4.2.0 - socket.io: - specifier: ^4.8.1 - version: 4.8.1(supports-color@10.0.0) - socket.io-client: - specifier: ^4.8.1 - version: 4.8.1(supports-color@10.0.0) - socks: - specifier: ^2.8.4 - version: 2.8.4 - socks-proxy-agent: - specifier: ^8.0.5 - version: 8.0.5(supports-color@10.0.0) - source-map: - specifier: ^0.7.4 - version: 0.7.4 - source-map-js: - specifier: ^1.2.1 - version: 1.2.1 - source-map-support: - specifier: ^0.5.21 - version: 0.5.21 - spdx-correct: - specifier: ^3.2.0 - version: 3.2.0 - spdx-expression-parse: - specifier: ^4.0.0 - version: 4.0.0 - split2: - specifier: ^4.2.0 - version: 4.2.0 - sprintf-js: - specifier: ^1.1.3 - version: 1.1.3 - sshpk: - specifier: ^1.18.0 - version: 1.18.0 - ssri: - specifier: ^12.0.0 - version: 12.0.0 - stack-utils: - specifier: ^2.0.6 - version: 2.0.6 - statuses: - specifier: ^2.0.1 - version: 2.0.1 - stream-browserify: - specifier: ^3.0.0 - version: 3.0.0 - string-length: - specifier: ^6.0.0 - version: 6.0.0 - string-width: - specifier: ^7.2.0 - version: 7.2.0 - string.prototype.matchall: - specifier: ^4.0.12 - version: 4.0.12 - string.prototype.trim: - specifier: ^1.2.10 - version: 1.2.10 - string.prototype.trimend: - specifier: ^1.0.9 - version: 1.0.9 - string.prototype.trimstart: - specifier: ^1.0.8 - version: 1.0.8 - string_decoder: - specifier: ^1.3.0 - version: 1.3.0 - strip-ansi: - specifier: ^7.1.0 - version: 7.1.0 - strip-bom: - specifier: ^5.0.0 - version: 5.0.0 - strip-final-newline: - specifier: ^4.0.0 - version: 4.0.0 - strip-indent: - specifier: ^4.0.0 - version: 4.0.0 - strip-json-comments: - specifier: ^5.0.1 - version: 5.0.1 - style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.98.0) - sucrase: - specifier: ^3.35.0 - version: 3.35.0 - superagent: - specifier: ^10.2.0 - version: 10.2.0(supports-color@10.0.0) - supports-color: - specifier: ^10.0.0 - version: 10.0.0 - supports-preserve-symlinks-flag: - specifier: ^1.0.0 - version: 1.0.0 - svgo: - specifier: ^3.3.2 - version: 3.3.2 - symbol-tree: - specifier: ^3.2.4 - version: 3.2.4 - tailwind-merge: - specifier: ^3.0.2 - version: 3.0.2 - tailwindcss: - specifier: ^4.0.15 - version: 4.0.16 - tapable: - specifier: ^2.2.1 - version: 2.2.1 - tar: - specifier: ^7.4.3 - version: 7.4.3 - tar-stream: - specifier: ^3.1.7 - version: 3.1.7 - terser-webpack-plugin: - specifier: ^5.3.14 - version: 5.3.14(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack@5.98.0) - test-exclude: - specifier: ^7.0.1 - version: 7.0.1 - text-table: - specifier: ^0.2.0 - version: 0.2.0 - thenify: - specifier: ^3.3.1 - version: 3.3.1 - thenify-all: - specifier: ^1.6.0 - version: 1.6.0 - through: - specifier: ^2.3.8 - version: 2.3.8 - through2: - specifier: ^4.0.2 - version: 4.0.2 - tiny-invariant: - specifier: ^1.3.3 - version: 1.3.3 - tiny-warning: - specifier: ^1.0.3 - version: 1.0.3 - tmp: - specifier: ^0.2.3 - version: 0.2.3 - tmpl: - specifier: ^1.0.5 - version: 1.0.5 - to-regex-range: - specifier: ^5.0.1 - version: 5.0.1 - toidentifier: - specifier: ^1.0.1 - version: 1.0.1 - tough-cookie: - specifier: ^5.1.2 - version: 5.1.2 - tr46: - specifier: ^5.1.0 - version: 5.1.0 - tree-kill: - specifier: ^1.2.2 - version: 1.2.2 - ts-api-utils: - specifier: ^2.1.0 - version: 2.1.0(typescript@5.8.2) - ts-jest: - specifier: ^29.3.0 - version: 29.3.0(@babel/core@7.26.10(supports-color@10.0.0))(@jest/transform@29.7.0(supports-color@10.0.0))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(typescript@5.8.2) - ts-loader: - specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.2)(webpack@5.98.0) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2) - tsconfig-paths: - specifier: ^4.2.0 - version: 4.2.0 - tslib: - specifier: ^2.8.1 - version: 2.8.1 - tweetnacl: - specifier: ^1.0.3 - version: 1.0.3 - type-check: - specifier: ^0.4.0 - version: 0.4.0 - type-detect: - specifier: ^4.1.0 - version: 4.1.0 - type-is: - specifier: ^1.6.18 - version: 1.6.18 - typed-array-buffer: - specifier: ^1.0.3 - version: 1.0.3 - typed-array-byte-length: - specifier: ^1.0.3 - version: 1.0.3 - typed-array-byte-offset: - specifier: ^1.0.4 - version: 1.0.4 - typed-array-length: - specifier: ^1.0.7 - version: 1.0.7 - typedarray: - specifier: ^0.0.7 - version: 0.0.7 - typedarray-to-buffer: - specifier: ^4.0.0 - version: 4.0.0 - typescript: - specifier: ^5.6.2 - version: 5.8.2 - ua-parser-js: - specifier: ^2.0.3 - version: 2.0.3(encoding@0.1.13) - unbox-primitive: - specifier: ^1.1.0 - version: 1.1.0 - underscore: - specifier: ^1.13.7 - version: 1.13.7 - undici: - specifier: ^7.5.0 - version: 7.5.0 - unicode-canonical-property-names-ecmascript: - specifier: ^2.0.1 - version: 2.0.1 - unicode-match-property-ecmascript: - specifier: ^2.0.0 - version: 2.0.0 - unicode-match-property-value-ecmascript: - specifier: ^2.2.0 - version: 2.2.0 - unicode-property-aliases-ecmascript: - specifier: ^2.1.0 - version: 2.1.0 - unified: - specifier: ^11.0.5 - version: 11.0.5 - unique-filename: - specifier: ^4.0.0 - version: 4.0.0 - unique-slug: - specifier: ^5.0.0 - version: 5.0.0 - unique-string: - specifier: ^3.0.0 - version: 3.0.0 - unist-util-visit: - specifier: ^5.0.0 - version: 5.0.0 - unpipe: - specifier: ^1.0.0 - version: 1.0.0 - update-browserslist-db: - specifier: ^1.1.3 - version: 1.1.3(browserslist@4.24.4) - update-notifier: - specifier: ^7.3.1 - version: 7.3.1 - uri-js: - specifier: ^4.4.1 - version: 4.4.1 - url: - specifier: ^0.11.4 - version: 0.11.4 - url-join: - specifier: ^5.0.0 - version: 5.0.0 - url-parse: - specifier: ^1.5.10 - version: 1.5.10 - use-sync-external-store: - specifier: ^1.4.0 - version: 1.4.0(react@18.3.1) - util-deprecate: - specifier: ^1.0.2 - version: 1.0.2 - utils-merge: - specifier: ^1.0.1 - version: 1.0.1 - uuid: - specifier: ^11.1.0 - version: 11.1.0 - v8-compile-cache-lib: - specifier: ^3.0.1 - version: 3.0.1 - v8-to-istanbul: - specifier: ^9.3.0 - version: 9.3.0 - validate-npm-package-license: - specifier: ^3.0.4 - version: 3.0.4 - validate-npm-package-name: - specifier: ^6.0.0 - version: 6.0.0 - validator: - specifier: ^13.15.0 - version: 13.15.0 - vary: - specifier: ^1.1.2 - version: 1.1.2 - verror: - specifier: ^1.10.1 - version: 1.10.1 - vite: - specifier: ^6.2.7 - version: 6.3.5(@types/node@22.13.13)(jiti@2.4.2)(less@4.2.2)(sass@1.86.0)(terser@5.39.0)(yaml@2.7.0) - vue: - specifier: ^3.5.13 - version: 3.5.13(typescript@5.8.2) - vue-router: - specifier: ^4.5.0 - version: 4.5.0(vue@3.5.13(typescript@5.8.2)) - w3c-xmlserializer: - specifier: ^5.0.0 - version: 5.0.0 - walker: - specifier: ^1.0.8 - version: 1.0.8 - watchpack: - specifier: ^2.4.2 - version: 2.4.2 - wcwidth: - specifier: ^1.0.1 - version: 1.0.1 - web-vitals: - specifier: ^4.2.4 - version: 4.2.4 - webidl-conversions: - specifier: ^7.0.0 - version: 7.0.0 - webpack: - specifier: ^5.98.0 - version: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0) - webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.2(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0) - webpack-merge: - specifier: ^6.0.1 - version: 6.0.1 - webpack-sources: - specifier: ^3.2.3 - version: 3.2.3 - whatwg-encoding: - specifier: ^3.1.1 - version: 3.1.1 - whatwg-fetch: - specifier: ^3.6.20 - version: 3.6.20 - whatwg-mimetype: - specifier: ^4.0.0 - version: 4.0.0 - whatwg-url: - specifier: ^14.2.0 - version: 14.2.0 - which: - specifier: ^5.0.0 - version: 5.0.0 - which-boxed-primitive: - specifier: ^1.1.1 - version: 1.1.1 - which-builtin-type: - specifier: ^1.2.1 - version: 1.2.1 - which-collection: - specifier: ^1.0.2 - version: 1.0.2 - which-typed-array: - specifier: ^1.1.19 - version: 1.1.19 - winston: - specifier: ^3.17.0 - version: 3.17.0 - word-wrap: - specifier: ^1.2.5 - version: 1.2.5 - wordwrap: - specifier: ^1.0.0 - version: 1.0.0 - wrap-ansi: - specifier: ^9.0.0 - version: 9.0.0 - wrappy: - specifier: ^1.0.2 - version: 1.0.2 - write-file-atomic: - specifier: ^6.0.0 - version: 6.0.0 - ws: - specifier: ^8.18.1 - version: 8.18.1 - xml-name-validator: - specifier: ^5.0.0 - version: 5.0.0 - xml2js: - specifier: ^0.6.2 - version: 0.6.2 - xmlbuilder: - specifier: ^15.1.1 - version: 15.1.1 - xtend: - specifier: ^4.0.2 - version: 4.0.2 - y18n: - specifier: ^5.0.8 - version: 5.0.8 - yallist: - specifier: ^5.0.0 - version: 5.0.0 - yaml: - specifier: ^2.7.0 - version: 2.7.0 - yargs: - specifier: ^17.7.2 - version: 17.7.2 - yargs-parser: - specifier: ^21.1.1 - version: 21.1.1 - yn: - specifier: ^5.0.0 - version: 5.0.0 - yocto-queue: - specifier: ^1.2.1 - version: 1.2.1 - yup: - specifier: ^1.6.1 - version: 1.6.1 - zod: - specifier: ^3.24.2 - version: 3.24.2 - zone.js: - specifier: ^0.15.0 - version: 0.15.0 - -packages: - - '@adobe/css-tools@4.4.2': - resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@angular-devkit/core@19.2.4': - resolution: {integrity: sha512-dL6AmCQsKh+CFVvO/jxX8qZpamVwt9r4iIo7fYcAI2+mTSDGxxBGWbS+onIfdPFuRp2HgKa+AT6WiHmRqu63AA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^4.0.0 - peerDependenciesMeta: - chokidar: - optional: true - - '@angular/common@19.2.3': - resolution: {integrity: sha512-cYOMRXFb6Sjtg9BI3bE/Ave+xU234jQmHYj7hBxr3MiqRSVJL4niy10KiA/Jiz6y76V5QfZfS+0aE65VuoqAvg==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/core': 19.2.3 - rxjs: ^6.5.3 || ^7.4.0 - - '@angular/compiler@19.2.3': - resolution: {integrity: sha512-TL/JIU7vzSWD+IrMq2PAiHZi7IUFSRhdHo8q6/WuZ8SQmbuXCK2pJvHZpTtUdLswdPeD/UVhkhTAhQzEyEdZVg==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - - '@angular/core@19.2.3': - resolution: {integrity: sha512-uNDbQBDWdAfL8JhgG2l9eTEbikovZ+SthLUKERyR4fL7AVGSx85LjNySRuq4WAL4eiD1cRN1UUgu8o+WKqF/ow==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - rxjs: ^6.5.3 || ^7.4.0 - zone.js: ~0.15.0 - - '@angular/forms@19.2.3': - resolution: {integrity: sha512-JEgNKiZd3taYBg9lsMvoana5cv1QGke8xkuryc9zesHPJjhw9QHllmDPOW2HyUuwPqXZ/YkHiuCMOk+4qPjsAw==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/common': 19.2.3 - '@angular/core': 19.2.3 - '@angular/platform-browser': 19.2.3 - rxjs: ^6.5.3 || ^7.4.0 - - '@angular/platform-browser-dynamic@19.2.3': - resolution: {integrity: sha512-PHmmtdGxSfe9HL8xR4g3PspnEaPqTEOGyzNviAHugfkZCgXCdSbYs36d3i0nPwhExMAeuIVXbbJyouDn2kyeOw==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/common': 19.2.3 - '@angular/compiler': 19.2.3 - '@angular/core': 19.2.3 - '@angular/platform-browser': 19.2.3 - - '@angular/platform-browser@19.2.3': - resolution: {integrity: sha512-bz5mvUkCS8SxaMInjPgi/2dD7vpWkZePQesvr/bBRNQbYSE4cGTbovXcVl3X5hIxs5JoC6Het0lS2IxDq7j6qg==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/animations': 19.2.3 - '@angular/common': 19.2.3 - '@angular/core': 19.2.3 - peerDependenciesMeta: - '@angular/animations': - optional: true - - '@angular/router@19.2.3': - resolution: {integrity: sha512-yYVMT7CceKqE+fBXxkhkAqEQUEdY/BHtLQr1vP9rEnAf30vwKghDEresugfegY6Ch4IGKTBtDG/QGmxWszgUAQ==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/common': 19.2.3 - '@angular/core': 19.2.3 - '@angular/platform-browser': 19.2.3 - rxjs: ^6.5.3 || ^7.4.0 - - '@asamuzakjp/css-color@3.1.1': - resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} - - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/crc32c@5.2.0': - resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} - - '@aws-crypto/sha1-browser@5.2.0': - resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-s3@3.774.0': - resolution: {integrity: sha512-HQ5Xi01r/Pv2IpzPTf5acrN0g/yJQalheDCYbBSA8VU31zoYiT/w5kLFWYJHQDB2hRozh2DB/VC/VDmntkWXxA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso-oidc@3.774.0': - resolution: {integrity: sha512-HgkV8oQoZa7ZuxD6k9bSE6BFyvifSEwpz03MlzywUjp0/AV9KFpwEBRUyZDTxqS178rDIuqK6H/d7RfOrO7pVw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.774.0': - resolution: {integrity: sha512-bN+wd2gpTq+DNJ/fZdam/mX6K3TcVdZBIvxaVtg+imep6xAuRukdFhsoG0cDzk96+WHPCOhkyi+6lFljCof43Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sts@3.774.0': - resolution: {integrity: sha512-OjYVB5tfdJMsN3Up3YWqfDkan+eKVqDG8RNIUCIluBdOn2KeVF/xgAS3BcGorOZAv4cXri3qRzKm1MTXxF7zLQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.774.0': - resolution: {integrity: sha512-JDkAAlPyGWMX42L4Cv8mxybwHTOoFweNbNrOc5oQJhFxZAe1zkW4uLTEfr79vYhnXCFbThCyPpBotmo3U2vULA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.774.0': - resolution: {integrity: sha512-FkSDBi9Ly0bmzyrMDeqQq1lGsFMrrd/bIB3c9VD4Llh0sPLxB/DU31+VTPTuQ0pBPz4sX5Vay6tLy43DStzcFQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.774.0': - resolution: {integrity: sha512-iurWGQColf52HpHeHCQs/LnSjZ0Ufq3VtSQx/6QdZwIhmgbbqvGMAaBJg41SQjWhpqdufE96HzcaCJw/lnCefQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.774.0': - resolution: {integrity: sha512-+AsJOX9pGsnGPAC8wQw7LAO8ZfXzjXTjJxSP1fvg04PX7OBk4zwhVaryH6pu5raan+9cVbfEO1Z7EEMdkweGQA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.774.0': - resolution: {integrity: sha512-/t+TNhHNW6BNyf7Lgv6I0NUfFk6/dz4+6dUjopRxpDVJtp1YvNza0Zhl25ffRkqX4CKmuXyJYusDbbObcsncUA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.774.0': - resolution: {integrity: sha512-lycBRY1NeWa46LefN258m1MRVUPQgvf6TPA6ZYajyq6/dCr6BPeuUoUAyrzePTPlxV/M25YXNiyORHjjwlK0ug==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.774.0': - resolution: {integrity: sha512-j7vbGCWF6dVpd9qiT0PQGzY4NKf8KUa86sSoosGGbtu0dV9T/Y0s/fvPZ0F8ZyuPIKUMJaBpIJYZ/ECZRfT2mg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.774.0': - resolution: {integrity: sha512-kuE5Hdqm9xXdrYBWCU6l2aM3W3HBtZrIBgyf0y41LulJHwld1nvIySus/lILdzbipmUAv9FI07B8TF5y7p/aFA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-bucket-endpoint@3.734.0': - resolution: {integrity: sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-expect-continue@3.734.0': - resolution: {integrity: sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-flexible-checksums@3.774.0': - resolution: {integrity: sha512-S0vs+U7sEZkRRnjf05KCbEHDduyxGgNPq+ZeaiyWbs5yTZ8wzSYrSzMAKcbCqAseNVYQbpGMXDh8tnzx6H/ihw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.774.0': - resolution: {integrity: sha512-7QHA0ZyEBVfyJqmIc0FW4MUtPdrWhDsHQudsvBCHFS+mqP5fhpU/o4e5RQ+0M7tQqDE65+8MrZRniRa+Txz3xA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-location-constraint@3.734.0': - resolution: {integrity: sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.734.0': - resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.772.0': - resolution: {integrity: sha512-zg0LjJa4v7fcLzn5QzZvtVS+qyvmsnu7oQnb86l6ckduZpWDCDC9+A0ZzcXTrxblPCJd3JqkoG1+Gzi4S4Ny/Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.774.0': - resolution: {integrity: sha512-iMEaOj+S8LZfg7fZaSfXQ8YDtEfOSBiQUllyxzaVhSYlM7IeNDbpBdCWnRi34VrI1J1AuryMdX/foU9JNSTLXg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-ssec@3.734.0': - resolution: {integrity: sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.774.0': - resolution: {integrity: sha512-SVDeBV6DESgc9zex1Wk5XYbUqRI1tmJYQor47uKqD18r6UaCpvzVOBP4x8l/6hteAYxsWER6ZZmsjBQkenEuFQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/nested-clients@3.774.0': - resolution: {integrity: sha512-00+UiYvxiZaDFVzn87kPpiZ/GiEWNaTNzC82C+bIyXt1M9AnAR6PAnnvMErTFwyG+Un6n2ai/I81wvJ1ftFmeQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.734.0': - resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.774.0': - resolution: {integrity: sha512-vQwATjZfl5vxfO+BDUH7nUnhfKoIJMnBmOxmUh4N10PWlz3WWwkT/YtH79nVpr+y1eM6GQUSGuNa4Reda6SaFA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/token-providers@3.774.0': - resolution: {integrity: sha512-DDERwCduWFFXj7gx3qvnaB8GlnCUpQ8ZA03qI4QFokWu3EyHNK+hjp3nN5Dg81fI0Z82LRe30Q2uDsLBwNCZDg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.734.0': - resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-arn-parser@3.723.0': - resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-endpoints@3.743.0': - resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-locate-window@3.723.0': - resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-user-agent-browser@3.734.0': - resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} - - '@aws-sdk/util-user-agent-node@3.774.0': - resolution: {integrity: sha512-kFmnK4sf5Wco8mkzO2PszqDXEwtQ5H896tUxqWDQhk67NtOLsHYfg98ymOBWWudth2POaldiIx6KFXtg0DvLLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.734.0': - resolution: {integrity: sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==} - engines: {node: '>=18.0.0'} - - '@azure/abort-controller@2.1.2': - resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} - engines: {node: '>=18.0.0'} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.27.0': - resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.0': - resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.27.0': - resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.27.0': - resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.4': - resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.26.5': - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.27.0': - resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.27.0': - resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-async-generators@7.8.4': - 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==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - 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'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.26.0': - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} - 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==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} - 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==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - 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==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - 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==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - 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'} - 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'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.25.9': - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.26.8': - resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.25.9': - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.26.5': - resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.27.0': - resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.25.9': - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.26.0': - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.25.9': - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.25.9': - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.25.9': - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.25.9': - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.25.9': - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-dynamic-import@7.25.9': - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.26.3': - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.25.9': - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.26.9': - resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.25.9': - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.25.9': - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.25.9': - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.25.9': - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.25.9': - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.25.9': - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.25.9': - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.25.9': - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.25.9': - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': - resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.25.9': - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.25.9': - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.25.9': - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.25.9': - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.25.9': - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.25.9': - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.25.9': - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-display-name@7.25.9': - resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.25.9': - resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.25.9': - resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.27.0': - resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regexp-modifiers@7.26.0': - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-reserved-words@7.25.9': - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-runtime@7.26.10': - resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.25.9': - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.25.9': - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.25.9': - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.26.8': - resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.27.0': - resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.27.0': - resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.25.9': - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.25.9': - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.25.9': - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9': - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.26.9': - resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/preset-react@7.26.3': - resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.27.0': - resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.27.0': - resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.0': - resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.27.0': - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@csstools/color-helpers@5.0.2': - resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} - engines: {node: '>=18'} - - '@csstools/css-calc@2.1.2': - resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.4 - '@csstools/css-tokenizer': ^3.0.3 - - '@csstools/css-color-parser@3.0.8': - resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.4 - '@csstools/css-tokenizer': ^3.0.3 - - '@csstools/css-parser-algorithms@3.0.4': - resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.3 - - '@csstools/css-tokenizer@3.0.3': - resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} - engines: {node: '>=18'} - - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - - '@discoveryjs/json-ext@0.6.3': - resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} - engines: {node: '>=14.17.0'} - - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} - - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} - - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - - '@emotion/cache@11.14.0': - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - - '@emotion/is-prop-valid@1.3.1': - resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} - - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - - '@emotion/react@11.14.0': - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - - '@emotion/styled@11.14.0': - resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - - '@emotion/weak-memoize@0.4.0': - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.5.1': - resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - 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.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.23.0': - resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.31.0': - resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.3': - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.6.9': - resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - - '@floating-ui/dom@1.6.13': - resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - - '@graphql-tools/utils@10.8.6': - resolution: {integrity: sha512-Alc9Vyg0oOsGhRapfL3xvqh1zV8nKoFUdtLhXX7Ki4nClaIJXckrA86j+uxEuG3ic6j4jlM1nvcWXRn/71AVLQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@grpc/grpc-js@1.13.1': - resolution: {integrity: sha512-z5nNuIs75S73ZULjPDe5QCNTiCv7FyBZXEVWOyAHtcebnuJf0g1SuueI3U1/z/KK39XyAQRUC+C9ZQJOtgHynA==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.7.13': - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true - - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} - engines: {node: '>=18.18'} - - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} - engines: {node: '>=18'} - - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@inquirer/checkbox@4.1.4': - resolution: {integrity: sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/confirm@5.1.8': - resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.1.9': - resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/editor@4.2.9': - resolution: {integrity: sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/expand@4.0.11': - resolution: {integrity: sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.11': - resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} - engines: {node: '>=18'} - - '@inquirer/input@4.1.8': - resolution: {integrity: sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/number@3.0.11': - resolution: {integrity: sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/password@4.0.11': - resolution: {integrity: sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/prompts@7.4.0': - resolution: {integrity: sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/rawlist@4.0.11': - resolution: {integrity: sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/search@3.0.11': - resolution: {integrity: sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/select@4.1.0': - resolution: {integrity: sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/type@3.0.5': - resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@ioredis/commands@1.2.0': - resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - 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} - - '@jest/core@29.7.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: - node-notifier: - optional: true - - '@jest/environment@29.7.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} - - '@jest/expect@29.7.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} - - '@jest/globals@29.7.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} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - 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} - - '@jest/source-map@29.6.3': - 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} - - '@jest/test-sequencer@29.7.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} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - 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'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.2.0': - resolution: {integrity: sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.5.0': - resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@keyv/serialize@1.0.3': - resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==} - - '@kwsites/file-exists@1.1.1': - resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} - - '@kwsites/promise-deferred@1.1.1': - resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - - '@lukeed/csprng@1.1.0': - resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} - engines: {node: '>=8'} - - '@mongodb-js/saslprep@1.2.0': - resolution: {integrity: sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==} - - '@mui/core-downloads-tracker@6.4.8': - resolution: {integrity: sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw==} - - '@mui/material@6.4.8': - resolution: {integrity: sha512-5S9UTjKZZBd9GfbcYh/nYfD9cv6OXmj5Y7NgKYfk7JcSoshp8/pW5zP4wecRiroBSZX8wcrywSgogpVNO+5W0Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^6.4.8 - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@mui/material-pigment-css': - optional: true - '@types/react': - optional: true - - '@mui/private-theming@6.4.8': - resolution: {integrity: sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/styled-engine@6.4.8': - resolution: {integrity: sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.4.1 - '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - - '@mui/system@6.4.8': - resolution: {integrity: sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@types/react': - optional: true - - '@mui/types@7.2.24': - resolution: {integrity: sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/utils@6.4.8': - resolution: {integrity: sha512-C86gfiZ5BfZ51KqzqoHi1WuuM2QdSKoFhbkZeAfQRB+jCc4YNhhj11UXFVMMsqBgZ+Zy8IHNJW3M9Wj/LOwRXQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@nestjs/common@11.0.12': - resolution: {integrity: sha512-6PXxmDe2iYmb57xacnxzpW1NAxRZ7Gf+acMT7/hmRB/4KpZiFU/cNvLWwgbM2BL5QSzQulOwY6ny5bbKnPpB+A==} - peerDependencies: - class-transformer: '*' - class-validator: '*' - reflect-metadata: ^0.1.12 || ^0.2.0 - rxjs: ^7.1.0 - peerDependenciesMeta: - class-transformer: - optional: true - class-validator: - optional: true - - '@next/env@15.5.9': - resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==} - - '@next/swc-darwin-arm64@15.5.7': - resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@next/swc-darwin-x64@15.5.7': - resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@next/swc-linux-arm64-gnu@15.5.7': - resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@next/swc-linux-arm64-musl@15.5.7': - resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@next/swc-linux-x64-gnu@15.5.7': - resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@next/swc-linux-x64-musl@15.5.7': - resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@next/swc-win32-arm64-msvc@15.5.7': - resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@next/swc-win32-x64-msvc@15.5.7': - resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.scandir@4.0.1': - resolution: {integrity: sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw==} - engines: {node: '>=18.18.0'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@4.0.0': - resolution: {integrity: sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg==} - engines: {node: '>=18.18.0'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@3.0.1': - resolution: {integrity: sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==} - engines: {node: '>=18.18.0'} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@octokit/auth-token@5.1.2': - resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} - engines: {node: '>= 18'} - - '@octokit/core@6.1.4': - resolution: {integrity: sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==} - engines: {node: '>= 18'} - - '@octokit/endpoint@10.1.3': - resolution: {integrity: sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==} - engines: {node: '>= 18'} - - '@octokit/graphql@8.2.1': - resolution: {integrity: sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==} - engines: {node: '>= 18'} - - '@octokit/openapi-types@24.2.0': - resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} - - '@octokit/plugin-paginate-rest@11.6.0': - resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-request-log@5.3.1': - resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-rest-endpoint-methods@13.5.0': - resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/request-error@6.1.7': - resolution: {integrity: sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==} - engines: {node: '>= 18'} - - '@octokit/request@9.2.2': - resolution: {integrity: sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==} - engines: {node: '>= 18'} - - '@octokit/rest@21.1.1': - resolution: {integrity: sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==} - engines: {node: '>= 18'} - - '@octokit/types@13.10.0': - resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} - - '@opentelemetry/api-logs@0.200.0': - resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/core@2.0.0': - resolution: {integrity: sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/instrumentation@0.200.0': - resolution: {integrity: sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/semantic-conventions@1.30.0': - resolution: {integrity: sha512-4VlGgo32k2EQ2wcCY3vEU28A0O13aOtHz3Xt2/2U5FAh9EfhD6t6DqL5Z6yAnRCntbTFDU4YfbpyzSlHNWycPw==} - engines: {node: '>=14'} - - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} - engines: {node: '>= 10.0.0'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} - engines: {node: '>=12'} - - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@radix-ui/react-compose-refs@1.1.1': - resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-slot@1.1.2': - resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.37.0': - resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.37.0': - resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.37.0': - resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.37.0': - resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.37.0': - resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.37.0': - resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.37.0': - resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.37.0': - resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.37.0': - resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.37.0': - resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loongarch64-gnu@4.37.0': - resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': - resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-gnu@4.37.0': - resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.37.0': - resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.37.0': - resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.37.0': - resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.37.0': - resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-win32-arm64-msvc@4.37.0': - resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.37.0': - resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.37.0': - resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} - cpu: [x64] - os: [win32] - - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sinclair/typebox@0.34.31': - resolution: {integrity: sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==} - - '@sindresorhus/is@7.0.1': - 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'} - - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@smithy/abort-controller@4.0.2': - resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} - engines: {node: '>=18.0.0'} - - '@smithy/chunked-blob-reader-native@4.0.0': - resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} - engines: {node: '>=18.0.0'} - - '@smithy/chunked-blob-reader@5.0.0': - resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} - engines: {node: '>=18.0.0'} - - '@smithy/config-resolver@4.1.0': - resolution: {integrity: sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.2.0': - resolution: {integrity: sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.0.2': - resolution: {integrity: sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-codec@4.0.2': - resolution: {integrity: sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-browser@4.0.2': - resolution: {integrity: sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-config-resolver@4.1.0': - resolution: {integrity: sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-node@4.0.2': - resolution: {integrity: sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-universal@4.0.2': - resolution: {integrity: sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.0.2': - resolution: {integrity: sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-blob-browser@4.0.2': - resolution: {integrity: sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.0.2': - resolution: {integrity: sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-stream-node@4.0.2': - resolution: {integrity: sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.0.2': - resolution: {integrity: sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} - engines: {node: '>=18.0.0'} - - '@smithy/md5-js@4.0.2': - resolution: {integrity: sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.0.2': - resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.1.0': - resolution: {integrity: sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.1.0': - resolution: {integrity: sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.0.3': - resolution: {integrity: sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.0.2': - resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.0.2': - resolution: {integrity: sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.0.4': - resolution: {integrity: sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.0.2': - resolution: {integrity: sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.1.0': - resolution: {integrity: sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.0.2': - resolution: {integrity: sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.0.2': - resolution: {integrity: sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.0.2': - resolution: {integrity: sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.0.2': - resolution: {integrity: sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.0.2': - resolution: {integrity: sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.2.0': - resolution: {integrity: sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.2.0': - resolution: {integrity: sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.0.2': - resolution: {integrity: sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.0.8': - resolution: {integrity: sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.0.8': - resolution: {integrity: sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.0.2': - resolution: {integrity: sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.0.2': - resolution: {integrity: sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.0.2': - resolution: {integrity: sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.2.0': - resolution: {integrity: sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} - engines: {node: '>=18.0.0'} - - '@smithy/util-waiter@4.0.3': - resolution: {integrity: sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==} - engines: {node: '>=18.0.0'} - - '@socket.io/component-emitter@3.1.2': - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - - '@swc/core-darwin-arm64@1.11.13': - resolution: {integrity: sha512-loSERhLaQ9XDS+5Kdx8cLe2tM1G0HLit8MfehipAcsdctpo79zrRlkW34elOf3tQoVPKUItV0b/rTuhjj8NtHg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.11.13': - resolution: {integrity: sha512-uSA4UwgsDCIysUPfPS8OrQTH2h9spO7IYFd+1NB6dJlVGUuR6jLKuMBOP1IeLeax4cGHayvkcwSJ3OvxHwgcZQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.11.13': - resolution: {integrity: sha512-boVtyJzS8g30iQfe8Q46W5QE/cmhKRln/7NMz/5sBP/am2Lce9NL0d05NnFwEWJp1e2AMGHFOdRr3Xg1cDiPKw==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.11.13': - resolution: {integrity: sha512-+IK0jZ84zHUaKtwpV+T+wT0qIUBnK9v2xXD03vARubKF+eUqCsIvcVHXmLpFuap62dClMrhCiwW10X3RbXNlHw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-arm64-musl@1.11.13': - resolution: {integrity: sha512-+ukuB8RHD5BHPCUjQwuLP98z+VRfu+NkKQVBcLJGgp0/+w7y0IkaxLY/aKmrAS5ofCNEGqKL+AOVyRpX1aw+XA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@swc/core-linux-x64-gnu@1.11.13': - resolution: {integrity: sha512-q9H3WI3U3dfJ34tdv60zc8oTuWvSd5fOxytyAO9Pc5M82Hic3jjWaf2xBekUg07ubnMZpyfnv+MlD+EbUI3Llw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@swc/core-linux-x64-musl@1.11.13': - resolution: {integrity: sha512-9aaZnnq2pLdTbAzTSzy/q8dr7Woy3aYIcQISmw1+Q2/xHJg5y80ZzbWSWKYca/hKonDMjIbGR6dp299I5J0aeA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@swc/core-win32-arm64-msvc@1.11.13': - resolution: {integrity: sha512-n3QZmDewkHANcoHvtwvA6yJbmS4XJf0MBMmwLZoKDZ2dOnC9D/jHiXw7JOohEuzYcpLoL5tgbqmjxa3XNo9Oow==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.11.13': - resolution: {integrity: sha512-wM+Nt4lc6YSJFthCx3W2dz0EwFNf++j0/2TQ0Js9QLJuIxUQAgukhNDVCDdq8TNcT0zuA399ALYbvj5lfIqG6g==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.11.13': - resolution: {integrity: sha512-+X5/uW3s1L5gK7wAo0E27YaAoidJDo51dnfKSfU7gF3mlEUuWH8H1bAy5OTt2mU4eXtfsdUMEVXSwhDlLtQkuA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.11.13': - resolution: {integrity: sha512-9BXdYz12Wl0zWmZ80PvtjBWeg2ncwJ9L5WJzjhN6yUTZWEV/AwAdVdJnIEp4pro3WyKmAaMxcVOSbhuuOZco5g==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@swc/types@0.1.20': - resolution: {integrity: sha512-/rlIpxwKrhz4BIplXf6nsEHtqlhzuNN34/k3kMAXH4/lvVoA3cdq+60aqVNnyvw2uITEaCi0WV3pxBe4dQqoXQ==} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - - '@testing-library/jest-dom@6.6.3': - resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - - '@testing-library/react@16.2.0': - resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} - engines: {node: '>=18'} - peerDependencies: - '@testing-library/dom': ^10.0.0 - '@types/react': ^18.0.0 || ^19.0.0 - '@types/react-dom': ^18.0.0 || ^19.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - - '@tokenizer/inflate@0.2.7': - resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} - engines: {node: '>=18'} - - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} - - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - - '@types/bonjour@3.5.13': - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - - '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - - '@types/cors@2.8.17': - resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} - - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - - '@types/express-serve-static-core@5.0.6': - resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} - - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - - '@types/html-minifier-terser@6.1.0': - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - - '@types/http-proxy@1.17.16': - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} - - '@types/istanbul-lib-coverage@2.0.6': - 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==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jsdom@20.0.1': - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - - '@types/node@22.13.13': - resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - - '@types/qs@6.9.18': - resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/react-transition-group@4.4.12': - resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} - peerDependencies: - '@types/react': '*' - - '@types/react@19.0.12': - resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==} - - '@types/readable-stream@4.0.18': - resolution: {integrity: sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==} - - '@types/retry@0.12.2': - resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - - '@types/serve-index@1.9.4': - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - - '@types/shimmer@1.2.0': - resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} - - '@types/sockjs@0.3.36': - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - - '@types/webidl-conversions@7.0.3': - resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} - - '@types/whatwg-url@11.0.5': - resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - - '@types/ws@8.18.0': - resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - - '@typescript-eslint/eslint-plugin@8.37.0': - resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.37.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.37.0': - resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.37.0': - resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.37.0': - resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.37.0': - resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.37.0': - resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.37.0': - resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.37.0': - resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.37.0': - resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.37.0': - resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] - os: [win32] - - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} - - '@vue/devtools-api@6.6.4': - resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} - - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} - - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} - - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} - peerDependencies: - vue: 3.5.13 - - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - - '@webpack-cli/configtest@3.0.1': - resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} - engines: {node: '>=18.12.0'} - peerDependencies: - webpack: ^5.82.0 - webpack-cli: 6.x.x - - '@webpack-cli/info@3.0.1': - resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} - engines: {node: '>=18.12.0'} - peerDependencies: - webpack: ^5.82.0 - webpack-cli: 6.x.x - - '@webpack-cli/serve@3.0.1': - resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} - engines: {node: '>=18.12.0'} - peerDependencies: - webpack: ^5.82.0 - webpack-cli: 6.x.x - webpack-dev-server: '*' - peerDependenciesMeta: - webpack-dev-server: - optional: true - - '@whatwg-node/promise-helpers@1.3.0': - resolution: {integrity: sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA==} - engines: {node: '>=16.0.0'} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - - abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - - abbrev@3.0.0: - resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} - engines: {node: ^18.17.0 || >=20.5.0} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-jsx@5.3.2: - 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'} - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-keywords@5.1.0: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - - ansi-colors@4.1.3: - 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'} - - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} - - ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - append-field@1.0.0: - resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} - - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - array-flatten@3.0.0: - resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - array-union@3.0.1: - resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} - engines: {node: '>=12'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - arrify@3.0.0: - resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} - engines: {node: '>=12'} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - - assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - assign-symbols@1.0.0: - resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} - engines: {node: '>=0.10.0'} - - ast-types@0.14.2: - resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} - engines: {node: '>=4'} - - ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - - atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} - - atomically@2.0.3: - resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} - - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} - 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'} - - aws-sdk@2.1692.0: - resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} - engines: {node: '>= 10.0.0'} - deprecated: The AWS SDK for JavaScript (v2) has reached end-of-support, and no longer receives updates. Please migrate your code to use AWS SDK for JavaScript (v3). More info https://a.co/cUPnyil - - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} - engines: {node: '>=4'} - - axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - - babel-jest@29.7.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-loader@10.0.0: - resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} - engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5.61.0' - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-istanbul@7.0.0: - resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} - engines: {node: '>=12'} - - 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} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - babel-plugin-polyfill-corejs2@0.4.13: - resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.11.1: - resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.4: - resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-preset-current-node-syntax@1.1.0: - 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} - peerDependencies: - '@babel/core': ^7.0.0 - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - balanced-match@3.0.1: - resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} - engines: {node: '>= 16'} - - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - - basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} - - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - - before-after-hook@3.0.2: - resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} - - big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} - - bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - binary-extensions@3.0.0: - resolution: {integrity: sha512-X0RfwMgXPEesg6PCXzytQZt9Unh9gtc4SfeTNJvKifUL//Oegcc/Yf31z6hThNZ8dnD3Ir3wkHVN0eWrTvP5ww==} - engines: {node: '>=18.20'} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - bl@6.1.0: - resolution: {integrity: sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==} - - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - - bn.js@4.12.1: - resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} - - bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - bonjour-service@1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - - boxen@8.0.1: - resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} - engines: {node: '>=18'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - brace-expansion@4.0.0: - resolution: {integrity: sha512-l/mOwLWs7BQIgOKrL46dIAbyCKvPV7YJPDspkuc88rHsZRlg3hptUGdU7Trv0VFP4d3xnSGBQrKu5ZvGB7UeIw==} - engines: {node: '>= 18'} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - - browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - 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'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - bson@6.10.3: - resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} - engines: {node: '>=16.20.1'} - - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} - - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - builtin-modules@5.0.0: - resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} - engines: {node: '>=18.20'} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - busboy@1.6.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'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - cache-content-type@1.0.1: - 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'} - - cacheable-request@12.0.1: - resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} - engines: {node: '>=18'} - - cacheable@1.8.9: - resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.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'} - - callsites@4.2.0: - resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} - engines: {node: '>=12.20'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} - - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - - caniuse-lite@1.0.30001707: - resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} - - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} - - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - char-regex@2.0.2: - resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} - engines: {node: '>=12.20'} - - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} - - charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} - engines: {node: '>=18.17'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} - engines: {node: '>=8'} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - cjs-module-lexer@2.1.0: - resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - - clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - - clean-stack@5.2.0: - resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} - engines: {node: '>=14.16'} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-spinners@3.2.0: - resolution: {integrity: sha512-pXftdQloMZzjCr3pCTIRniDcys6dDzgpgVhAHHk6TKBDbRuP1MkuetTF5KSv4YUutbOPa7+7ZrAJ2kVtbMqyXA==} - engines: {node: '>=18.20'} - - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - cliui@9.0.1: - resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} - engines: {node: '>=20'} - - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} - engines: {node: '>=0.10.0'} - - co@4.6.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==} - - color-convert@1.9.3: - 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'} - - color-convert@3.0.1: - resolution: {integrity: sha512-5kQah2eolfQV7HCrxtsBBArPfT5dwaKYMCXeMQsdRO7ihTO/cuNLGjd50ITCDn+ZU/YbS0Go64SjP9154eopxg==} - engines: {node: '>=14.6'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-name@2.0.0: - resolution: {integrity: sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==} - engines: {node: '>=12.20'} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color-string@2.0.1: - resolution: {integrity: sha512-5z9FbYTZPAo8iKsNEqRNv+OlpBbDcoE+SY9GjLfDUHEfcNNV7tS9eSAlFHEaub/r5tBL9LtskAeq1l9SaoZ5tQ==} - engines: {node: '>=18'} - - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - - color@5.0.0: - resolution: {integrity: sha512-16BlyiuyLq3MLxpRWyOTiWsO3ii/eLQLJUQXBSNcxMBBSnyt1ee9YUdaozQp03ifwm5woztEZGDbk9RGVuCsdw==} - engines: {node: '>=18'} - - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - component-emitter@1.3.1: - resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} - - component-emitter@2.0.0: - resolution: {integrity: sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==} - engines: {node: '>=18'} - - compress-commons@6.0.2: - resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} - engines: {node: '>= 14'} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.0: - resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} - engines: {node: '>= 0.8.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-map@0.0.2: - resolution: {integrity: sha512-xGo3rY/AH8WxqkYSvsNV9yB79sN2oNVOXnmSMYLx28CVFBsXiEFCkcf6WIiWjk5VWKr4/1fV+KG5I4442xE2hg==} - - concat-stream@2.0.0: - resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} - engines: {'0': node >= 6.0} - - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - - configstore@7.0.0: - resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} - engines: {node: '>=18'} - - connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - - connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-parser@1.4.7: - resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} - engines: {node: '>= 0.8.0'} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie-signature@1.2.2: - 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'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} - - cookiejar@2.1.4: - 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'} - - copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - - core-js-compat@3.41.0: - resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} - - core-js@3.41.0: - resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} - - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} - - create-jest@29.7.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==} - - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - - cross-fetch@4.1.0: - resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} - - cross-inspect@1.0.1: - resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} - engines: {node: '>=16.0.0'} - - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - - crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - - crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 - - css-loader@7.1.2: - resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.27.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cssnano-preset-default@7.0.6: - resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano-utils@5.0.0: - resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano@7.0.6: - resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - - cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - - cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - - cssstyle@4.3.0: - resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} - engines: {node: '>=18'} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - - data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} - engines: {node: '>=4.0'} - - dateformat@5.0.3: - resolution: {integrity: sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==} - engines: {node: '>=12.20'} - - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - - decamelize@6.0.0: - resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - - decode-uri-component@0.4.1: - resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} - engines: {node: '>=14.16'} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - decompress-response@9.0.0: - resolution: {integrity: sha512-6I7smNZulDaes/5onVuVXJ5WleFu62mcjW5A8YJkPxe3FyJ17NpADIXRB41hYXlU4VDMsqhke2K1SnXIxc8ozw==} - engines: {node: '>=18'} - - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - - deep-equal@1.0.1: - resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} - - deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deep-is@0.1.4: - 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'} - - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} - engines: {node: '>=18'} - - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} - engines: {node: '>=18'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defaults@3.0.0: - resolution: {integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==} - engines: {node: '>=18'} - - defer-to-connect@2.0.1: - 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'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - - denque@2.1.0: - resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} - engines: {node: '>=0.10'} - - depd@1.1.2: - 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'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-europe-js@0.1.2: - resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==} - - detect-indent@7.0.1: - 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'} - hasBin: true - - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-newline@3.1.0: - 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} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - dezalgo@1.0.4: - 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} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - - diff@7.0.0: - resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - - doctrine@2.1.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'} - - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - - dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - - dom-accessibility-api@0.7.0: - resolution: {integrity: sha512-LjjdFmd9AITAet3Hy6Y6rwB7Sq1+x5NiwbOpnkLHC1bCXJqJKiV9DyppSSWobuSKvjKXt9G2u3hW402MPt6m+g==} - - dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - dompurify@3.2.4: - resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - dot-prop@9.0.0: - resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} - engines: {node: '>=18'} - - dotenv-expand@12.0.1: - resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==} - engines: {node: '>=12'} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - - dset@3.1.4: - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} - engines: {node: '>=4'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - eastasianwidth@0.3.0: - resolution: {integrity: sha512-JqasYqGO32J2c91uYKdhu1vNmXGADaLB7OOgjAhjMvpjdvGb0tsYcuwn381MwqCg4YBQDtByQcNlFYuv2kmOug==} - - ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.5.123: - resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} - - elliptic@6.6.1: - resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emittery@1.1.0: - resolution: {integrity: sha512-rsX7ktqARv/6UQDgMaLfIqUWAEzzbCQiVh7V9rhDXp6c37yoJcks12NVD+XPkgl4AEavmNhVfrhGoqYwIsMYYA==} - engines: {node: '>=14.16'} - - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - engine.io-client@6.6.3: - resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} - - engine.io-parser@5.2.3: - resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} - engines: {node: '>=10.0.0'} - - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} - engines: {node: '>=10.2.0'} - - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} - - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.0: - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - envinfo@7.14.0: - 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'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-goat@4.0.0: - resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} - engines: {node: '>=12'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - unrs-resolver: ^1.0.0 - peerDependenciesMeta: - unrs-resolver: - optional: true - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@4.4.4: - resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==} - engines: {node: ^16.17.0 || >=18.6.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.32.0: - resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest@29.0.1: - resolution: {integrity: sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==} - engines: {node: ^20.12.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0 - eslint: ^8.57.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-prettier@5.5.3: - resolution: {integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - 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} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.31.0: - resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esprima@4.0.1: - 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'} - - esrecurse@4.3.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'} - - estraverse@5.3.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==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - 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'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - event-target-shim@6.0.2: - resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==} - engines: {node: '>=10.13.0'} - - eventemitter2@6.4.9: - resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - events@1.1.1: - resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} - engines: {node: '>=0.4.x'} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - - execa@5.1.1: - 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'} - - execa@9.5.2: - 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'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} - - extend-shallow@3.0.2: - resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - - fast-content-type-parse@2.0.1: - resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-levenshtein@3.0.0: - resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} - - fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} - engines: {node: '>=6'} - - fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} - hasBin: true - - fast-xml-parser@5.0.9: - resolution: {integrity: sha512-2mBwCiuW3ycKQQ6SOesSB8WeF+fIGb6I/GG5vU5/XEptwFFhp9PE8b9O7fbs2dpq9fXn4ULR3UsfydNUCntf5A==} - hasBin: true - - fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - - figlet@1.8.0: - resolution: {integrity: sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw==} - engines: {node: '>= 0.4.0'} - hasBin: true - - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} - - file-entry-cache@10.0.7: - resolution: {integrity: sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - file-type@20.4.1: - resolution: {integrity: sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==} - engines: {node: '>=18'} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - filesize@10.1.6: - resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} - engines: {node: '>= 10.4.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - filter-obj@5.1.0: - resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} - engines: {node: '>=14.16'} - - finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} - - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - - find-cache-dir@5.0.0: - resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==} - engines: {node: '>=16'} - - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - find-up-simple@1.0.1: - resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} - engines: {node: '>=18'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flat-cache@6.1.7: - resolution: {integrity: sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - flat@6.0.1: - resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==} - engines: {node: '>=18'} - hasBin: true - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - for-in@1.0.2: - resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} - engines: {node: '>=0.10.0'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data-encoder@4.0.2: - resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} - engines: {node: '>= 18'} - - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - - formidable@3.5.2: - resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fraction.js@5.2.1: - resolution: {integrity: sha512-Ah6t/7YCYjrPUFUFsOsRLMXAdnYM+aQwmojD2Ayb/Ezr82SwES0vuyQ8qZ3QO8n9j7W14VJuVZZet8U3bhSdQQ==} - engines: {node: '>= 12'} - - framer-motion@12.6.0: - resolution: {integrity: sha512-91XLZ3VwDlXe9u2ABhTzYBiFQ/qdoiqyTiTCQDDJ4es5/5lzp76hdB+WG7gcNklcQlOmfDZQqVO48tqzY9Z/bQ==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - fs.realpath@1.0.0: - 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} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - - gensync@1.0.0-beta.2: - 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.*} - - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} - - get-intrinsic@1.3.0: - 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'} - - get-proto@1.0.1: - 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'} - - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - - get-value@4.0.1: - resolution: {integrity: sha512-QTDzwunK3V+VlJJlL0BlCzebAaE8OSlUC+UVd80PiekTw1gpzQSb3cfEQB2LYFWr1lbWfbdqL4pjAoJDPCLxhQ==} - - getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - - glob-parent@5.1.2: - 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'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - 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 - hasBin: true - - glob@11.0.1: - resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} - engines: {node: 20 || >=22} - 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 - hasBin: true - - glob@7.2.3: - 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 - - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} - - global-prefix@4.0.0: - resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} - engines: {node: '>=16'} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.0.0: - resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - engines: {node: '>=14'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@14.4.6: - resolution: {integrity: sha512-rnhwfM/PhMNJ1i17k3DuDqgj0cKx3IHxBKVv/WX1uDKqrhi2Gv3l7rhPThR/Cc6uU++dD97W9c8Y0qyw9x0jag==} - engines: {node: '>=20'} - - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - graphql@16.10.0: - resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - - gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - - handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@3.0.0: - 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'} - - has-flag@5.0.1: - resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} - engines: {node: '>=12'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - hexoid@2.0.0: - resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} - engines: {node: '>=8'} - - highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} - engines: {node: '>=12.0.0'} - - hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hookified@1.8.1: - resolution: {integrity: sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==} - - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - - hosted-git-info@8.0.2: - resolution: {integrity: sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==} - engines: {node: ^18.17.0 || >=20.5.0} - - hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - - html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} - - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - - html-entities@2.5.3: - resolution: {integrity: sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - html-escaper@3.0.3: - resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} - - html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - - html-webpack-plugin@5.6.3: - resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - htmlparser2@10.0.0: - resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} - - htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - - htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} - - http-assert@1.5.0: - 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==} - - http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - - http-errors@1.8.1: - 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'} - - http-parser-js@0.5.9: - resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http-proxy-middleware@2.0.9: - resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - - http-proxy-middleware@3.0.5: - resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - - http-signature@1.4.0: - resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} - engines: {node: '>=0.10'} - - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - human-signals@2.1.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'} - - human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} - engines: {node: '>=18.18.0'} - - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - - i18next@24.2.3: - resolution: {integrity: sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==} - peerDependencies: - typescript: ^5 - peerDependenciesMeta: - typescript: - optional: true - - iconv-lite@0.4.24: - 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'} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - ieee754@1.1.13: - resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore-by-default@1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.3: - resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} - engines: {node: '>= 4'} - - image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} - engines: {node: '>=0.10.0'} - hasBin: true - - image-size@2.0.2: - resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} - engines: {node: '>=16.x'} - hasBin: true - - immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - - immer@10.1.1: - resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} - - immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-in-the-middle@1.13.1: - resolution: {integrity: sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA==} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - - index-to-position@1.0.0: - resolution: {integrity: sha512-sCO7uaLVhRJ25vz1o8s9IFM3nVS4DkuQnyjMwiQPKvQuBYBDmb8H7zx8ki7nVh4HJQOdVWebyvLE0qt+clruxA==} - engines: {node: '>=18'} - - inflight@1.0.6: - 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.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - ini@4.1.3: - resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - ini@5.0.0: - resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} - engines: {node: ^18.17.0 || >=20.5.0} - - inquirer@12.5.0: - resolution: {integrity: sha512-aiBBq5aKF1k87MTxXDylLfwpRwToShiHrSv4EmB07EYyLgmnjEz5B3rn0aGw1X3JA/64Ngf2T54oGwc+BCsPIQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - - interpret@3.1.1: - resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} - engines: {node: '>=10.13.0'} - - ioredis@5.6.0: - resolution: {integrity: sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==} - engines: {node: '>=12.22.0'} - - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - - is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-binary-path@3.0.0: - resolution: {integrity: sha512-eSkpSYbqKip82Uw4z0iBK/5KmVzL2pf36kNKRtu6+mKvrow9sqF4w5hocQ9yV5v+9+wzHt620x3B7Wws/8lsGg==} - engines: {node: '>=18.20'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-ci@4.1.0: - resolution: {integrity: sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==} - hasBin: true - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - 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'} - - is-fullwidth-code-point@5.0.0: - 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'} - - is-generator-fn@3.0.0: - resolution: {integrity: sha512-Kn+4AXo1HHewGjikHNfxCFv58+XGeXAalWE5Ci1bgm/DkmDte9zFyqMn6xrzQKCgyhefxz9I8rseWUGI0jSecQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-in-ci@1.0.0: - resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} - engines: {node: '>=18'} - hasBin: true - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-installed-globally@1.0.0: - resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} - engines: {node: '>=18'} - - is-interactive@2.0.0: - 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'} - - is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} - engines: {node: '>=16'} - - is-npm@6.0.0: - resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} - engines: {node: '>=12'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-primitive@3.0.1: - resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} - engines: {node: '>=0.10.0'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-standalone-pwa@0.1.1: - resolution: {integrity: sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==} - - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - - is-stream@2.0.1: - 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} - - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@0.1.0: - 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'} - - is-unicode-supported@2.1.0: - 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'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - isobject@4.0.0: - resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==} - engines: {node: '>=0.10.0'} - - istanbul-lib-coverage@3.2.2: - 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'} - - istanbul-lib-instrument@6.0.3: - 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'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - iterare@1.2.1: - resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} - engines: {node: '>=6'} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jackspeak@4.1.0: - resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} - engines: {node: 20 || >=22} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - - jest-changed-files@29.7.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} - - jest-cli@29.7.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 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.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' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.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} - - 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} - - jest-environment-jsdom@29.7.0: - resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jest-environment-node@29.7.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} - - jest-haste-map@29.7.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} - - 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} - - 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} - - jest-mock@29.7.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'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - 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} - - jest-resolve-dependencies@29.7.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} - - jest-runner@29.7.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} - - jest-snapshot@29.7.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} - - jest-validate@29.7.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} - - jest-worker@27.5.1: - 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} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - 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 - peerDependenciesMeta: - node-notifier: - optional: true - - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - - jmespath@0.16.0: - resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} - engines: {node: '>= 0.6.0'} - - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - - jose@6.0.10: - resolution: {integrity: sha512-skIAxZqcMkOrSwjJvplIPYrlXGpxTPnro2/QWTDCxAdWQrSTV5/KqspMWmi5WAx5+ULswASJiZ0a+1B/Lxt9cw==} - - jquery@3.7.1: - resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} - - js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - - jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jsdom@26.0.0: - resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-parse-even-better-errors@4.0.0: - resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} - engines: {node: ^18.17.0 || >=20.5.0} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - - jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - - jwa@2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - - jwt-decode@4.0.0: - resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} - engines: {node: '>=18'} - - kareem@2.6.3: - resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} - engines: {node: '>=12.0.0'} - - keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - keyv@5.3.2: - resolution: {integrity: sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==} - - kind-of@6.0.3: - 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'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - - koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} - - koa@2.16.1: - resolution: {integrity: sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} - - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - - ky@1.7.5: - resolution: {integrity: sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==} - engines: {node: '>=18'} - - latest-version@9.0.0: - resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} - engines: {node: '>=18'} - - launch-editor@2.10.0: - resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} - - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - - less-loader@12.2.0: - resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - less@4.2.2: - resolution: {integrity: sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==} - engines: {node: '>=6'} - hasBin: true - - leven@3.1.0: - 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'} - - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lines-and-columns@2.0.4: - resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - - lint-staged@15.5.0: - resolution: {integrity: sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==} - engines: {node: '>=18.12.0'} - hasBin: true - - listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} - engines: {node: '>=18.0.0'} - - load-json-file@7.0.1: - resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - - loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - 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} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} - - log-symbols@7.0.0: - resolution: {integrity: sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==} - engines: {node: '>=18'} - - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - - log4js@6.9.1: - resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} - engines: {node: '>=8.0'} - - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - - long@5.3.1: - resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lowercase-keys@3.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==} - - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} - engines: {node: 20 || >=22} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - luxon@3.6.0: - resolution: {integrity: sha512-WE7p0p7W1xji9qxkLYsvcIxZyfP48GuFrWIBQZIsbjCyf65dG1rv4n83HcOyEyhvzxJCrUoObCRNFgRNIQ5KNA==} - engines: {node: '>=12'} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-dir@5.0.0: - resolution: {integrity: sha512-G0yBotnlWVonPClw+tq+xi4K7DZC9n96HjGTBDdHkstAVsDkfZhi1sTvZypXLpyQTbISBkDtK0E5XlUqDsShQg==} - engines: {node: '>=18'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - map-obj@5.0.2: - resolution: {integrity: sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - - marked@15.0.7: - resolution: {integrity: sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==} - engines: {node: '>= 18'} - hasBin: true - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} - - mdn-data@2.18.0: - resolution: {integrity: sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - memfs@4.17.0: - resolution: {integrity: sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==} - engines: {node: '>= 4.0.0'} - - memory-pager@1.5.0: - resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - - meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} - engines: {node: '>=18'} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - 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'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - 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'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - - mime@4.0.6: - resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} - engines: {node: '>=16'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - mimic-function@5.0.1: - 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'} - - 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} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - mini-css-extract-plugin@2.9.2: - resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} - engines: {node: '>= 18'} - - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - mocha@11.1.0: - resolution: {integrity: sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - - module-details-from-path@1.0.3: - resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} - - moment-timezone@0.5.48: - resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} - - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - - mongodb-connection-string-url@3.0.2: - resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} - - mongodb@6.15.0: - resolution: {integrity: sha512-ifBhQ0rRzHDzqp9jAQP6OwHSH7dbYIQjD3SbJs9YYk9AikKEettW/9s/tbSFDTpXcRbF+u1aLrhHxDFaYtZpFQ==} - engines: {node: '>=16.20.1'} - peerDependencies: - '@aws-sdk/credential-providers': ^3.188.0 - '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 - gcp-metadata: ^5.2.0 - kerberos: ^2.0.1 - mongodb-client-encryption: '>=6.0.0 <7' - snappy: ^7.2.2 - socks: ^2.7.1 - peerDependenciesMeta: - '@aws-sdk/credential-providers': - optional: true - '@mongodb-js/zstd': - optional: true - gcp-metadata: - optional: true - kerberos: - optional: true - mongodb-client-encryption: - optional: true - snappy: - optional: true - socks: - optional: true - - mongoose@8.13.0: - resolution: {integrity: sha512-e/iYV1mPeOkg+SWAMHzt3t42/EZyER3OB1H2pjP9C3vQ+Qb5DMeV9Kb+YCUycKgScA3fbwL7dKG4EpinGlg21g==} - engines: {node: '>=16.20.1'} - - morgan@1.10.0: - resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} - engines: {node: '>= 0.8.0'} - - motion-dom@12.6.0: - resolution: {integrity: sha512-1s/+/V0ny/gfhocSSf0qhkspZK2da7jrwGw7xHzgiQPcimdHaPRcRCoJ3OxEZYBNzy3ma1ERUD+eUStk6a9pQw==} - - motion-utils@12.5.0: - resolution: {integrity: sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA==} - - mpath@0.9.0: - resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} - engines: {node: '>=4.0.0'} - - mquery@5.0.0: - resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} - engines: {node: '>=14.0.0'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - multer@2.0.2: - resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} - engines: {node: '>= 10.16.0'} - - multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nan@2.22.2: - resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} - engines: {node: ^18 || >=20} - hasBin: true - - napi-postinstall@0.3.2: - resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} - engines: {node: '>= 4.4.x'} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - next@15.5.9: - resolution: {integrity: sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.51.1 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - - nice-try@3.0.1: - resolution: {integrity: sha512-Fge6ClHO5v/z/tN31B2wlCPfRm289/ag1O2oi+EWNdAhxOZqGW1fWsisROvUuXaE7UEAYdd+upiAMvz57bK2MQ==} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-addon-api@8.3.1: - resolution: {integrity: sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==} - engines: {node: ^18 || ^20 || >= 21} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - - node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} - hasBin: true - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - - nodemailer@6.10.0: - resolution: {integrity: sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==} - engines: {node: '>=6.0.0'} - - nodemon@3.1.9: - resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} - engines: {node: '>=10'} - hasBin: true - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} - - normalize-package-data@7.0.0: - resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} - engines: {node: ^18.17.0 || >=20.5.0} - - normalize-path@3.0.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'} - - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} - engines: {node: '>=14.16'} - - npm-package-arg@12.0.2: - resolution: {integrity: sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - - npm-run-path@4.0.1: - 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} - - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} - - npm@11.2.0: - resolution: {integrity: sha512-PcnFC6gTo9VDkxVaQ1/mZAS3JoWrDjAI+a6e2NgfYQSGDwftJlbdV0jBMi2V8xQPqbGcWaa7p3UP0SKF+Bhm2g==} - engines: {node: ^20.17.0 || >=22.9.0} - hasBin: true - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/redact' - - '@npmcli/run-script' - - '@sigstore/tuf' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - normalize-package-data - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - spdx-expression-parse - - ssri - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - nwsapi@2.2.19: - resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.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'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} - - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - - onetime@5.1.2: - 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'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - - only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - - open@10.1.0: - resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} - engines: {node: '>=18'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@8.2.0: - resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} - engines: {node: '>=18'} - - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-cancelable@4.0.1: - resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} - engines: {node: '>=14.16'} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - 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} - - p-limit@6.2.0: - resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} - engines: {node: '>=18'} - - p-locate@4.1.0: - 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'} - - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - - p-retry@6.2.1: - resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} - engines: {node: '>=16.17'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - p-try@3.0.0: - resolution: {integrity: sha512-nD1xrH3cV2epQsO8pv6p28i/TdrzJQ5g73c41a+fu+3uhABdf7xujY58ebIuSrOQYxNb8WqNDpX6HjYl8P0KfQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - package-json@10.0.1: - resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} - engines: {node: '>=18'} - - pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - - pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - - parent-module@1.0.1: - 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'} - - parse-json@8.2.0: - resolution: {integrity: sha512-eONBZy4hm2AgxjNFd8a4nyDJnzUAH0g34xSQAwWEVGCjdZ4ZL7dKZBfq267GWP/JaS9zW62Xs2FeAdDvpHHJGQ==} - engines: {node: '>=18'} - - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - - parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} - engines: {node: '>= 0.10'} - - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-exists@4.0.0: - 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} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} - - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - - path@0.12.7: - resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - - peek-readable@7.0.0: - resolution: {integrity: sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==} - engines: {node: '>=18'} - - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - - pg-cloudflare@1.1.1: - resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} - - pg-connection-string@2.7.0: - resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==} - - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-pool@3.8.0: - resolution: {integrity: sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==} - peerDependencies: - pg: '>=8.0' - - pg-protocol@1.8.0: - resolution: {integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==} - - pg-types@2.2.0: - resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} - engines: {node: '>=4'} - - pg@8.14.1: - resolution: {integrity: sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==} - engines: {node: '>= 8.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - - pgpass@1.0.5: - resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - - pify@6.1.0: - resolution: {integrity: sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw==} - engines: {node: '>=14.16'} - - pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - - pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - - pino@9.6.0: - resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} - hasBin: true - - pirates@4.0.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'} - - pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} - - pkg-dir@8.0.0: - resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} - engines: {node: '>=18'} - - playwright-core@1.51.1: - resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.51.1: - resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} - engines: {node: '>=18'} - hasBin: true - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - - pnpm@11.3.0: - resolution: {integrity: sha512-LEA9ZZRScodnKx9wVjQ6H3w2NANqZ/+r/MKz11ldhDdo+HhxSNG1fPeVbJBga70ZKFfDY68Z6W0tDsnsV0HSFQ==} - engines: {node: '>=22.13'} - hasBin: true - - polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-calc@10.1.1: - resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} - engines: {node: ^18.12 || ^20.9 || >=22.0} - peerDependencies: - postcss: ^8.4.38 - - postcss-colormin@7.0.2: - resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-convert-values@7.0.4: - resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-comments@7.0.3: - resolution: {integrity: sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-duplicates@7.0.1: - resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-empty@7.0.0: - resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-overridden@7.0.0: - resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-import@16.1.0: - resolution: {integrity: sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==} - engines: {node: '>=18.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - postcss-loader@8.1.1: - resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - postcss-merge-longhand@7.0.4: - resolution: {integrity: sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-merge-rules@7.0.4: - resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-font-values@7.0.0: - resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-gradients@7.0.0: - resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-params@7.0.2: - resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-selectors@7.0.4: - resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.2.0: - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-values@4.0.0: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-nested@7.0.2: - resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} - engines: {node: '>=18.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-normalize-charset@7.0.0: - resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-display-values@7.0.0: - resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-positions@7.0.0: - resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-repeat-style@7.0.0: - resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-string@7.0.0: - resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-timing-functions@7.0.0: - resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-unicode@7.0.2: - resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-url@7.0.0: - resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-whitespace@7.0.0: - resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-ordered-values@7.0.1: - resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-initial@7.0.2: - resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-transforms@7.0.0: - resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} - engines: {node: '>=4'} - - postcss-svgo@7.0.1: - resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==} - engines: {node: ^18.12.0 || ^20.9.0 || >= 18} - peerDependencies: - postcss: ^8.4.31 - - postcss-unique-selectors@7.0.3: - resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - postgres-array@2.0.0: - resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} - engines: {node: '>=4'} - - postgres-bytea@1.0.0: - resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} - engines: {node: '>=0.10.0'} - - postgres-date@1.0.7: - resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} - engines: {node: '>=0.10.0'} - - postgres-interval@1.2.0: - resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} - engines: {node: '>=0.10.0'} - - prelude-ls@1.2.1: - 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'} - - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - - pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - - pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} - engines: {node: '>=18'} - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - process-warning@4.0.1: - resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - property-expr@2.0.6: - resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} - - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - - protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - - proxy-addr@2.0.7: - 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==} - - prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - - pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pupa@3.1.0: - resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} - engines: {node: '>=12.20'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - query-string@9.1.1: - resolution: {integrity: sha512-MWkCOVIcJP9QSKU52Ngow6bsAWAPlPK2MludXvcrS2bGZSl+T1qX9MZvRIkqUIkGLJquMJHWfsT6eRqUpp4aWg==} - engines: {node: '>=18'} - - querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - - ramda@0.30.1: - resolution: {integrity: sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - range-parser@1.2.1: - 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'} - - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-dom@19.0.0: - resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} - peerDependencies: - react: ^19.0.0 - - react-hook-form@7.54.2: - resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-is@19.0.0: - resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} - - react-redux@9.2.0: - resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} - peerDependencies: - '@types/react': ^18.2.25 || ^19 - react: ^18.0 || ^19 - redux: ^5.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - redux: - optional: true - - react-refresh@0.16.0: - resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==} - engines: {node: '>=0.10.0'} - - react-router-dom@7.4.0: - resolution: {integrity: sha512-VlksBPf3n2bijPvnA7nkTsXxMAKOj+bWp4R9c3i+bnwlSOFAGOkJkKhzy/OsRkWaBMICqcAl1JDzh9ZSOze9CA==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - - react-router@7.4.0: - resolution: {integrity: sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true - - react-router@7.7.0: - resolution: {integrity: sha512-3FUYSwlvB/5wRJVTL/aavqHmfUKe0+Xm9MllkYgGo9eDwNdkvwlJGjpPxono1kCycLt6AnDTgjmXvK3/B4QGuw==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true - - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - readdir-glob@1.1.3: - resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - - recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} - engines: {node: '>= 4'} - - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} - - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - - redent@4.0.0: - resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} - engines: {node: '>=12'} - - redis-errors@1.2.0: - resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} - engines: {node: '>=4'} - - redis-parser@3.0.0: - resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} - engines: {node: '>=4'} - - redux-thunk@3.1.0: - resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} - peerDependencies: - redux: ^5.0.0 - - redux@5.0.1: - resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - - reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} - engines: {node: '>=4'} - - registry-auth-token@5.1.0: - resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} - engines: {node: '>=14'} - - registry-url@6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} - engines: {node: '>=12'} - - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} - hasBin: true - - relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - - renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - - require-directory@2.1.1: - 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'} - - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - reselect@5.1.1: - resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} - - resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - - resolve-alpn@1.2.1: - 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'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} - engines: {node: '>=10'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true - - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true - - rollup@4.37.0: - resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} - engines: {node: '>=18'} - - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sass-loader@16.0.5: - resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - webpack: - optional: true - - sass@1.86.0: - resolution: {integrity: sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==} - engines: {node: '>=14.0.0'} - hasBin: true - - sax@1.2.1: - resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - scheduler@0.25.0: - resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} - - schema-utils@4.3.0: - resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} - engines: {node: '>= 10.13.0'} - - select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} - - send@1.1.0: - resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} - engines: {node: '>= 18'} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - - set-function-length@1.2.2: - 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'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - set-value@4.1.0: - resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} - engines: {node: '>=11.0'} - - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shebang-regex@4.0.0: - resolution: {integrity: sha512-YSKeSljCliLkWidW84GWL1HCguI0iEqhnBOLhrVXw/fN9he9ngekCy8zqJ1jXTPYmJ3Xkf3gLuNDVHQWdRqinw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} - - shelljs@0.9.2: - resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} - engines: {node: '>=18'} - hasBin: true - - shimmer@1.2.1: - resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - 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'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - sift@17.1.3: - resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-git@3.27.0: - resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@5.1.0: - 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'} - - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} - - socket.io-client@4.8.1: - resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} - engines: {node: '>=10.0.0'} - - socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} - - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} - engines: {node: '>=10.2.0'} - - sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - sparse-bitfield@3.0.3: - resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - - spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - - spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - - split-on-first@3.0.0: - resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} - engines: {node: '>=12'} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} - engines: {node: '>=12.0.0'} - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - - standard-as-callback@2.1.0: - resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} - - statuses@1.5.0: - 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'} - - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - - streamroller@3.1.5: - resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} - engines: {node: '>=8.0'} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} - - string-argv@0.3.2: - 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'} - - string-length@6.0.0: - resolution: {integrity: sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==} - engines: {node: '>=16'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-bom@3.0.0: - 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'} - - strip-bom@5.0.0: - resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} - engines: {node: '>=12'} - - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} - engines: {node: '>=12'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - strip-json-comments@5.0.1: - resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} - engines: {node: '>=14.16'} - - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - - strnum@2.0.5: - resolution: {integrity: sha512-YAT3K/sgpCUxhxNMrrdhtod3jckkpYwH6JAuwmUdXZsmzH1wUyzTMrrK2wYCEEqlKwrWDd35NeuUkbBy/1iK+Q==} - - strtok3@10.2.2: - resolution: {integrity: sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==} - engines: {node: '>=18'} - - stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} - - style-loader@4.0.0: - resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.27.0 - - styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - stylehacks@7.0.4: - resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - superagent@10.2.0: - resolution: {integrity: sha512-IKeoGox6oG9zyDeizaezkJ2/aK0wc5la9st7WsAKyrAkfJ56W3whVbVtF68k6wuc87/y9T85NyON5FLz7Mrzzw==} - engines: {node: '>=14.18.0'} - 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 - - supports-color@10.0.0: - resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} - engines: {node: '>=18'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} - engines: {node: '>=14.0.0'} - hasBin: true - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} - engines: {node: ^14.18.0 || >=16.0.0} - - tailwind-merge@3.0.2: - resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} - - tailwindcss@4.0.16: - resolution: {integrity: sha512-i/SbG7ThTIcLshcFJL+je7hCv9dPis4Xl4XNeel6iZNX42pp/BZ+la+SbZIPoYE+PN8zhKbnHblpQ/lhOWwIeQ==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - deprecated: Old versions of tar 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 - - terser-webpack-plugin@5.3.14: - resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.39.0: - resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} - engines: {node: '>=10'} - hasBin: true - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - - thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - - through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - - tiny-case@1.0.3: - resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - - tldts-core@6.1.85: - resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} - - tldts@6.1.85: - resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} - hasBin: true - - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - - tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-regex-range@5.0.1: - 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'} - - token-types@6.0.0: - resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} - engines: {node: '>=14.16'} - - toposort@2.0.2: - resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} - - touch@3.1.1: - resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} - hasBin: true - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} - engines: {node: '>=16'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} - - tr46@5.1.0: - resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} - engines: {node: '>=18'} - - tree-dump@1.0.2: - resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - ts-jest@29.3.0: - resolution: {integrity: sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-loader@9.5.2: - resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} - - turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} - - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - - tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - - type-check@0.4.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'} - - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-fest@4.38.0: - resolution: {integrity: sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==} - engines: {node: '>=16'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typedarray-to-buffer@4.0.0: - resolution: {integrity: sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - - typedarray@0.0.7: - resolution: {integrity: sha512-ueeb9YybpjhivjbHP2LdFDAjbS948fGEPj+ACAMs4xCMmh72OCOMQWBQKlaN4ZNQ04yfLSDLSx1tGRIoWimObQ==} - - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - - ua-is-frozen@0.1.2: - resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==} - - ua-parser-js@2.0.3: - resolution: {integrity: sha512-LZyXZdNttONW8LjzEH3Z8+6TE7RfrEiJqDKyh0R11p/kxvrV2o9DrT2FGZO+KVNs3k+drcIQ6C3En6wLnzJGpw==} - hasBin: true - - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - uid@2.0.2: - resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} - engines: {node: '>=8'} - - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} - engines: {node: '>=18'} - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - - undici@6.21.2: - resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} - engines: {node: '>=18.17'} - - undici@7.5.0: - resolution: {integrity: sha512-NFQG741e8mJ0fLQk90xKxFdaSM7z4+IQpAgsFI36bCDY9Z2+aXXZjVy2uUksMouWfMI9+w5ejOq5zYYTBCQJDQ==} - engines: {node: '>=20.18.1'} - - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - universal-user-agent@7.0.2: - resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - 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'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-notifier@7.3.1: - resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} - engines: {node: '>=18'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - url@0.10.3: - resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} - - url@0.11.4: - resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} - engines: {node: '>= 0.4'} - - use-sync-external-store@1.4.0: - resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - util@0.10.4: - resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} - - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - - utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@8.0.0: - resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). - hasBin: true - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). - hasBin: true - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). - hasBin: true - - v8-compile-cache-lib@3.0.1: - 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'} - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - - validate-npm-package-name@6.0.0: - resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} - engines: {node: ^18.17.0 || >=20.5.0} - - validator@13.15.0: - resolution: {integrity: sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==} - engines: {node: '>= 0.10'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vue-router@4.5.0: - resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} - peerDependencies: - vue: ^3.2.0 - - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} - - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} - engines: {node: '>=10.13.0'} - - wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - web-vitals@4.2.4: - resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - webpack-cli@6.0.1: - resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} - engines: {node: '>=18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.82.0 - webpack-bundle-analyzer: '*' - webpack-dev-server: '*' - peerDependenciesMeta: - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - - webpack-dev-middleware@7.4.2: - resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - - webpack-dev-server@5.2.2: - resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} - engines: {node: '>= 18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - - webpack-merge@6.0.1: - resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} - engines: {node: '>=18.0.0'} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack@5.98.0: - resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - - whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} - - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - when-exit@2.1.4: - resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - widest-line@5.0.0: - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} - engines: {node: '>=18'} - - wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} - engines: {node: '>= 12.0.0'} - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - workerpool@6.5.1: - resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - - wrap-ansi@6.2.0: - 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'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - - wrappy@1.0.2: - 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} - - write-file-atomic@6.0.0: - resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xdg-basedir@5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} - engines: {node: '>=12'} - - xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} - - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - xmlhttprequest-ssl@2.1.2: - resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} - engines: {node: '>=0.4.0'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - - yargs@17.7.2: - 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'} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yn@5.0.0: - resolution: {integrity: sha512-+l37+9TyGEsyxGLaTg6QgYy5KnOp74ZZl4dPFLQpBWSkO99uBC5jnS0pOGwXFViPbiaEtWbParH2KrgWWF2duQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} - - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} - engines: {node: '>=18'} - - yup@1.6.1: - resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} - - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} - - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} - - zone.js@0.15.0: - resolution: {integrity: sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==} - -snapshots: - - '@adobe/css-tools@4.4.2': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@angular-devkit/core@19.2.4(chokidar@4.0.3)': - dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - jsonc-parser: 3.3.1 - picomatch: 4.0.2 - rxjs: 7.8.1 - source-map: 0.7.4 - optionalDependencies: - chokidar: 4.0.3 - - '@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2)': - dependencies: - '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) - rxjs: 7.8.2 - tslib: 2.8.1 - - '@angular/compiler@19.2.3': - dependencies: - tslib: 2.8.1 - - '@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)': - dependencies: - rxjs: 7.8.2 - tslib: 2.8.1 - zone.js: 0.15.0 - - '@angular/forms@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2)': - dependencies: - '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) - '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) - '@angular/platform-browser': 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) - rxjs: 7.8.2 - tslib: 2.8.1 - - '@angular/platform-browser-dynamic@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/compiler@19.2.3)(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))': - dependencies: - '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) - '@angular/compiler': 19.2.3 - '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) - '@angular/platform-browser': 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) - tslib: 2.8.1 - - '@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))': - dependencies: - '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) - '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) - tslib: 2.8.1 - - '@angular/router@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2)': - dependencies: - '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) - '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) - '@angular/platform-browser': 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) - rxjs: 7.8.2 - tslib: 2.8.1 - - '@asamuzakjp/css-color@3.1.1': - dependencies: - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 - lru-cache: 10.4.3 - - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - tslib: 2.8.1 - - '@aws-crypto/crc32c@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - tslib: 2.8.1 - - '@aws-crypto/sha1-browser@5.2.0': - dependencies: - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-locate-window': 3.723.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-locate-window': 3.723.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-js@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - tslib: 2.8.1 - - '@aws-crypto/supports-web-crypto@5.2.0': - dependencies: - tslib: 2.8.1 - - '@aws-crypto/util@5.2.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/client-s3@3.774.0': - dependencies: - '@aws-crypto/sha1-browser': 5.2.0 - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/credential-provider-node': 3.774.0 - '@aws-sdk/middleware-bucket-endpoint': 3.734.0 - '@aws-sdk/middleware-expect-continue': 3.734.0 - '@aws-sdk/middleware-flexible-checksums': 3.774.0 - '@aws-sdk/middleware-host-header': 3.774.0 - '@aws-sdk/middleware-location-constraint': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.772.0 - '@aws-sdk/middleware-sdk-s3': 3.774.0 - '@aws-sdk/middleware-ssec': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.774.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/signature-v4-multi-region': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.774.0 - '@aws-sdk/xml-builder': 3.734.0 - '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.2.0 - '@smithy/eventstream-serde-browser': 4.0.2 - '@smithy/eventstream-serde-config-resolver': 4.1.0 - '@smithy/eventstream-serde-node': 4.0.2 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-blob-browser': 4.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/hash-stream-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/md5-js': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.0 - '@smithy/middleware-retry': 4.1.0 - '@smithy/middleware-serde': 4.0.3 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.8 - '@smithy/util-defaults-mode-node': 4.0.8 - '@smithy/util-endpoints': 3.0.2 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.3 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso-oidc@3.774.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/credential-provider-node': 3.774.0 - '@aws-sdk/middleware-host-header': 3.774.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.772.0 - '@aws-sdk/middleware-user-agent': 3.774.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.774.0 - '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.2.0 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.0 - '@smithy/middleware-retry': 4.1.0 - '@smithy/middleware-serde': 4.0.3 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.8 - '@smithy/util-defaults-mode-node': 4.0.8 - '@smithy/util-endpoints': 3.0.2 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.774.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/middleware-host-header': 3.774.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.772.0 - '@aws-sdk/middleware-user-agent': 3.774.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.774.0 - '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.2.0 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.0 - '@smithy/middleware-retry': 4.1.0 - '@smithy/middleware-serde': 4.0.3 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.8 - '@smithy/util-defaults-mode-node': 4.0.8 - '@smithy/util-endpoints': 3.0.2 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sts@3.774.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/credential-provider-node': 3.774.0 - '@aws-sdk/middleware-host-header': 3.774.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.772.0 - '@aws-sdk/middleware-user-agent': 3.774.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.774.0 - '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.2.0 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.0 - '@smithy/middleware-retry': 4.1.0 - '@smithy/middleware-serde': 4.0.3 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.8 - '@smithy/util-defaults-mode-node': 4.0.8 - '@smithy/util-endpoints': 3.0.2 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.774.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/core': 3.2.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/property-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.0.2 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/util-middleware': 4.0.2 - fast-xml-parser: 4.4.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/property-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/util-stream': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/credential-provider-env': 3.774.0 - '@aws-sdk/credential-provider-http': 3.774.0 - '@aws-sdk/credential-provider-process': 3.774.0 - '@aws-sdk/credential-provider-sso': 3.774.0 - '@aws-sdk/credential-provider-web-identity': 3.774.0 - '@aws-sdk/nested-clients': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/credential-provider-imds': 4.0.2 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.774.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.774.0 - '@aws-sdk/credential-provider-http': 3.774.0 - '@aws-sdk/credential-provider-ini': 3.774.0 - '@aws-sdk/credential-provider-process': 3.774.0 - '@aws-sdk/credential-provider-sso': 3.774.0 - '@aws-sdk/credential-provider-web-identity': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/credential-provider-imds': 4.0.2 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.774.0': - dependencies: - '@aws-sdk/client-sso': 3.774.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/token-providers': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/nested-clients': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/middleware-bucket-endpoint@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-arn-parser': 3.723.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-expect-continue@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-flexible-checksums@3.774.0': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/crc32c': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/is-array-buffer': 4.0.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-host-header@3.774.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-location-constraint@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.772.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-arn-parser': 3.723.0 - '@smithy/core': 3.2.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.0.2 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-ssec@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.774.0': - dependencies: - '@aws-sdk/core': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@smithy/core': 3.2.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.774.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.774.0 - '@aws-sdk/middleware-host-header': 3.774.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.772.0 - '@aws-sdk/middleware-user-agent': 3.774.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.774.0 - '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.2.0 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.0 - '@smithy/middleware-retry': 4.1.0 - '@smithy/middleware-serde': 4.0.3 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.8 - '@smithy/util-defaults-mode-node': 4.0.8 - '@smithy/util-endpoints': 3.0.2 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.774.0': - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.774.0': - dependencies: - '@aws-sdk/nested-clients': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.734.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.723.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.743.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.2.0 - '@smithy/util-endpoints': 3.0.2 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.723.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.2.0 - bowser: 2.11.0 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.774.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.774.0 - '@aws-sdk/types': 3.734.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.734.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@azure/abort-controller@2.1.2': - dependencies: - tslib: 2.8.1 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.26.8': {} - - '@babel/core@7.26.10(supports-color@10.0.0)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helpers': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - '@babel/types': 7.27.0 - convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@10.0.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.27.0': - dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.25.9': - dependencies: - '@babel/types': 7.27.0 - - '@babel/helper-compilation-targets@7.27.0': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9(supports-color@10.0.0) - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) - '@babel/traverse': 7.27.0(supports-color@10.0.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0(supports-color@10.0.0) - lodash.debounce: 4.0.8 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - '@babel/helper-member-expression-to-functions@7.25.9(supports-color@10.0.0)': - dependencies: - '@babel/traverse': 7.27.0(supports-color@10.0.0) - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.25.9(supports-color@10.0.0)': - dependencies: - '@babel/traverse': 7.27.0(supports-color@10.0.0) - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.25.9': - dependencies: - '@babel/types': 7.27.0 - - '@babel/helper-plugin-utils@7.26.5': {} - - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9(supports-color@10.0.0) - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-member-expression-to-functions': 7.25.9(supports-color@10.0.0) - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.25.9(supports-color@10.0.0)': - dependencies: - '@babel/traverse': 7.27.0(supports-color@10.0.0) - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helper-wrap-function@7.25.9(supports-color@10.0.0)': - dependencies: - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.27.0': - dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 - - '@babel/parser@7.27.0': - dependencies: - '@babel/types': 7.27.0 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/traverse': 7.27.0(supports-color@10.0.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.27.0 - - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 - - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/preset-env@7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10(supports-color@10.0.0)) - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - core-js-compat: 3.41.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10(supports-color@10.0.0))': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.27.0 - esutils: 2.0.3 - - '@babel/preset-react@7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@babel/runtime@7.27.0': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.27.0': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - - '@babel/traverse@7.27.0(supports-color@10.0.0)': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 - debug: 4.4.0(supports-color@10.0.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.27.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@bcoe/v8-coverage@0.2.3': {} - - '@colors/colors@1.5.0': - optional: true - - '@colors/colors@1.6.0': {} - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@csstools/color-helpers@5.0.2': {} - - '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': - dependencies: - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 - - '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': - dependencies: - '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 - - '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': - dependencies: - '@csstools/css-tokenizer': 3.0.3 - - '@csstools/css-tokenizer@3.0.3': {} - - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - - '@discoveryjs/json-ext@0.6.3': {} - - '@emnapi/core@1.4.5': - dependencies: - '@emnapi/wasi-threads': 1.0.4 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.3.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.4.5': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.7.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.0.4': - dependencies: - tslib: 2.8.1 - optional: true - - '@emotion/babel-plugin@11.13.5(supports-color@10.0.0)': - dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) - '@babel/runtime': 7.27.0 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.14.0': - dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} - - '@emotion/is-prop-valid@1.3.1': - dependencies: - '@emotion/memoize': 0.9.0 - - '@emotion/memoize@0.9.0': {} - - '@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0)': - dependencies: - '@babel/runtime': 7.27.0 - '@emotion/babel-plugin': 11.13.5(supports-color@10.0.0) - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - hoist-non-react-statics: 3.3.2 - react: 18.3.1 - optionalDependencies: - '@types/react': 19.0.12 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.3.3': - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.1.3 - - '@emotion/sheet@1.4.0': {} - - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0)': - dependencies: - '@babel/runtime': 7.27.0 - '@emotion/babel-plugin': 11.13.5(supports-color@10.0.0) - '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) - '@emotion/utils': 1.4.2 - react: 18.3.1 - optionalDependencies: - '@types/react': 19.0.12 - transitivePeerDependencies: - - supports-color - - '@emotion/unitless@0.10.0': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@emotion/utils@1.4.2': {} - - '@emotion/weak-memoize@0.4.0': {} - - '@esbuild/aix-ppc64@0.25.1': - optional: true - - '@esbuild/android-arm64@0.25.1': - optional: true - - '@esbuild/android-arm@0.25.1': - optional: true - - '@esbuild/android-x64@0.25.1': - optional: true - - '@esbuild/darwin-arm64@0.25.1': - optional: true - - '@esbuild/darwin-x64@0.25.1': - optional: true - - '@esbuild/freebsd-arm64@0.25.1': - optional: true - - '@esbuild/freebsd-x64@0.25.1': - optional: true - - '@esbuild/linux-arm64@0.25.1': - optional: true - - '@esbuild/linux-arm@0.25.1': - optional: true - - '@esbuild/linux-ia32@0.25.1': - optional: true - - '@esbuild/linux-loong64@0.25.1': - optional: true - - '@esbuild/linux-mips64el@0.25.1': - optional: true - - '@esbuild/linux-ppc64@0.25.1': - optional: true - - '@esbuild/linux-riscv64@0.25.1': - optional: true - - '@esbuild/linux-s390x@0.25.1': - optional: true - - '@esbuild/linux-x64@0.25.1': - optional: true - - '@esbuild/netbsd-arm64@0.25.1': - optional: true - - '@esbuild/netbsd-x64@0.25.1': - optional: true - - '@esbuild/openbsd-arm64@0.25.1': - optional: true - - '@esbuild/openbsd-x64@0.25.1': - optional: true - - '@esbuild/sunos-x64@0.25.1': - optional: true - - '@esbuild/win32-arm64@0.25.1': - optional: true - - '@esbuild/win32-ia32@0.25.1': - optional: true - - '@esbuild/win32-x64@0.25.1': - optional: true - - '@eslint-community/eslint-utils@4.5.1(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))': - dependencies: - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))': - dependencies: - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.21.0(supports-color@10.0.0)': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.0(supports-color@10.0.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.3.0': {} - - '@eslint/core@0.15.1': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1(supports-color@10.0.0)': - dependencies: - ajv: 6.12.6 - debug: 4.4.0(supports-color@10.0.0) - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.23.0': {} - - '@eslint/js@9.31.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.3.3': - dependencies: - '@eslint/core': 0.15.1 - levn: 0.4.1 - - '@floating-ui/core@1.6.9': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.6.13': - dependencies: - '@floating-ui/core': 1.6.9 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/utils@0.2.9': {} - - '@graphql-tools/utils@10.8.6(graphql@16.10.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) - '@whatwg-node/promise-helpers': 1.3.0 - cross-inspect: 1.0.1 - dset: 3.1.4 - graphql: 16.10.0 - tslib: 2.8.1 - - '@graphql-typed-document-node/core@3.2.0(graphql@16.10.0)': - dependencies: - graphql: 16.10.0 - - '@grpc/grpc-js@1.13.1': - dependencies: - '@grpc/proto-loader': 0.7.13 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.7.13': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.1 - protobufjs: 7.4.0 - yargs: 17.7.2 - - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.2': {} - - '@img/colour@1.0.0': - optional: true - - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.3.1 - optional: true - - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.7.1 - optional: true - - '@img/sharp-win32-arm64@0.34.5': - optional: true - - '@img/sharp-win32-ia32@0.33.5': - optional: true - - '@img/sharp-win32-ia32@0.34.5': - optional: true - - '@img/sharp-win32-x64@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.34.5': - optional: true - - '@inquirer/checkbox@4.1.4(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.13) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/confirm@5.1.8(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/core@10.1.9(@types/node@22.13.13)': - dependencies: - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.13) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/editor@4.2.9(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - external-editor: 3.1.0 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/expand@4.0.11(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/figures@1.0.11': {} - - '@inquirer/input@4.1.8(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/number@3.0.11(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/password@4.0.11(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - ansi-escapes: 4.3.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/prompts@7.4.0(@types/node@22.13.13)': - dependencies: - '@inquirer/checkbox': 4.1.4(@types/node@22.13.13) - '@inquirer/confirm': 5.1.8(@types/node@22.13.13) - '@inquirer/editor': 4.2.9(@types/node@22.13.13) - '@inquirer/expand': 4.0.11(@types/node@22.13.13) - '@inquirer/input': 4.1.8(@types/node@22.13.13) - '@inquirer/number': 3.0.11(@types/node@22.13.13) - '@inquirer/password': 4.0.11(@types/node@22.13.13) - '@inquirer/rawlist': 4.0.11(@types/node@22.13.13) - '@inquirer/search': 3.0.11(@types/node@22.13.13) - '@inquirer/select': 4.1.0(@types/node@22.13.13) - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/rawlist@4.0.11(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/search@3.0.11(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.13) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/select@4.1.0(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.13) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.13 - - '@inquirer/type@3.0.5(@types/node@22.13.13)': - optionalDependencies: - '@types/node': 22.13.13 - - '@ioredis/commands@1.2.0': {} - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0(supports-color@10.0.0) - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0(supports-color@10.0.0) - jest-runner: 29.7.0(supports-color@10.0.0) - jest-runtime: 29.7.0(supports-color@10.0.0) - jest-snapshot: 29.7.0(supports-color@10.0.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0(supports-color@10.0.0)': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.13.13 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0(supports-color@10.0.0)': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0(supports-color@10.0.0)': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.13.13 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3(supports-color@10.0.0) - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1(supports-color@10.0.0) - istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0(supports-color@10.0.0)': - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1(supports-color@10.0.0) - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.13 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@js-sdsl/ordered-map@4.4.2': {} - - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@1.2.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@keyv/serialize@1.0.3': - dependencies: - buffer: 6.0.3 - - '@kwsites/file-exists@1.1.1(supports-color@10.0.0)': - dependencies: - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - '@kwsites/promise-deferred@1.1.1': {} - - '@leichtgewicht/ip-codec@2.0.5': {} - - '@lukeed/csprng@1.1.0': {} - - '@mongodb-js/saslprep@1.2.0': - dependencies: - sparse-bitfield: 3.0.3 - - '@mui/core-downloads-tracker@6.4.8': {} - - '@mui/material@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.0 - '@mui/core-downloads-tracker': 6.4.8 - '@mui/system': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1) - '@mui/types': 7.2.24(@types/react@19.0.12) - '@mui/utils': 6.4.8(@types/react@19.0.12)(react@18.3.1) - '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.0.12) - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - react-is: 19.0.0 - react-transition-group: 4.4.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@types/react': 19.0.12 - - '@mui/private-theming@6.4.8(@types/react@19.0.12)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.0 - '@mui/utils': 6.4.8(@types/react@19.0.12)(react@18.3.1) - prop-types: 15.8.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 19.0.12 - - '@mui/styled-engine@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.0 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/sheet': 1.4.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - - '@mui/system@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.0 - '@mui/private-theming': 6.4.8(@types/react@19.0.12)(react@18.3.1) - '@mui/styled-engine': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(react@18.3.1) - '@mui/types': 7.2.24(@types/react@19.0.12) - '@mui/utils': 6.4.8(@types/react@19.0.12)(react@18.3.1) - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) - '@types/react': 19.0.12 - - '@mui/types@7.2.24(@types/react@19.0.12)': - optionalDependencies: - '@types/react': 19.0.12 - - '@mui/utils@6.4.8(@types/react@19.0.12)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.0 - '@mui/types': 7.2.24(@types/react@19.0.12) - '@types/prop-types': 15.7.14 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 18.3.1 - react-is: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 - optional: true - - '@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2)': - dependencies: - iterare: 1.2.1 - reflect-metadata: 0.2.2 - rxjs: 7.8.2 - tslib: 2.8.1 - uid: 2.0.2 - - '@next/env@15.5.9': {} - - '@next/swc-darwin-arm64@15.5.7': - optional: true - - '@next/swc-darwin-x64@15.5.7': - optional: true - - '@next/swc-linux-arm64-gnu@15.5.7': - optional: true - - '@next/swc-linux-arm64-musl@15.5.7': - optional: true - - '@next/swc-linux-x64-gnu@15.5.7': - optional: true - - '@next/swc-linux-x64-musl@15.5.7': - optional: true - - '@next/swc-win32-arm64-msvc@15.5.7': - optional: true - - '@next/swc-win32-x64-msvc@15.5.7': - optional: true - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.scandir@4.0.1': - dependencies: - '@nodelib/fs.stat': 4.0.0 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.stat@4.0.0': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@nodelib/fs.walk@3.0.1': - dependencies: - '@nodelib/fs.scandir': 4.0.1 - fastq: 1.19.1 - - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.1 - - '@octokit/auth-token@5.1.2': {} - - '@octokit/core@6.1.4': - dependencies: - '@octokit/auth-token': 5.1.2 - '@octokit/graphql': 8.2.1 - '@octokit/request': 9.2.2 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.10.0 - before-after-hook: 3.0.2 - universal-user-agent: 7.0.2 - - '@octokit/endpoint@10.1.3': - dependencies: - '@octokit/types': 13.10.0 - universal-user-agent: 7.0.2 - - '@octokit/graphql@8.2.1': - dependencies: - '@octokit/request': 9.2.2 - '@octokit/types': 13.10.0 - universal-user-agent: 7.0.2 - - '@octokit/openapi-types@24.2.0': {} - - '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.4)': - dependencies: - '@octokit/core': 6.1.4 - '@octokit/types': 13.10.0 - - '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.4)': - dependencies: - '@octokit/core': 6.1.4 - - '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.4)': - dependencies: - '@octokit/core': 6.1.4 - '@octokit/types': 13.10.0 - - '@octokit/request-error@6.1.7': - dependencies: - '@octokit/types': 13.10.0 - - '@octokit/request@9.2.2': - dependencies: - '@octokit/endpoint': 10.1.3 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.10.0 - fast-content-type-parse: 2.0.1 - universal-user-agent: 7.0.2 - - '@octokit/rest@21.1.1': - dependencies: - '@octokit/core': 6.1.4 - '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.4) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.4) - '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.4) - - '@octokit/types@13.10.0': - dependencies: - '@octokit/openapi-types': 24.2.0 - - '@opentelemetry/api-logs@0.200.0': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api@1.9.0': {} - - '@opentelemetry/core@2.0.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.30.0 - - '@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0)(supports-color@10.0.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.200.0 - '@types/shimmer': 1.2.0 - import-in-the-middle: 1.13.1 - require-in-the-middle: 7.5.2(supports-color@10.0.0) - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/semantic-conventions@1.30.0': {} - - '@parcel/watcher-android-arm64@2.5.1': - optional: true - - '@parcel/watcher-darwin-arm64@2.5.1': - optional: true - - '@parcel/watcher-darwin-x64@2.5.1': - optional: true - - '@parcel/watcher-freebsd-x64@2.5.1': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-arm-musl@2.5.1': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.5.1': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-x64-musl@2.5.1': - optional: true - - '@parcel/watcher-win32-arm64@2.5.1': - optional: true - - '@parcel/watcher-win32-ia32@2.5.1': - optional: true - - '@parcel/watcher-win32-x64@2.5.1': - optional: true - - '@parcel/watcher@2.5.1': - dependencies: - detect-libc: 1.0.3 - is-glob: 4.0.3 - micromatch: 4.0.8 - node-addon-api: 7.1.1 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 - optional: true - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.2.9': {} - - '@pnpm/config.env-replace@1.1.0': {} - - '@pnpm/network.ca-file@1.0.2': - dependencies: - graceful-fs: 4.2.10 - - '@pnpm/npm-conf@2.3.1': - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - - '@popperjs/core@2.11.8': {} - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.12)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 19.0.12 - - '@radix-ui/react-slot@1.1.2(@types/react@19.0.12)(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 19.0.12 - - '@rollup/pluginutils@5.1.4(rollup@4.37.0)': - dependencies: - '@types/estree': 1.0.7 - estree-walker: 2.0.2 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.37.0 - - '@rollup/rollup-android-arm-eabi@4.37.0': - optional: true - - '@rollup/rollup-android-arm64@4.37.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.37.0': - optional: true - - '@rollup/rollup-darwin-x64@4.37.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.37.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.37.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.37.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.37.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.37.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.37.0': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.37.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.37.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.37.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.37.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.37.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.37.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.37.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.37.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.37.0': - optional: true - - '@rtsao/scc@1.1.0': {} - - '@sec-ant/readable-stream@0.4.1': {} - - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - - '@sinclair/typebox@0.27.8': {} - - '@sinclair/typebox@0.34.31': {} - - '@sindresorhus/is@7.0.1': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@sindresorhus/merge-streams@4.0.0': {} - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@smithy/abort-controller@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/chunked-blob-reader-native@4.0.0': - dependencies: - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/chunked-blob-reader@5.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/config-resolver@4.1.0': - dependencies: - '@smithy/node-config-provider': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - tslib: 2.8.1 - - '@smithy/core@3.2.0': - dependencies: - '@smithy/middleware-serde': 4.0.3 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.0.2': - dependencies: - '@smithy/node-config-provider': 4.0.2 - '@smithy/property-provider': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.0.2': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.2.0 - '@smithy/util-hex-encoding': 4.0.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.0.2': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.1.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.0.2': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.0.2': - dependencies: - '@smithy/eventstream-codec': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.0.2': - dependencies: - '@smithy/protocol-http': 5.1.0 - '@smithy/querystring-builder': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-blob-browser@4.0.2': - dependencies: - '@smithy/chunked-blob-reader': 5.0.0 - '@smithy/chunked-blob-reader-native': 4.0.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/hash-node@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-stream-node@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/md5-js@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.0.2': - dependencies: - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.1.0': - dependencies: - '@smithy/core': 3.2.0 - '@smithy/middleware-serde': 4.0.3 - '@smithy/node-config-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-middleware': 4.0.2 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.1.0': - dependencies: - '@smithy/node-config-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/service-error-classification': 4.0.2 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.2 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/middleware-serde@4.0.3': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.0.2': - dependencies: - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.0.4': - dependencies: - '@smithy/abort-controller': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/querystring-builder': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/property-provider@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/protocol-http@5.1.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-uri-escape': 4.0.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - - '@smithy/shared-ini-file-loader@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/signature-v4@5.0.2': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/smithy-client@4.2.0': - dependencies: - '@smithy/core': 3.2.0 - '@smithy/middleware-endpoint': 4.1.0 - '@smithy/middleware-stack': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-stream': 4.2.0 - tslib: 2.8.1 - - '@smithy/types@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/url-parser@4.0.2': - dependencies: - '@smithy/querystring-parser': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-base64@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-body-length-browser@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-body-length-node@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-buffer-from@4.0.0': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-config-provider@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-defaults-mode-browser@4.0.8': - dependencies: - '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - bowser: 2.11.0 - tslib: 2.8.1 - - '@smithy/util-defaults-mode-node@4.0.8': - dependencies: - '@smithy/config-resolver': 4.1.0 - '@smithy/credential-provider-imds': 4.0.2 - '@smithy/node-config-provider': 4.0.2 - '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-endpoints@3.0.2': - dependencies: - '@smithy/node-config-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-middleware@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-retry@4.0.2': - dependencies: - '@smithy/service-error-classification': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-stream@4.2.0': - dependencies: - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/types': 4.2.0 - '@smithy/util-base64': 4.0.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-uri-escape@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-utf8@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-waiter@4.0.3': - dependencies: - '@smithy/abort-controller': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@socket.io/component-emitter@3.1.2': {} - - '@swc/core-darwin-arm64@1.11.13': - optional: true - - '@swc/core-darwin-x64@1.11.13': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.11.13': - optional: true - - '@swc/core-linux-arm64-gnu@1.11.13': - optional: true - - '@swc/core-linux-arm64-musl@1.11.13': - optional: true - - '@swc/core-linux-x64-gnu@1.11.13': - optional: true - - '@swc/core-linux-x64-musl@1.11.13': - optional: true - - '@swc/core-win32-arm64-msvc@1.11.13': - optional: true - - '@swc/core-win32-ia32-msvc@1.11.13': - optional: true - - '@swc/core-win32-x64-msvc@1.11.13': - optional: true - - '@swc/core@1.11.13(@swc/helpers@0.5.15)': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.20 - optionalDependencies: - '@swc/core-darwin-arm64': 1.11.13 - '@swc/core-darwin-x64': 1.11.13 - '@swc/core-linux-arm-gnueabihf': 1.11.13 - '@swc/core-linux-arm64-gnu': 1.11.13 - '@swc/core-linux-arm64-musl': 1.11.13 - '@swc/core-linux-x64-gnu': 1.11.13 - '@swc/core-linux-x64-musl': 1.11.13 - '@swc/core-win32-arm64-msvc': 1.11.13 - '@swc/core-win32-ia32-msvc': 1.11.13 - '@swc/core-win32-x64-msvc': 1.11.13 - '@swc/helpers': 0.5.15 - - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - - '@swc/types@0.1.20': - dependencies: - '@swc/counter': 0.1.3 - - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - - '@testing-library/dom@10.4.0': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.27.0 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - - '@testing-library/jest-dom@6.6.3': - dependencies: - '@adobe/css-tools': 4.4.2 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - lodash: 4.17.21 - redent: 3.0.0 - - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.0 - '@testing-library/dom': 10.4.0 - react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - optionalDependencies: - '@types/react': 19.0.12 - - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - - '@tokenizer/inflate@0.2.7(supports-color@10.0.0)': - dependencies: - debug: 4.4.0(supports-color@10.0.0) - fflate: 0.8.2 - token-types: 6.0.0 - transitivePeerDependencies: - - supports-color - - '@tokenizer/token@0.3.0': {} - - '@tootallnate/once@2.0.0': {} - - '@trysound/sax@0.2.0': {} - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@tybys/wasm-util@0.10.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/aria-query@5.0.4': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.27.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.27.0 - - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 22.13.13 - - '@types/bonjour@3.5.13': - dependencies: - '@types/node': 22.13.13 - - '@types/connect-history-api-fallback@1.5.4': - dependencies: - '@types/express-serve-static-core': 5.0.6 - '@types/node': 22.13.13 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 22.13.13 - - '@types/cookie@0.6.0': {} - - '@types/cors@2.8.17': - dependencies: - '@types/node': 22.13.13 - - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.7 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - - '@types/estree@1.0.6': {} - - '@types/estree@1.0.7': {} - - '@types/express-serve-static-core@4.19.6': - dependencies: - '@types/node': 22.13.13 - '@types/qs': 6.9.18 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express-serve-static-core@5.0.6': - dependencies: - '@types/node': 22.13.13 - '@types/qs': 6.9.18 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express@4.17.21': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.18 - '@types/serve-static': 1.15.7 - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 22.13.13 - - '@types/html-minifier-terser@6.1.0': {} - - '@types/http-cache-semantics@4.0.4': {} - - '@types/http-errors@2.0.4': {} - - '@types/http-proxy@1.17.16': - dependencies: - '@types/node': 22.13.13 - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jsdom@20.0.1': - dependencies: - '@types/node': 22.13.13 - '@types/tough-cookie': 4.0.5 - parse5: 7.2.1 - - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/mime@1.3.5': {} - - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 22.13.13 - form-data: 4.0.2 - - '@types/node-forge@1.3.11': - dependencies: - '@types/node': 22.13.13 - - '@types/node@22.13.13': - dependencies: - undici-types: 6.20.0 - - '@types/normalize-package-data@2.4.4': {} - - '@types/parse-json@4.0.2': {} - - '@types/prop-types@15.7.14': {} - - '@types/qs@6.9.18': {} - - '@types/range-parser@1.2.7': {} - - '@types/react-transition-group@4.4.12(@types/react@19.0.12)': - dependencies: - '@types/react': 19.0.12 - - '@types/react@19.0.12': - dependencies: - csstype: 3.1.3 - - '@types/readable-stream@4.0.18': - dependencies: - '@types/node': 22.13.13 - safe-buffer: 5.1.2 - - '@types/retry@0.12.2': {} - - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.13.13 - - '@types/serve-index@1.9.4': - dependencies: - '@types/express': 4.17.21 - - '@types/serve-static@1.15.7': - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 22.13.13 - '@types/send': 0.17.4 - - '@types/shimmer@1.2.0': {} - - '@types/sockjs@0.3.36': - dependencies: - '@types/node': 22.13.13 - - '@types/stack-utils@2.0.3': {} - - '@types/tough-cookie@4.0.5': {} - - '@types/triple-beam@1.3.5': {} - - '@types/trusted-types@2.0.7': - optional: true - - '@types/unist@3.0.3': {} - - '@types/use-sync-external-store@0.0.6': {} - - '@types/webidl-conversions@7.0.3': {} - - '@types/whatwg-url@11.0.5': - dependencies: - '@types/webidl-conversions': 7.0.3 - - '@types/ws@8.18.0': - dependencies: - '@types/node': 22.13.13 - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.37.0 - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - graphemer: 1.4.0 - ignore: 7.0.3 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.37.0 - debug: 4.4.0(supports-color@10.0.0) - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.37.0(supports-color@10.0.0)(typescript@5.8.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.2) - '@typescript-eslint/types': 8.37.0 - debug: 4.4.0(supports-color@10.0.0) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.37.0': - dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 - - '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.2)': - dependencies: - typescript: 5.8.2 - - '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': - dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - debug: 4.4.0(supports-color@10.0.0) - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.37.0': {} - - '@typescript-eslint/typescript-estree@8.37.0(supports-color@10.0.0)(typescript@5.8.2)': - dependencies: - '@typescript-eslint/project-service': 8.37.0(supports-color@10.0.0)(typescript@5.8.2) - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.2) - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 - debug: 4.4.0(supports-color@10.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(supports-color@10.0.0)(typescript@5.8.2) - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.37.0': - dependencies: - '@typescript-eslint/types': 8.37.0 - eslint-visitor-keys: 4.2.1 - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true - - '@vue/compiler-core@3.5.13': - dependencies: - '@babel/parser': 7.27.0 - '@vue/shared': 3.5.13 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.13': - dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 - - '@vue/compiler-sfc@3.5.13': - dependencies: - '@babel/parser': 7.27.0 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - estree-walker: 2.0.2 - magic-string: 0.30.17 - postcss: 8.5.3 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.13': - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 - - '@vue/devtools-api@6.6.4': {} - - '@vue/reactivity@3.5.13': - dependencies: - '@vue/shared': 3.5.13 - - '@vue/runtime-core@3.5.13': - dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 - - '@vue/runtime-dom@3.5.13': - dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 - csstype: 3.1.3 - - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': - dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.8.2) - - '@vue/shared@3.5.13': {} - - '@webassemblyjs/ast@1.14.1': - dependencies: - '@webassemblyjs/helper-numbers': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - - '@webassemblyjs/helper-api-error@1.13.2': {} - - '@webassemblyjs/helper-buffer@1.14.1': {} - - '@webassemblyjs/helper-numbers@1.13.2': - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.13.2 - '@webassemblyjs/helper-api-error': 1.13.2 - '@xtuc/long': 4.2.2 - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - - '@webassemblyjs/helper-wasm-section@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/wasm-gen': 1.14.1 - - '@webassemblyjs/ieee754@1.13.2': - dependencies: - '@xtuc/ieee754': 1.2.0 - - '@webassemblyjs/leb128@1.13.2': - dependencies: - '@xtuc/long': 4.2.2 - - '@webassemblyjs/utf8@1.13.2': {} - - '@webassemblyjs/wasm-edit@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/helper-wasm-section': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-opt': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wast-printer': 1.14.1 - - '@webassemblyjs/wasm-gen@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - - '@webassemblyjs/wasm-opt@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - - '@webassemblyjs/wasm-parser@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-api-error': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - - '@webassemblyjs/wast-printer@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@xtuc/long': 4.2.2 - - '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)': - dependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0) - - '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)': - dependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0) - - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack@5.98.0)': - dependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0) - optionalDependencies: - webpack-dev-server: 5.2.2(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0) - - '@whatwg-node/promise-helpers@1.3.0': - dependencies: - tslib: 2.8.1 - - '@xtuc/ieee754@1.2.0': {} - - '@xtuc/long@4.2.2': {} - - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - - abab@2.0.6: {} - - abbrev@3.0.0: {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-globals@7.0.1: - dependencies: - acorn: 8.14.1 - acorn-walk: 8.3.4 - - acorn-import-attributes@1.9.5(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - acorn@8.15.0: {} - - adm-zip@0.5.16: {} - - agent-base@6.0.2(supports-color@10.0.0): - dependencies: - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - agent-base@7.1.3: {} - - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv-keywords@5.1.0(ajv@8.17.1): - dependencies: - ajv: 8.17.1 - fast-deep-equal: 3.1.3 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-align@3.0.1: - dependencies: - string-width: 4.2.3 - - ansi-colors@4.1.3: {} - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-escapes@7.0.0: - dependencies: - environment: 1.1.0 - - ansi-html-community@0.0.8: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - append-field@1.0.0: {} - - archiver-utils@5.0.2: - dependencies: - glob: 10.4.5 - graceful-fs: 4.2.11 - is-stream: 2.0.1 - lazystream: 1.0.1 - lodash: 4.17.21 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - archiver@7.0.1: - dependencies: - archiver-utils: 5.0.2 - async: 3.2.6 - buffer-crc32: 1.0.0 - readable-stream: 4.7.0 - readdir-glob: 1.1.3 - tar-stream: 3.1.7 - zip-stream: 6.0.1 - - arg@4.1.3: {} - - arg@5.0.2: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-flatten@1.1.1: {} - - array-flatten@3.0.0: {} - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array-union@3.0.1: {} - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - arrify@3.0.0: {} - - asap@2.0.6: {} - - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - - assert-plus@1.0.0: {} - - assert@2.1.0: - dependencies: - call-bind: 1.0.8 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.7 - util: 0.12.5 - - assertion-error@2.0.1: {} - - assign-symbols@1.0.0: {} - - ast-types@0.14.2: - dependencies: - tslib: 2.8.1 - - ast-types@0.16.1: - dependencies: - tslib: 2.8.1 - - astral-regex@2.0.0: {} - - async-function@1.0.0: {} - - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - - async@3.2.6: {} - - asynckit@0.4.0: {} - - atob@2.1.2: {} - - atomic-sleep@1.0.0: {} - - atomically@2.0.3: - dependencies: - stubborn-fs: 1.2.5 - when-exit: 2.1.4 - - autoprefixer@10.4.21(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001707 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - aws-sdk@2.1692.0: - dependencies: - buffer: 4.9.2 - events: 1.1.1 - ieee754: 1.1.13 - jmespath: 0.16.0 - querystring: 0.2.0 - sax: 1.2.1 - url: 0.10.3 - util: 0.12.5 - uuid: 8.0.0 - xml2js: 0.6.2 - - axe-core@4.10.3: {} - - axios@1.10.0(debug@4.4.0(supports-color@10.0.0)): - dependencies: - follow-redirects: 1.15.9(debug@4.4.0(supports-color@10.0.0)) - form-data: 4.0.2 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - axobject-query@4.1.0: {} - - b4a@1.6.7: {} - - babel-jest@29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1(supports-color@10.0.0) - babel-preset-jest: 29.6.3(@babel/core@7.26.10(supports-color@10.0.0)) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-loader@10.0.0(@babel/core@7.26.10(supports-color@10.0.0))(webpack@5.98.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - find-up: 5.0.0 - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - babel-plugin-istanbul@6.1.1(supports-color@10.0.0): - dependencies: - '@babel/helper-plugin-utils': 7.26.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1(supports-color@10.0.0) - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@7.0.0(supports-color@10.0.0): - dependencies: - '@babel/helper-plugin-utils': 7.26.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 6.0.3(supports-color@10.0.0) - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.27.0 - cosmiconfig: 7.1.0 - resolve: 1.22.10 - - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - core-js-compat: 3.41.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10(supports-color@10.0.0)): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10(supports-color@10.0.0)) - - babel-preset-jest@29.6.3(@babel/core@7.26.10(supports-color@10.0.0)): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10(supports-color@10.0.0)) - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - balanced-match@3.0.1: {} - - bare-events@2.5.4: - optional: true - - base64-js@1.5.1: {} - - base64id@2.0.0: {} - - basic-auth@2.0.1: - dependencies: - safe-buffer: 5.1.2 - - batch@0.6.1: {} - - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - - before-after-hook@3.0.2: {} - - big.js@6.2.2: {} - - bignumber.js@9.1.2: {} - - binary-extensions@2.3.0: {} - - binary-extensions@3.0.0: {} - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - bl@6.1.0: - dependencies: - '@types/readable-stream': 4.0.18 - buffer: 6.0.3 - inherits: 2.0.4 - readable-stream: 4.7.0 - - bluebird@3.7.2: {} - - bn.js@4.12.1: {} - - bn.js@5.2.1: {} - - body-parser@1.20.3(supports-color@10.0.0): - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9(supports-color@10.0.0) - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - bonjour-service@1.3.0: - dependencies: - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - - boolbase@1.0.0: {} - - bowser@2.11.0: {} - - boxen@8.0.1: - dependencies: - ansi-align: 3.0.1 - camelcase: 8.0.0 - chalk: 5.4.1 - cli-boxes: 3.0.0 - string-width: 7.2.0 - type-fest: 4.38.0 - widest-line: 5.0.0 - wrap-ansi: 9.0.0 - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - brace-expansion@4.0.0: - dependencies: - balanced-match: 3.0.1 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - brorand@1.1.0: {} - - browser-stdout@1.3.1: {} - - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001707 - electron-to-chromium: 1.5.123 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - bson@6.10.3: {} - - buffer-crc32@1.0.0: {} - - buffer-equal-constant-time@1.0.1: {} - - buffer-from@1.1.2: {} - - buffer@4.9.2: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - isarray: 1.0.0 - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builtin-modules@5.0.0: {} - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.0.0 - - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - - bytes@3.1.2: {} - - cac@6.7.14: {} - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.4.5 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.3 - ssri: 12.0.0 - tar: 7.4.3 - unique-filename: 4.0.0 - - cache-content-type@1.0.1: - dependencies: - mime-types: 2.1.35 - ylru: 1.4.0 - - cacheable-lookup@7.0.0: {} - - cacheable-request@12.0.1: - dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 9.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.0.1 - responselike: 3.0.0 - - cacheable@1.8.9: - dependencies: - hookified: 1.8.1 - keyv: 5.3.2 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - callsites@4.2.0: {} - - camel-case@4.1.2: - dependencies: - pascal-case: 3.1.2 - tslib: 2.8.1 - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - camelcase@8.0.0: {} - - caniuse-api@3.0.0: - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001707 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - - caniuse-lite@1.0.30001707: {} - - caseless@0.12.0: {} - - chai@5.2.0: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 - - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.4.1: {} - - change-case@5.4.4: {} - - char-regex@1.0.2: {} - - char-regex@2.0.2: {} - - chardet@0.7.0: {} - - chardet@2.1.0: {} - - charenc@0.0.2: {} - - check-error@2.1.1: {} - - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.0.0: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.0 - htmlparser2: 9.1.0 - parse5: 7.2.1 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 6.21.2 - whatwg-mimetype: 4.0.0 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chownr@3.0.0: {} - - chrome-trace-event@1.0.4: {} - - ci-info@3.9.0: {} - - ci-info@4.2.0: {} - - cjs-module-lexer@1.4.3: {} - - cjs-module-lexer@2.1.0: {} - - classnames@2.5.1: {} - - clean-css@5.3.3: - dependencies: - source-map: 0.6.1 - - clean-stack@5.2.0: - dependencies: - escape-string-regexp: 5.0.0 - - cli-boxes@3.0.0: {} - - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-spinners@2.9.2: {} - - cli-spinners@3.2.0: {} - - cli-table3@0.6.5: - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 - - cli-width@4.1.0: {} - - client-only@0.0.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - cliui@9.0.1: - dependencies: - string-width: 7.2.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - - clone@1.0.4: {} - - clone@2.1.2: {} - - clsx@2.1.1: {} - - cluster-key-slot@1.1.2: {} - - co@4.6.0: {} - - collect-v8-coverage@1.0.2: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-convert@3.0.1: - dependencies: - color-name: 2.0.0 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - color-name@2.0.0: {} - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color-string@2.0.1: - dependencies: - color-name: 2.0.0 - - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - - color@5.0.0: - dependencies: - color-convert: 3.0.1 - color-string: 2.0.1 - - colord@2.9.3: {} - - colorette@2.0.20: {} - - colors@1.4.0: {} - - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@12.1.0: {} - - commander@13.1.0: {} - - commander@2.20.3: {} - - commander@4.1.1: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - common-path-prefix@3.0.0: {} - - commondir@1.0.1: {} - - component-emitter@1.3.1: {} - - component-emitter@2.0.0: {} - - compress-commons@6.0.2: - dependencies: - crc-32: 1.2.2 - crc32-stream: 6.0.0 - is-stream: 2.0.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - compressible@2.0.18: - dependencies: - mime-db: 1.54.0 - - compression@1.8.0(supports-color@10.0.0): - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9(supports-color@10.0.0) - negotiator: 0.6.4 - on-headers: 1.0.2 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - concat-map@0.0.1: {} - - concat-map@0.0.2: {} - - concat-stream@2.0.0: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - typedarray: 0.0.6 - - config-chain@1.1.13: - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - - configstore@7.0.0: - dependencies: - atomically: 2.0.3 - dot-prop: 9.0.0 - graceful-fs: 4.2.11 - xdg-basedir: 5.1.0 - - connect-history-api-fallback@2.0.0: {} - - connect@3.7.0(supports-color@10.0.0): - dependencies: - debug: 2.6.9(supports-color@10.0.0) - finalhandler: 1.1.2(supports-color@10.0.0) - parseurl: 1.3.3 - utils-merge: 1.0.1 - transitivePeerDependencies: - - supports-color - - consola@3.4.2: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-source-map@1.9.0: {} - - convert-source-map@2.0.0: {} - - cookie-parser@1.4.7: - dependencies: - cookie: 0.7.2 - cookie-signature: 1.0.6 - - cookie-signature@1.0.6: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.1: {} - - cookie@0.7.2: {} - - cookie@1.0.2: {} - - cookiejar@2.1.4: {} - - cookies@0.9.1: - dependencies: - depd: 2.0.0 - keygrip: 1.1.0 - - copy-anything@2.0.6: - dependencies: - is-what: 3.14.1 - - core-js-compat@3.41.0: - dependencies: - browserslist: 4.24.4 - - core-js@3.41.0: {} - - core-util-is@1.0.2: {} - - core-util-is@1.0.3: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - cosmiconfig@9.0.0(typescript@5.8.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.8.2 - - crc-32@1.2.2: {} - - crc32-stream@6.0.0: - dependencies: - crc-32: 1.2.2 - readable-stream: 4.7.0 - - create-jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-require@1.1.1: {} - - cross-env@7.0.3: - dependencies: - cross-spawn: 7.0.6 - - cross-fetch@4.1.0(encoding@0.1.13): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - cross-inspect@1.0.1: - dependencies: - tslib: 2.8.1 - - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - crypt@0.0.2: {} - - crypto-js@4.2.0: {} - - crypto-random-string@4.0.0: - dependencies: - type-fest: 1.4.0 - - css-declaration-sorter@7.2.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - css-loader@7.1.2(webpack@5.98.0): - dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.33) - postcss-modules-local-by-default: 4.2.0(postcss@8.4.33) - postcss-modules-scope: 3.2.1(postcss@8.4.33) - postcss-modules-values: 4.0.0(postcss@8.4.33) - postcss-value-parser: 4.2.0 - semver: 7.7.1 - optionalDependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - css-select@4.3.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - - css-select@5.1.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.1 - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - - css-tree@3.1.0: - dependencies: - mdn-data: 2.12.2 - source-map-js: 1.2.1 - - css-what@6.1.0: {} - - css.escape@1.5.1: {} - - cssesc@3.0.0: {} - - cssnano-preset-default@7.0.6(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - css-declaration-sorter: 7.2.0(postcss@8.4.33) - cssnano-utils: 5.0.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-calc: 10.1.1(postcss@8.4.33) - postcss-colormin: 7.0.2(postcss@8.4.33) - postcss-convert-values: 7.0.4(postcss@8.4.33) - postcss-discard-comments: 7.0.3(postcss@8.4.33) - postcss-discard-duplicates: 7.0.1(postcss@8.4.33) - postcss-discard-empty: 7.0.0(postcss@8.4.33) - postcss-discard-overridden: 7.0.0(postcss@8.4.33) - postcss-merge-longhand: 7.0.4(postcss@8.4.33) - postcss-merge-rules: 7.0.4(postcss@8.4.33) - postcss-minify-font-values: 7.0.0(postcss@8.4.33) - postcss-minify-gradients: 7.0.0(postcss@8.4.33) - postcss-minify-params: 7.0.2(postcss@8.4.33) - postcss-minify-selectors: 7.0.4(postcss@8.4.33) - postcss-normalize-charset: 7.0.0(postcss@8.4.33) - postcss-normalize-display-values: 7.0.0(postcss@8.4.33) - postcss-normalize-positions: 7.0.0(postcss@8.4.33) - postcss-normalize-repeat-style: 7.0.0(postcss@8.4.33) - postcss-normalize-string: 7.0.0(postcss@8.4.33) - postcss-normalize-timing-functions: 7.0.0(postcss@8.4.33) - postcss-normalize-unicode: 7.0.2(postcss@8.4.33) - postcss-normalize-url: 7.0.0(postcss@8.4.33) - postcss-normalize-whitespace: 7.0.0(postcss@8.4.33) - postcss-ordered-values: 7.0.1(postcss@8.4.33) - postcss-reduce-initial: 7.0.2(postcss@8.4.33) - postcss-reduce-transforms: 7.0.0(postcss@8.4.33) - postcss-svgo: 7.0.1(postcss@8.4.33) - postcss-unique-selectors: 7.0.3(postcss@8.4.33) - - cssnano-utils@5.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - cssnano@7.0.6(postcss@8.4.33): - dependencies: - cssnano-preset-default: 7.0.6(postcss@8.4.33) - lilconfig: 3.1.3 - postcss: 8.4.33 - - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - - cssom@0.3.8: {} - - cssom@0.5.0: {} - - cssstyle@2.3.0: - dependencies: - cssom: 0.3.8 - - cssstyle@4.3.0: - dependencies: - '@asamuzakjp/css-color': 3.1.1 - rrweb-cssom: 0.8.0 - - csstype@3.1.3: {} - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-format@3.1.0: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - dashdash@1.14.1: - dependencies: - assert-plus: 1.0.0 - - data-uri-to-buffer@4.0.1: {} - - data-uri-to-buffer@6.0.2: {} - - data-urls@3.0.2: - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - date-fns@4.1.0: {} - - date-format@4.0.14: {} - - dateformat@5.0.3: {} - - dayjs@1.11.13: {} - - debug@2.6.9(supports-color@10.0.0): - dependencies: - ms: 2.0.0 - optionalDependencies: - supports-color: 10.0.0 - - debug@3.2.7(supports-color@10.0.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 10.0.0 - - debug@4.3.7(supports-color@10.0.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 10.0.0 - - debug@4.4.0(supports-color@10.0.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 10.0.0 - - debug@4.4.0(supports-color@5.5.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 5.5.0 - - debug@4.4.0(supports-color@8.1.1): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 8.1.1 - - debug@4.4.1(supports-color@10.0.0): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 10.0.0 - - decamelize@4.0.0: {} - - decamelize@6.0.0: {} - - decimal.js@10.4.3: {} - - decode-uri-component@0.4.1: {} - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - decompress-response@9.0.0: - dependencies: - mimic-response: 4.0.0 - - dedent@1.5.3(babel-plugin-macros@3.1.0): - optionalDependencies: - babel-plugin-macros: 3.1.0 - - deep-eql@5.0.2: {} - - deep-equal@1.0.1: {} - - deep-equal@2.2.3: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - es-get-iterator: 1.1.3 - get-intrinsic: 1.3.0 - is-arguments: 1.2.0 - is-array-buffer: 3.0.5 - is-date-object: 1.1.0 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.7 - regexp.prototype.flags: 1.5.4 - side-channel: 1.1.0 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - deep-extend@0.6.0: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - default-browser-id@5.0.0: {} - - default-browser@5.2.1: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.0 - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defaults@3.0.0: {} - - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - delegates@1.0.0: {} - - denque@2.1.0: {} - - depd@1.1.2: {} - - depd@2.0.0: {} - - dequal@2.0.3: {} - - destroy@1.2.0: {} - - detect-europe-js@0.1.2: {} - - detect-indent@7.0.1: {} - - detect-libc@1.0.3: - optional: true - - detect-libc@2.0.3: {} - - detect-libc@2.1.2: - optional: true - - detect-newline@3.1.0: {} - - detect-newline@4.0.1: {} - - detect-node@2.1.0: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - dezalgo@1.0.4: - dependencies: - asap: 2.0.6 - wrappy: 1.0.2 - - diff-sequences@29.6.3: {} - - diff@4.0.2: {} - - diff@5.2.0: {} - - diff@7.0.0: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dns-packet@5.6.1: - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-accessibility-api@0.5.16: {} - - dom-accessibility-api@0.6.3: {} - - dom-accessibility-api@0.7.0: {} - - dom-converter@0.2.0: - dependencies: - utila: 0.4.0 - - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.27.0 - csstype: 3.1.3 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domexception@4.0.0: - dependencies: - webidl-conversions: 7.0.0 - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - dompurify@3.2.4: - optionalDependencies: - '@types/trusted-types': 2.0.7 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - - dot-prop@9.0.0: - dependencies: - type-fest: 4.38.0 - - dotenv-expand@12.0.1: - dependencies: - dotenv: 16.4.7 - - dotenv@16.4.7: {} - - dset@3.1.4: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - duplexer@0.1.2: {} - - eastasianwidth@0.2.0: {} - - eastasianwidth@0.3.0: {} - - ecc-jsbn@0.1.2: - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - - ee-first@1.1.1: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.2 - - electron-to-chromium@1.5.123: {} - - elliptic@6.6.1: - dependencies: - bn.js: 4.12.1 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - - emittery@0.13.1: {} - - emittery@1.1.0: {} - - emoji-regex@10.4.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - enabled@2.0.0: {} - - encodeurl@1.0.2: {} - - encodeurl@2.0.0: {} - - encoding-sniffer@0.2.0: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - - engine.io-client@6.6.3(supports-color@10.0.0): - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7(supports-color@10.0.0) - engine.io-parser: 5.2.3 - ws: 8.17.1 - xmlhttprequest-ssl: 2.1.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - engine.io-parser@5.2.3: {} - - engine.io@6.6.4(supports-color@10.0.0): - dependencies: - '@types/cors': 2.8.17 - '@types/node': 22.13.13 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.7.2 - cors: 2.8.5 - debug: 4.3.7(supports-color@10.0.0) - engine.io-parser: 5.2.3 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - enquirer@2.4.1: - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - - entities@2.2.0: {} - - entities@4.5.0: {} - - entities@6.0.0: {} - - env-paths@2.2.1: {} - - env-paths@3.0.0: {} - - envinfo@7.14.0: {} - - environment@1.1.0: {} - - err-code@2.0.3: {} - - errno@0.1.8: - dependencies: - prr: 1.0.1 - optional: true - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-get-iterator@1.1.3: - dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - is-arguments: 1.2.0 - is-map: 2.0.3 - is-set: 2.0.3 - is-string: 1.1.1 - isarray: 2.0.5 - stop-iteration-iterator: 1.1.0 - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-module-lexer@1.6.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es6-promise@4.2.8: {} - - esbuild@0.25.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 - - escalade@3.2.0: {} - - escape-goat@4.0.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - escape-string-regexp@5.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)): - dependencies: - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - - eslint-import-context@0.1.9(unrs-resolver@1.11.1): - dependencies: - get-tsconfig: 4.10.1 - stable-hash-x: 0.2.0 - optionalDependencies: - unrs-resolver: 1.11.1 - - eslint-import-resolver-node@0.3.9(supports-color@10.0.0): - dependencies: - debug: 3.2.7(supports-color@10.0.0) - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - debug: 4.4.1(supports-color@10.0.0) - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.10.1 - is-bun-module: 2.0.0 - stable-hash-x: 0.2.0 - tinyglobby: 0.2.14 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9(supports-color@10.0.0))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - debug: 3.2.7(supports-color@10.0.0) - optionalDependencies: - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - eslint-import-resolver-node: 0.3.9(supports-color@10.0.0) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@10.0.0) - doctrine: 2.1.0 - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - eslint-import-resolver-node: 0.3.9(supports-color@10.0.0) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9(supports-color@10.0.0))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jest@29.0.1(@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(supports-color@10.0.0)(typescript@5.8.2): - dependencies: - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) - jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-prettier@5.5.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)))(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0))(prettier@3.5.3): - dependencies: - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - prettier: 3.5.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)) - - eslint-plugin-react@7.37.5(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.31.0(jiti@2.4.2)(supports-color@10.0.0) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@8.3.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0): - dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.31.0(jiti@2.4.2)(supports-color@10.0.0)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0(supports-color@10.0.0) - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.1 - '@eslint/eslintrc': 3.3.1(supports-color@10.0.0) - '@eslint/js': 9.31.0 - '@eslint/plugin-kit': 0.3.3 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@10.0.0) - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - esprima@4.0.1: {} - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - estree-walker@2.0.2: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.7 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - event-target-shim@5.0.1: {} - - event-target-shim@6.0.2: {} - - eventemitter2@6.4.9: {} - - eventemitter3@4.0.7: {} - - eventemitter3@5.0.1: {} - - events@1.1.1: {} - - events@3.3.0: {} - - execa@1.0.0: - dependencies: - cross-spawn: 6.0.6 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - - execa@9.5.2: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.0 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.2.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 - - exit@0.1.2: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - express@4.21.2(supports-color@10.0.0): - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3(supports-color@10.0.0) - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9(supports-color@10.0.0) - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.1(supports-color@10.0.0) - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.12 - proxy-addr: 2.0.7 - qs: 6.13.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.0(supports-color@10.0.0) - serve-static: 1.16.2(supports-color@10.0.0) - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extend-shallow@3.0.2: - dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - - extend@3.0.2: {} - - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - - extsprintf@1.3.0: {} - - extsprintf@1.4.1: {} - - fast-content-type-parse@2.0.1: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-fifo@1.3.2: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-levenshtein@3.0.0: - dependencies: - fastest-levenshtein: 1.0.16 - - fast-redact@3.5.0: {} - - fast-safe-stringify@2.1.1: {} - - fast-uri@3.0.6: {} - - fast-xml-parser@4.4.1: - dependencies: - strnum: 1.1.2 - - fast-xml-parser@5.0.9: - dependencies: - strnum: 2.0.5 - - fastest-levenshtein@1.0.16: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - faye-websocket@0.11.4: - dependencies: - websocket-driver: 0.7.4 - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - fdir@6.4.6(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - fecha@4.2.3: {} - - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - - fflate@0.8.2: {} - - figlet@1.8.0: {} - - figures@6.1.0: - dependencies: - is-unicode-supported: 2.1.0 - - file-entry-cache@10.0.7: - dependencies: - flat-cache: 6.1.7 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-type@20.4.1(supports-color@10.0.0): - dependencies: - '@tokenizer/inflate': 0.2.7(supports-color@10.0.0) - strtok3: 10.2.2 - token-types: 6.0.0 - uint8array-extras: 1.4.0 - transitivePeerDependencies: - - supports-color - - file-uri-to-path@1.0.0: {} - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - filesize@10.1.6: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - filter-obj@5.1.0: {} - - finalhandler@1.1.2(supports-color@10.0.0): - dependencies: - debug: 2.6.9(supports-color@10.0.0) - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - finalhandler@1.3.1(supports-color@10.0.0): - dependencies: - debug: 2.6.9(supports-color@10.0.0) - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - finalhandler@2.1.0(supports-color@10.0.0): - dependencies: - debug: 4.4.0(supports-color@10.0.0) - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - find-cache-dir@5.0.0: - dependencies: - common-path-prefix: 3.0.0 - pkg-dir: 7.0.0 - - find-root@1.1.0: {} - - find-up-simple@1.0.1: {} - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - find-up@6.3.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flat-cache@6.1.7: - dependencies: - cacheable: 1.8.9 - flatted: 3.3.3 - hookified: 1.8.1 - - flat@5.0.2: {} - - flat@6.0.1: {} - - flatted@3.3.3: {} - - fn.name@1.1.0: {} - - follow-redirects@1.15.9(debug@4.4.0(supports-color@10.0.0)): - optionalDependencies: - debug: 4.4.0(supports-color@10.0.0) - - follow-redirects@1.15.9(debug@4.4.1(supports-color@10.0.0)): - optionalDependencies: - debug: 4.4.1(supports-color@10.0.0) - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - for-in@1.0.2: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data-encoder@4.0.2: {} - - form-data@4.0.2: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - - formidable@3.5.2: - dependencies: - dezalgo: 1.0.4 - hexoid: 2.0.0 - once: 1.4.0 - - forwarded@0.2.0: {} - - fraction.js@4.3.7: {} - - fraction.js@5.2.1: {} - - framer-motion@12.6.0(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1): - dependencies: - motion-dom: 12.6.0 - motion-utils: 12.5.0 - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 1.3.1 - react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - - fresh@0.5.2: {} - - fs-extra@11.3.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - - fs.realpath@1.0.0: {} - - fsevents@2.3.2: - optional: true - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gaxios@6.7.1(encoding@0.1.13)(supports-color@10.0.0): - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6(supports-color@10.0.0) - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@6.1.1(encoding@0.1.13)(supports-color@10.0.0): - dependencies: - gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-east-asian-width@1.3.0: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-package-type@0.1.0: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stdin@9.0.0: {} - - get-stream@4.1.0: - dependencies: - pump: 3.0.2 - - get-stream@6.0.1: {} - - get-stream@8.0.1: {} - - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.10.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - get-tsconfig@4.10.1: - dependencies: - resolve-pkg-maps: 1.0.0 - - get-value@4.0.1: {} - - getpass@0.1.7: - dependencies: - assert-plus: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob-to-regexp@0.4.1: {} - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@11.0.1: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.0 - minimatch: 10.0.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-directory@4.0.1: - dependencies: - ini: 4.1.1 - - global-prefix@4.0.0: - dependencies: - ini: 4.1.3 - kind-of: 6.0.3 - which: 4.0.0 - - globals@11.12.0: {} - - globals@14.0.0: {} - - globals@16.0.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.3 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - - google-auth-library@9.15.1(encoding@0.1.13)(supports-color@10.0.0): - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) - gcp-metadata: 6.1.1(encoding@0.1.13)(supports-color@10.0.0) - gtoken: 7.1.0(encoding@0.1.13)(supports-color@10.0.0) - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-logging-utils@0.0.2: {} - - gopd@1.2.0: {} - - got@14.4.6: - dependencies: - '@sindresorhus/is': 7.0.1 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 12.0.1 - decompress-response: 6.0.0 - form-data-encoder: 4.0.2 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 4.0.1 - responselike: 3.0.0 - type-fest: 4.38.0 - - graceful-fs@4.2.10: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - graphql@16.10.0: {} - - gtoken@7.1.0(encoding@0.1.13)(supports-color@10.0.0): - dependencies: - gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - handle-thing@2.0.1: {} - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-flag@5.0.1: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hash.js@1.1.7: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - he@1.2.0: {} - - hexoid@2.0.0: {} - - highlight.js@11.11.1: {} - - hmac-drbg@1.0.1: - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - hookified@1.8.1: {} - - hosted-git-info@7.0.2: - dependencies: - lru-cache: 10.4.3 - - hosted-git-info@8.0.2: - dependencies: - lru-cache: 10.4.3 - - hpack.js@2.1.6: - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - - html-encoding-sniffer@3.0.0: - dependencies: - whatwg-encoding: 2.0.0 - - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - - html-entities@2.5.3: {} - - html-escaper@2.0.2: {} - - html-escaper@3.0.3: {} - - html-minifier-terser@6.1.0: - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.3 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.39.0 - - html-webpack-plugin@5.6.3(webpack@5.98.0): - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - optionalDependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - htmlparser2@10.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 6.0.0 - - htmlparser2@6.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - - htmlparser2@9.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 4.5.0 - - http-assert@1.5.0: - dependencies: - deep-equal: 1.0.1 - http-errors: 1.8.1 - - http-cache-semantics@4.1.1: {} - - http-deceiver@1.2.7: {} - - http-errors@1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - - http-errors@1.8.1: - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-parser-js@0.5.9: {} - - http-proxy-agent@5.0.0(supports-color@10.0.0): - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2(supports-color@10.0.0) - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - http-proxy-agent@7.0.2(supports-color@10.0.0): - dependencies: - agent-base: 7.1.3 - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - http-proxy-middleware@2.0.9(@types/express@4.17.21)(debug@4.4.0(supports-color@10.0.0)): - dependencies: - '@types/http-proxy': 1.17.16 - http-proxy: 1.18.1(debug@4.4.0(supports-color@10.0.0)) - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.21 - transitivePeerDependencies: - - debug - - http-proxy-middleware@3.0.5(supports-color@10.0.0): - dependencies: - '@types/http-proxy': 1.17.16 - debug: 4.4.1(supports-color@10.0.0) - http-proxy: 1.18.1(debug@4.4.1(supports-color@10.0.0)) - is-glob: 4.0.3 - is-plain-object: 5.0.0 - micromatch: 4.0.8 - transitivePeerDependencies: - - supports-color - - http-proxy@1.18.1(debug@4.4.0(supports-color@10.0.0)): - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.0(supports-color@10.0.0)) - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - http-proxy@1.18.1(debug@4.4.1(supports-color@10.0.0)): - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.1(supports-color@10.0.0)) - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - http-signature@1.4.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 2.0.2 - sshpk: 1.18.0 - - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@5.0.1(supports-color@10.0.0): - dependencies: - agent-base: 6.0.2(supports-color@10.0.0) - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6(supports-color@10.0.0): - dependencies: - agent-base: 7.1.3 - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - human-signals@5.0.0: {} - - human-signals@8.0.0: {} - - husky@9.1.7: {} - - hyperdyperid@1.2.0: {} - - i18next@24.2.3(typescript@5.8.2): - dependencies: - '@babel/runtime': 7.27.0 - optionalDependencies: - typescript: 5.8.2 - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - icss-utils@5.1.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - ieee754@1.1.13: {} - - ieee754@1.2.1: {} - - ignore-by-default@1.0.1: {} - - ignore@5.3.2: {} - - ignore@7.0.3: {} - - image-size@0.5.5: - optional: true - - image-size@2.0.2: {} - - immediate@3.0.6: {} - - immer@10.1.1: {} - - immutable@5.0.3: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-in-the-middle@1.13.1: - dependencies: - acorn: 8.14.1 - acorn-import-attributes: 1.9.5(acorn@8.14.1) - cjs-module-lexer: 1.4.3 - module-details-from-path: 1.0.3 - - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - - indent-string@5.0.0: {} - - index-to-position@1.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.3: {} - - inherits@2.0.4: {} - - ini@1.3.8: {} - - ini@4.1.1: {} - - ini@4.1.3: {} - - ini@5.0.0: {} - - inquirer@12.5.0(@types/node@22.13.13): - dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.13) - '@inquirer/prompts': 7.4.0(@types/node@22.13.13) - '@inquirer/type': 3.0.5(@types/node@22.13.13) - ansi-escapes: 4.3.2 - mute-stream: 2.0.0 - run-async: 3.0.0 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 22.13.13 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - internmap@2.0.3: {} - - interpret@1.4.0: {} - - interpret@3.1.1: {} - - ioredis@5.6.0(supports-color@10.0.0): - dependencies: - '@ioredis/commands': 1.2.0 - cluster-key-slot: 1.1.2 - debug: 4.4.0(supports-color@10.0.0) - denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 - redis-errors: 1.2.0 - redis-parser: 3.0.0 - standard-as-callback: 2.1.0 - transitivePeerDependencies: - - supports-color - - ip-address@10.0.1: {} - - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - - ipaddr.js@1.9.1: {} - - ipaddr.js@2.2.0: {} - - is-arguments@1.2.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-arrayish@0.3.2: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-binary-path@3.0.0: - dependencies: - binary-extensions: 3.0.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-buffer@1.1.6: {} - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.1 - - is-callable@1.2.7: {} - - is-ci@4.1.0: - dependencies: - ci-info: 4.2.0 - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-docker@3.0.0: {} - - is-extendable@1.0.1: - dependencies: - is-plain-object: 2.0.4 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.0.0: - dependencies: - get-east-asian-width: 1.3.0 - - is-generator-fn@2.1.0: {} - - is-generator-fn@3.0.0: {} - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-in-ci@1.0.0: {} - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-installed-globally@1.0.0: - dependencies: - global-directory: 4.0.1 - is-path-inside: 4.0.0 - - is-interactive@2.0.0: {} - - is-map@2.0.3: {} - - is-nan@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - - is-negative-zero@2.0.3: {} - - is-network-error@1.1.0: {} - - is-npm@6.0.0: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-path-inside@4.0.0: {} - - is-plain-obj@2.1.0: {} - - is-plain-obj@3.0.0: {} - - is-plain-obj@4.1.0: {} - - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - - is-plain-object@5.0.0: {} - - is-potential-custom-element-name@1.0.1: {} - - is-primitive@3.0.1: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-standalone-pwa@0.1.1: {} - - is-stream@1.1.0: {} - - is-stream@2.0.1: {} - - is-stream@3.0.0: {} - - is-stream@4.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-unicode-supported@0.1.0: {} - - is-unicode-supported@1.3.0: {} - - is-unicode-supported@2.1.0: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-what@3.14.1: {} - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - isarray@1.0.0: {} - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - isobject@3.0.1: {} - - isobject@4.0.0: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1(supports-color@10.0.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/parser': 7.27.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3(supports-color@10.0.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/parser': 7.27.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1(supports-color@10.0.0): - dependencies: - debug: 4.4.0(supports-color@10.0.0) - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-source-maps@5.0.6(supports-color@10.0.0): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0(supports-color@10.0.0) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - iterare@1.2.1: {} - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jackspeak@4.1.0: - dependencies: - '@isaacs/cliui': 8.0.2 - - jake@10.9.2: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0): - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0(supports-color@10.0.0) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.3(babel-plugin-macros@3.1.0) - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0(supports-color@10.0.0) - jest-snapshot: 29.7.0(supports-color@10.0.0) - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0) - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0(supports-color@10.0.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.13.13 - ts-node: 10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-jsdom@29.7.0(supports-color@10.0.0): - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/jsdom': 20.0.1 - '@types/node': 22.13.13 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jsdom: 20.0.3(supports-color@10.0.0) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.13 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.26.2 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - jest-util: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-resolve-dependencies@29.7.0(supports-color@10.0.0): - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.10 - resolve.exports: 2.0.3 - slash: 3.0.0 - - jest-runner@29.7.0(supports-color@10.0.0): - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0(supports-color@10.0.0) - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0(supports-color@10.0.0): - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0(supports-color@10.0.0) - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0(supports-color@10.0.0) - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0(supports-color@10.0.0): - dependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@babel/generator': 7.27.0 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) - '@babel/types': 7.27.0 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10(supports-color@10.0.0)) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.7.1 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.13 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@27.5.1: - dependencies: - '@types/node': 22.13.13 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest-worker@29.7.0: - dependencies: - '@types/node': 22.13.13 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jiti@1.21.7: {} - - jiti@2.4.2: {} - - jmespath@0.16.0: {} - - joi@17.13.3: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - - jose@6.0.10: {} - - jquery@3.7.1: {} - - js-cookie@3.0.5: {} - - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsbn@0.1.1: {} - - jsbn@1.1.0: {} - - jsdom@20.0.3(supports-color@10.0.0): - dependencies: - abab: 2.0.6 - acorn: 8.14.1 - acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 - decimal.js: 10.4.3 - domexception: 4.0.0 - escodegen: 2.1.0 - form-data: 4.0.2 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0(supports-color@10.0.0) - https-proxy-agent: 5.0.1(supports-color@10.0.0) - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.19 - parse5: 7.2.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 4.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.18.1 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jsdom@26.0.0(supports-color@10.0.0): - dependencies: - cssstyle: 4.3.0 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.2 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2(supports-color@10.0.0) - https-proxy-agent: 7.0.6(supports-color@10.0.0) - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.19 - parse5: 7.2.1 - rrweb-cssom: 0.8.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 5.1.2 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - ws: 8.18.1 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jsesc@3.0.2: {} - - jsesc@3.1.0: {} - - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.1.2 - - json-buffer@3.0.1: {} - - json-parse-better-errors@1.0.2: {} - - json-parse-even-better-errors@2.3.1: {} - - json-parse-even-better-errors@4.0.0: {} - - json-schema-traverse@0.4.1: {} - - json-schema-traverse@1.0.0: {} - - json-schema@0.4.0: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - json5@2.2.3: {} - - jsonc-parser@3.3.1: {} - - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonparse@1.3.1: {} - - jsonwebtoken@9.0.2: - dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 7.7.1 - - jsprim@2.0.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - jszip@3.10.1: - dependencies: - lie: 3.3.0 - pako: 1.0.11 - readable-stream: 2.3.8 - setimmediate: 1.0.5 - - jwa@1.4.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jwa@2.0.0: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@3.2.2: - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - - jws@4.0.0: - dependencies: - jwa: 2.0.0 - safe-buffer: 5.2.1 - - jwt-decode@4.0.0: {} - - kareem@2.6.3: {} - - keygrip@1.1.0: - dependencies: - tsscmp: 1.0.6 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - keyv@5.3.2: - dependencies: - '@keyv/serialize': 1.0.3 - - kind-of@6.0.3: {} - - kleur@3.0.3: {} - - kleur@4.1.5: {} - - koa-compose@4.1.0: {} - - koa-convert@2.0.0: - dependencies: - co: 4.6.0 - koa-compose: 4.1.0 - - koa@2.16.1(supports-color@10.0.0): - dependencies: - accepts: 1.3.8 - cache-content-type: 1.0.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookies: 0.9.1 - debug: 4.4.1(supports-color@10.0.0) - delegates: 1.0.0 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - fresh: 0.5.2 - http-assert: 1.5.0 - http-errors: 1.8.1 - is-generator-function: 1.1.0 - koa-compose: 4.1.0 - koa-convert: 2.0.0 - on-finished: 2.4.1 - only: 0.0.2 - parseurl: 1.3.3 - statuses: 1.5.0 - type-is: 1.6.18 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - kuler@2.0.0: {} - - ky@1.7.5: {} - - latest-version@9.0.0: - dependencies: - package-json: 10.0.1 - - launch-editor@2.10.0: - dependencies: - picocolors: 1.1.1 - shell-quote: 1.8.2 - - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 - - less-loader@12.2.0(less@4.2.2)(webpack@5.98.0): - dependencies: - less: 4.2.2 - optionalDependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - less@4.2.2: - dependencies: - copy-anything: 2.0.6 - parse-node-version: 1.0.1 - tslib: 2.8.1 - optionalDependencies: - errno: 0.1.8 - graceful-fs: 4.2.11 - image-size: 0.5.5 - make-dir: 2.1.0 - mime: 1.6.0 - needle: 3.3.1 - source-map: 0.6.1 - - leven@3.1.0: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lie@3.3.0: - dependencies: - immediate: 3.0.6 - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - lines-and-columns@2.0.4: {} - - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - - lint-staged@15.5.0(supports-color@10.0.0): - dependencies: - chalk: 5.4.1 - commander: 13.1.0 - debug: 4.4.0(supports-color@10.0.0) - execa: 8.0.1 - lilconfig: 3.1.3 - listr2: 8.2.5 - micromatch: 4.0.8 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.7.0 - transitivePeerDependencies: - - supports-color - - listr2@8.2.5: - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.0 - - load-json-file@7.0.1: {} - - loader-runner@4.3.0: {} - - loader-utils@3.3.1: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - - lodash-es@4.17.21: {} - - lodash.camelcase@4.3.0: {} - - lodash.debounce@4.0.8: {} - - lodash.defaults@4.2.0: {} - - lodash.includes@4.3.0: {} - - lodash.isarguments@3.1.0: {} - - lodash.isboolean@3.0.3: {} - - lodash.isequal@4.5.0: {} - - lodash.isinteger@4.0.4: {} - - lodash.isnumber@3.0.3: {} - - lodash.isplainobject@4.0.6: {} - - lodash.isstring@4.0.1: {} - - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash.once@4.1.1: {} - - lodash.uniq@4.5.0: {} - - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - log-symbols@6.0.0: - dependencies: - chalk: 5.4.1 - is-unicode-supported: 1.3.0 - - log-symbols@7.0.0: - dependencies: - is-unicode-supported: 2.1.0 - yoctocolors: 2.1.1 - - log-update@6.1.0: - dependencies: - ansi-escapes: 7.0.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - - log4js@6.9.1(supports-color@10.0.0): - dependencies: - date-format: 4.0.14 - debug: 4.4.0(supports-color@10.0.0) - flatted: 3.3.3 - rfdc: 1.4.1 - streamroller: 3.1.5(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - - loglevel@1.9.2: {} - - long@5.3.1: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - loupe@3.1.3: {} - - lower-case@2.0.2: - dependencies: - tslib: 2.8.1 - - lowercase-keys@3.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@11.1.0: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - luxon@3.6.0: {} - - lz-string@1.5.0: {} - - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - make-dir@2.1.0: - dependencies: - pify: 4.0.1 - semver: 5.7.2 - optional: true - - make-dir@4.0.0: - dependencies: - semver: 7.7.1 - - make-dir@5.0.0: {} - - make-error@1.3.6: {} - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - map-obj@5.0.2: {} - - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - - marked@15.0.7: {} - - math-intrinsics@1.1.0: {} - - md5@2.3.0: - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 - - mdn-data@2.0.28: {} - - mdn-data@2.0.30: {} - - mdn-data@2.12.2: {} - - mdn-data@2.18.0: {} - - mdurl@2.0.0: {} - - media-typer@0.3.0: {} - - media-typer@1.1.0: {} - - memfs@4.17.0: - dependencies: - '@jsonjoy.com/json-pack': 1.2.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) - tree-dump: 1.0.2(tslib@2.8.1) - tslib: 2.8.1 - - memory-pager@1.5.0: {} - - meow@13.2.0: {} - - merge-descriptors@1.0.3: {} - - merge-descriptors@2.0.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - - mime@2.6.0: {} - - mime@4.0.6: {} - - mimic-fn@2.1.0: {} - - mimic-fn@4.0.0: {} - - mimic-function@5.0.1: {} - - mimic-response@3.1.0: {} - - mimic-response@4.0.0: {} - - min-indent@1.0.1: {} - - mini-css-extract-plugin@2.9.2(webpack@5.98.0): - dependencies: - schema-utils: 4.3.0 - tapable: 2.2.1 - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - minimalistic-assert@1.0.1: {} - - minimalistic-crypto-utils@1.0.1: {} - - minimatch@10.0.1: - dependencies: - brace-expansion: 2.0.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@7.1.2: {} - - minizlib@3.0.1: - dependencies: - minipass: 7.1.2 - rimraf: 5.0.10 - - mitt@3.0.1: {} - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@3.0.1: {} - - mocha@11.1.0: - dependencies: - ansi-colors: 4.1.3 - browser-stdout: 1.3.1 - chokidar: 3.6.0 - debug: 4.4.0(supports-color@8.1.1) - diff: 5.2.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 10.4.5 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.1.6 - ms: 2.1.3 - serialize-javascript: 6.0.2 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.5.1 - yargs: 17.7.2 - yargs-parser: 21.1.1 - yargs-unparser: 2.0.0 - - module-details-from-path@1.0.3: {} - - moment-timezone@0.5.48: - dependencies: - moment: 2.30.1 - - moment@2.30.1: {} - - mongodb-connection-string-url@3.0.2: - dependencies: - '@types/whatwg-url': 11.0.5 - whatwg-url: 14.2.0 - - mongodb@6.15.0(socks@2.8.4): - dependencies: - '@mongodb-js/saslprep': 1.2.0 - bson: 6.10.3 - mongodb-connection-string-url: 3.0.2 - optionalDependencies: - socks: 2.8.4 - - mongoose@8.13.0(socks@2.8.4)(supports-color@10.0.0): - dependencies: - bson: 6.10.3 - kareem: 2.6.3 - mongodb: 6.15.0(socks@2.8.4) - mpath: 0.9.0 - mquery: 5.0.0(supports-color@10.0.0) - ms: 2.1.3 - sift: 17.1.3 - transitivePeerDependencies: - - '@aws-sdk/credential-providers' - - '@mongodb-js/zstd' - - gcp-metadata - - kerberos - - mongodb-client-encryption - - snappy - - socks - - supports-color - - morgan@1.10.0(supports-color@10.0.0): - dependencies: - basic-auth: 2.0.1 - debug: 2.6.9(supports-color@10.0.0) - depd: 2.0.0 - on-finished: 2.3.0 - on-headers: 1.0.2 - transitivePeerDependencies: - - supports-color - - motion-dom@12.6.0: - dependencies: - motion-utils: 12.5.0 - - motion-utils@12.5.0: {} - - mpath@0.9.0: {} - - mquery@5.0.0(supports-color@10.0.0): - dependencies: - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - ms@2.0.0: {} - - ms@2.1.3: {} - - multer@2.0.2: - dependencies: - append-field: 1.0.0 - busboy: 1.6.0 - concat-stream: 2.0.0 - mkdirp: 0.5.6 - object-assign: 4.1.1 - type-is: 1.6.18 - xtend: 4.0.2 - - multicast-dns@7.2.5: - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - - mustache@4.2.0: {} - - mute-stream@2.0.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nan@2.22.2: {} - - nanoid@3.3.11: {} - - nanoid@5.1.5: {} - - napi-postinstall@0.3.2: {} - - natural-compare@1.4.0: {} - - needle@3.3.1: - dependencies: - iconv-lite: 0.6.3 - sax: 1.4.1 - optional: true - - negotiator@0.6.3: {} - - negotiator@0.6.4: {} - - negotiator@1.0.0: {} - - neo-async@2.6.2: {} - - next@15.5.9(@babel/core@7.26.10(supports-color@10.0.0))(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)(sass@1.86.0): - dependencies: - '@next/env': 15.5.9 - '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001707 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - styled-jsx: 5.1.6(@babel/core@7.26.10(supports-color@10.0.0))(babel-plugin-macros@3.1.0)(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 15.5.7 - '@next/swc-darwin-x64': 15.5.7 - '@next/swc-linux-arm64-gnu': 15.5.7 - '@next/swc-linux-arm64-musl': 15.5.7 - '@next/swc-linux-x64-gnu': 15.5.7 - '@next/swc-linux-x64-musl': 15.5.7 - '@next/swc-win32-arm64-msvc': 15.5.7 - '@next/swc-win32-x64-msvc': 15.5.7 - '@opentelemetry/api': 1.9.0 - sass: 1.86.0 - sharp: 0.34.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - nice-try@1.0.5: {} - - nice-try@3.0.1: {} - - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.8.1 - - node-addon-api@7.1.1: - optional: true - - node-addon-api@8.3.1: {} - - node-domexception@1.0.0: {} - - node-fetch@2.7.0(encoding@0.1.13): - dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - - node-forge@1.3.1: {} - - node-gyp-build@4.8.4: {} - - node-int64@0.4.0: {} - - node-releases@2.0.19: {} - - nodemailer@6.10.0: {} - - nodemon@3.1.9: - dependencies: - chokidar: 3.6.0 - debug: 4.4.0(supports-color@5.5.0) - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 7.7.1 - simple-update-notifier: 2.0.0 - supports-color: 5.5.0 - touch: 3.1.1 - undefsafe: 2.0.5 - - nopt@8.1.0: - dependencies: - abbrev: 3.0.0 - - normalize-package-data@6.0.2: - dependencies: - hosted-git-info: 7.0.2 - semver: 7.7.1 - validate-npm-package-license: 3.0.4 - - normalize-package-data@7.0.0: - dependencies: - hosted-git-info: 8.0.2 - semver: 7.7.1 - validate-npm-package-license: 3.0.4 - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - normalize-url@8.0.1: {} - - npm-package-arg@12.0.2: - dependencies: - hosted-git-info: 8.0.2 - proc-log: 5.0.0 - semver: 7.7.1 - validate-npm-package-name: 6.0.0 - - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - - npm-run-path@6.0.0: - dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 - - npm@11.2.0: {} - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - nwsapi@2.2.19: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.13.4: {} - - object-is@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - obuf@1.1.2: {} - - on-exit-leak-free@2.1.2: {} - - on-finished@2.3.0: - dependencies: - ee-first: 1.1.1 - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - on-headers@1.0.2: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - - only@0.0.2: {} - - open@10.1.0: - dependencies: - default-browser: 5.2.1 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 3.1.0 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - ora@8.2.0: - dependencies: - chalk: 5.4.1 - cli-cursor: 5.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.0 - - os-tmpdir@1.0.2: {} - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-cancelable@4.0.1: {} - - p-finally@1.0.0: {} - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.1 - - p-limit@6.2.0: - dependencies: - yocto-queue: 1.2.1 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - - p-map@7.0.3: {} - - p-retry@6.2.1: - dependencies: - '@types/retry': 0.12.2 - is-network-error: 1.1.0 - retry: 0.13.1 - - p-try@2.2.0: {} - - p-try@3.0.0: {} - - package-json-from-dist@1.0.1: {} - - package-json@10.0.1: - dependencies: - ky: 1.7.5 - registry-auth-token: 5.1.0 - registry-url: 6.0.1 - semver: 7.7.1 - - pako@1.0.11: {} - - pako@2.1.0: {} - - param-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.26.2 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-json@8.2.0: - dependencies: - '@babel/code-frame': 7.26.2 - index-to-position: 1.0.0 - type-fest: 4.38.0 - - parse-ms@4.0.0: {} - - parse-node-version@1.0.1: {} - - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.2.1 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.2.1 - - parse5@7.2.1: - dependencies: - entities: 4.5.0 - - parseurl@1.3.3: {} - - pascal-case@3.1.2: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - - path-browserify@1.0.1: {} - - path-exists@4.0.0: {} - - path-exists@5.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@2.0.1: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-scurry@2.0.0: - dependencies: - lru-cache: 11.1.0 - minipass: 7.1.2 - - path-to-regexp@0.1.12: {} - - path-to-regexp@8.2.0: {} - - path-type@4.0.0: {} - - path-type@6.0.0: {} - - path@0.12.7: - dependencies: - process: 0.11.10 - util: 0.10.4 - - pathe@2.0.3: {} - - pathval@2.0.0: {} - - peek-readable@7.0.0: {} - - performance-now@2.1.0: {} - - pg-cloudflare@1.1.1: - optional: true - - pg-connection-string@2.7.0: {} - - pg-int8@1.0.1: {} - - pg-pool@3.8.0(pg@8.14.1): - dependencies: - pg: 8.14.1 - - pg-protocol@1.8.0: {} - - pg-types@2.2.0: - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.0 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - - pg@8.14.1: - dependencies: - pg-connection-string: 2.7.0 - pg-pool: 3.8.0(pg@8.14.1) - pg-protocol: 1.8.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.1.1 - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - pidtree@0.6.0: {} - - pify@2.3.0: {} - - pify@4.0.1: - optional: true - - pify@6.1.0: {} - - pino-abstract-transport@2.0.0: - dependencies: - split2: 4.2.0 - - pino-std-serializers@7.0.0: {} - - pino@9.6.0: - dependencies: - atomic-sleep: 1.0.0 - fast-redact: 3.5.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pino-std-serializers: 7.0.0 - process-warning: 4.0.1 - quick-format-unescaped: 4.0.4 - real-require: 0.2.0 - safe-stable-stringify: 2.5.0 - sonic-boom: 4.2.0 - thread-stream: 3.1.0 - - pirates@4.0.6: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - pkg-dir@7.0.0: - dependencies: - find-up: 6.3.0 - - pkg-dir@8.0.0: - dependencies: - find-up-simple: 1.0.1 - - playwright-core@1.51.1: {} - - playwright@1.51.1: - dependencies: - playwright-core: 1.51.1 - optionalDependencies: - fsevents: 2.3.2 - - pluralize@8.0.0: {} - - pnpm@11.3.0: {} - - polished@4.3.1: - dependencies: - '@babel/runtime': 7.27.0 - - possible-typed-array-names@1.1.0: {} - - postcss-calc@10.1.1(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 7.1.0 - postcss-value-parser: 4.2.0 - - postcss-colormin@7.0.2(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-convert-values@7.0.4(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-discard-comments@7.0.3(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.1.2 - - postcss-discard-duplicates@7.0.1(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - postcss-discard-empty@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - postcss-discard-overridden@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - postcss-import@16.1.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 - - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.33)(yaml@2.7.0): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.4.2 - postcss: 8.4.33 - yaml: 2.7.0 - - postcss-loader@8.1.1(postcss@8.4.33)(typescript@5.8.2)(webpack@5.98.0): - dependencies: - cosmiconfig: 9.0.0(typescript@5.8.2) - jiti: 1.21.7 - postcss: 8.4.33 - semver: 7.7.1 - optionalDependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - transitivePeerDependencies: - - typescript - - postcss-merge-longhand@7.0.4(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.4.33) - - postcss-merge-rules@7.0.4(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-selector-parser: 6.1.2 - - postcss-minify-font-values@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-minify-gradients@7.0.0(postcss@8.4.33): - dependencies: - colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-minify-params@7.0.2(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - cssnano-utils: 5.0.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-minify-selectors@7.0.4(postcss@8.4.33): - dependencies: - cssesc: 3.0.0 - postcss: 8.4.33 - postcss-selector-parser: 6.1.2 - - postcss-modules-extract-imports@3.1.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - postcss-modules-local-by-default@4.2.0(postcss@8.4.33): - dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-selector-parser: 7.1.0 - postcss-value-parser: 4.2.0 - - postcss-modules-scope@3.2.1(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 7.1.0 - - postcss-modules-values@4.0.0(postcss@8.4.33): - dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - - postcss-nested@7.0.2(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 7.1.0 - - postcss-normalize-charset@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - - postcss-normalize-display-values@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-positions@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-repeat-style@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-string@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-timing-functions@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-unicode@7.0.2(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-url@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-normalize-whitespace@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-ordered-values@7.0.1(postcss@8.4.33): - dependencies: - cssnano-utils: 5.0.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-reduce-initial@7.0.2(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - postcss: 8.4.33 - - postcss-reduce-transforms@7.0.0(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@7.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-svgo@7.0.1(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - svgo: 3.3.2 - - postcss-unique-selectors@7.0.3(postcss@8.4.33): - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.1.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.4.31: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.4.33: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.5.3: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postgres-array@2.0.0: {} - - postgres-bytea@1.0.0: {} - - postgres-date@1.0.7: {} - - postgres-interval@1.2.0: - dependencies: - xtend: 4.0.2 - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@3.5.3: {} - - pretty-bytes@6.1.1: {} - - pretty-error@4.0.0: - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - pretty-ms@9.2.0: - dependencies: - parse-ms: 4.0.0 - - prismjs@1.30.0: {} - - proc-log@5.0.0: {} - - process-nextick-args@2.0.1: {} - - process-warning@4.0.1: {} - - process@0.11.10: {} - - progress@2.0.3: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - - promise@8.3.0: - dependencies: - asap: 2.0.6 - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - property-expr@2.0.6: {} - - proto-list@1.2.4: {} - - protobufjs@7.4.0: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 22.13.13 - long: 5.3.1 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-from-env@1.1.0: {} - - prr@1.0.1: - optional: true - - psl@1.15.0: - dependencies: - punycode: 2.3.1 - - pstree.remy@1.1.8: {} - - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - - punycode.js@2.3.1: {} - - punycode@1.3.2: {} - - punycode@1.4.1: {} - - punycode@2.3.1: {} - - pupa@3.1.0: - dependencies: - escape-goat: 4.0.0 - - pure-rand@6.1.0: {} - - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - query-string@9.1.1: - dependencies: - decode-uri-component: 0.4.1 - filter-obj: 5.1.0 - split-on-first: 3.0.0 - - querystring@0.2.0: {} - - querystringify@2.2.0: {} - - queue-microtask@1.2.3: {} - - quick-format-unescaped@4.0.4: {} - - quick-lru@5.1.1: {} - - raf@3.4.1: - dependencies: - performance-now: 2.1.0 - - ramda@0.30.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - raw-body@3.0.0: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - unpipe: 1.0.0 - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - react-dom@19.0.0(react@18.3.1): - dependencies: - react: 18.3.1 - scheduler: 0.25.0 - - react-hook-form@7.54.2(react@18.3.1): - dependencies: - react: 18.3.1 - - react-is@16.13.1: {} - - react-is@17.0.2: {} - - react-is@18.3.1: {} - - react-is@19.0.0: {} - - react-redux@9.2.0(@types/react@19.0.12)(react@18.3.1)(redux@5.0.1): - dependencies: - '@types/use-sync-external-store': 0.0.6 - react: 18.3.1 - use-sync-external-store: 1.4.0(react@18.3.1) - optionalDependencies: - '@types/react': 19.0.12 - redux: 5.0.1 - - react-refresh@0.16.0: {} - - react-router-dom@7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - react-router: 7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) - - react-router@7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): - dependencies: - '@types/cookie': 0.6.0 - cookie: 1.0.2 - react: 18.3.1 - set-cookie-parser: 2.7.1 - turbo-stream: 2.4.0 - optionalDependencies: - react-dom: 19.0.0(react@18.3.1) - - react-router@7.7.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): - dependencies: - cookie: 1.0.2 - react: 18.3.1 - set-cookie-parser: 2.7.1 - optionalDependencies: - react-dom: 19.0.0(react@18.3.1) - - react-transition-group@4.4.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.27.0 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 19.0.0(react@18.3.1) - - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.2.0 - type-fest: 4.38.0 - unicorn-magic: 0.1.0 - - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - - readdir-glob@1.1.3: - dependencies: - minimatch: 5.1.6 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - readdirp@4.1.2: {} - - real-require@0.2.0: {} - - recast@0.23.11: - dependencies: - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tiny-invariant: 1.3.3 - tslib: 2.8.1 - - rechoir@0.6.2: - dependencies: - resolve: 1.22.10 - - rechoir@0.8.0: - dependencies: - resolve: 1.22.10 - - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - - redent@4.0.0: - dependencies: - indent-string: 5.0.0 - strip-indent: 4.0.0 - - redis-errors@1.2.0: {} - - redis-parser@3.0.0: - dependencies: - redis-errors: 1.2.0 - - redux-thunk@3.1.0(redux@5.0.1): - dependencies: - redux: 5.0.1 - - redux@5.0.1: {} - - reflect-metadata@0.2.2: {} - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regenerate-unicode-properties@10.2.0: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regenerator-runtime@0.14.1: {} - - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.27.0 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - regexpu-core@6.2.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 - regjsgen: 0.8.0 - regjsparser: 0.12.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 - - registry-auth-token@5.1.0: - dependencies: - '@pnpm/npm-conf': 2.3.1 - - registry-url@6.0.1: - dependencies: - rc: 1.2.8 - - regjsgen@0.8.0: {} - - regjsparser@0.12.0: - dependencies: - jsesc: 3.0.2 - - relateurl@0.2.7: {} - - renderkid@3.0.0: - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - - repeat-string@1.6.1: {} - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - require-in-the-middle@7.5.2(supports-color@10.0.0): - dependencies: - debug: 4.4.0(supports-color@10.0.0) - module-details-from-path: 1.0.3 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - require-main-filename@2.0.0: {} - - requires-port@1.0.0: {} - - reselect@5.1.1: {} - - resize-observer-polyfill@1.5.1: {} - - resolve-alpn@1.2.1: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve.exports@2.0.3: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@3.0.0: - dependencies: - lowercase-keys: 3.0.0 - - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - - retry@0.12.0: {} - - retry@0.13.1: {} - - reusify@1.1.0: {} - - rfdc@1.4.1: {} - - rimraf@5.0.10: - dependencies: - glob: 10.4.5 - - rimraf@6.0.1: - dependencies: - glob: 11.0.1 - package-json-from-dist: 1.0.1 - - rollup@4.37.0: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.37.0 - '@rollup/rollup-android-arm64': 4.37.0 - '@rollup/rollup-darwin-arm64': 4.37.0 - '@rollup/rollup-darwin-x64': 4.37.0 - '@rollup/rollup-freebsd-arm64': 4.37.0 - '@rollup/rollup-freebsd-x64': 4.37.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 - '@rollup/rollup-linux-arm-musleabihf': 4.37.0 - '@rollup/rollup-linux-arm64-gnu': 4.37.0 - '@rollup/rollup-linux-arm64-musl': 4.37.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 - '@rollup/rollup-linux-riscv64-gnu': 4.37.0 - '@rollup/rollup-linux-riscv64-musl': 4.37.0 - '@rollup/rollup-linux-s390x-gnu': 4.37.0 - '@rollup/rollup-linux-x64-gnu': 4.37.0 - '@rollup/rollup-linux-x64-musl': 4.37.0 - '@rollup/rollup-win32-arm64-msvc': 4.37.0 - '@rollup/rollup-win32-ia32-msvc': 4.37.0 - '@rollup/rollup-win32-x64-msvc': 4.37.0 - fsevents: 2.3.3 - - rrweb-cssom@0.8.0: {} - - run-applescript@7.0.0: {} - - run-async@3.0.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.1: - dependencies: - tslib: 2.8.1 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@2.5.0: {} - - safer-buffer@2.1.2: {} - - sass-loader@16.0.5(sass@1.86.0)(webpack@5.98.0): - dependencies: - neo-async: 2.6.2 - optionalDependencies: - sass: 1.86.0 - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - sass@1.86.0: - dependencies: - chokidar: 4.0.3 - immutable: 5.0.3 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.5.1 - - sax@1.2.1: {} - - sax@1.4.1: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - scheduler@0.25.0: {} - - schema-utils@4.3.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) - - select-hose@2.0.0: {} - - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - - semver@5.7.2: {} - - semver@6.3.1: {} - - semver@7.7.1: {} - - semver@7.7.3: - optional: true - - send@0.19.0(supports-color@10.0.0): - dependencies: - debug: 2.6.9(supports-color@10.0.0) - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - send@1.1.0(supports-color@10.0.0): - dependencies: - debug: 4.4.0(supports-color@10.0.0) - destroy: 1.2.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime-types: 2.1.35 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - serve-index@1.9.1(supports-color@10.0.0): - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9(supports-color@10.0.0) - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - - serve-static@1.16.2(supports-color@10.0.0): - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - set-blocking@2.0.0: {} - - set-cookie-parser@2.7.1: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - set-value@4.1.0: - dependencies: - is-plain-object: 2.0.4 - is-primitive: 3.0.1 - - setimmediate@1.0.5: {} - - setprototypeof@1.1.0: {} - - setprototypeof@1.2.0: {} - - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.7.1 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - - sharp@0.34.5: - dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - optional: true - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@1.0.0: {} - - shebang-regex@3.0.0: {} - - shebang-regex@4.0.0: {} - - shell-quote@1.8.2: {} - - shelljs@0.9.2: - dependencies: - execa: 1.0.0 - fast-glob: 3.3.3 - interpret: 1.4.0 - rechoir: 0.6.2 - - shimmer@1.2.1: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - sift@17.1.3: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-git@3.27.0(supports-color@10.0.0): - dependencies: - '@kwsites/file-exists': 1.1.1(supports-color@10.0.0) - '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.7.1 - - sisteransi@1.0.5: {} - - slash@3.0.0: {} - - slash@5.1.0: {} - - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 - - smart-buffer@4.2.0: {} - - socket.io-adapter@2.5.5(supports-color@10.0.0): - dependencies: - debug: 4.3.7(supports-color@10.0.0) - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-client@4.8.1(supports-color@10.0.0): - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7(supports-color@10.0.0) - engine.io-client: 6.6.3(supports-color@10.0.0) - socket.io-parser: 4.2.4(supports-color@10.0.0) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-parser@4.2.4(supports-color@10.0.0): - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - socket.io@4.8.1(supports-color@10.0.0): - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - cors: 2.8.5 - debug: 4.3.7(supports-color@10.0.0) - engine.io: 6.6.4(supports-color@10.0.0) - socket.io-adapter: 2.5.5(supports-color@10.0.0) - socket.io-parser: 4.2.4(supports-color@10.0.0) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - sockjs@0.3.24: - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - - socks-proxy-agent@8.0.5(supports-color@10.0.0): - dependencies: - agent-base: 7.1.3 - debug: 4.4.0(supports-color@10.0.0) - socks: 2.8.4 - transitivePeerDependencies: - - supports-color - - socks@2.8.4: - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - - sonic-boom@4.2.0: - dependencies: - atomic-sleep: 1.0.0 - - source-map-js@1.2.1: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.5.7: {} - - source-map@0.6.1: {} - - source-map@0.7.4: {} - - sparse-bitfield@3.0.3: - dependencies: - memory-pager: 1.5.0 - - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 - - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 - - spdx-license-ids@3.0.21: {} - - spdy-transport@3.0.0(supports-color@10.0.0): - dependencies: - debug: 4.4.1(supports-color@10.0.0) - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - - spdy@4.0.2(supports-color@10.0.0): - dependencies: - debug: 4.4.1(supports-color@10.0.0) - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - - split-on-first@3.0.0: {} - - split2@4.2.0: {} - - sprintf-js@1.0.3: {} - - sprintf-js@1.1.3: {} - - sshpk@1.18.0: - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - - stable-hash-x@0.2.0: {} - - stack-trace@0.0.10: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - stackframe@1.3.4: {} - - standard-as-callback@2.1.0: {} - - statuses@1.5.0: {} - - statuses@2.0.1: {} - - stdin-discarder@0.2.2: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - stream-browserify@3.0.0: - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - - streamroller@3.1.5(supports-color@10.0.0): - dependencies: - date-format: 4.0.14 - debug: 4.4.0(supports-color@10.0.0) - fs-extra: 8.1.0 - transitivePeerDependencies: - - supports-color - - streamsearch@1.1.0: {} - - streamx@2.22.0: - dependencies: - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 - - string-argv@0.3.2: {} - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-length@6.0.0: - dependencies: - strip-ansi: 7.1.0 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string-width@7.2.0: - dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - strip-bom@3.0.0: {} - - strip-bom@4.0.0: {} - - strip-bom@5.0.0: {} - - strip-eof@1.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-final-newline@3.0.0: {} - - strip-final-newline@4.0.0: {} - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 - - strip-json-comments@2.0.1: {} - - strip-json-comments@3.1.1: {} - - strip-json-comments@5.0.1: {} - - strnum@1.1.2: {} - - strnum@2.0.5: {} - - strtok3@10.2.2: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 7.0.0 - - stubborn-fs@1.2.5: {} - - style-loader@4.0.0(webpack@5.98.0): - dependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - styled-jsx@5.1.6(@babel/core@7.26.10(supports-color@10.0.0))(babel-plugin-macros@3.1.0)(react@18.3.1): - dependencies: - client-only: 0.0.1 - react: 18.3.1 - optionalDependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - babel-plugin-macros: 3.1.0 - - stylehacks@7.0.4(postcss@8.4.33): - dependencies: - browserslist: 4.24.4 - postcss: 8.4.33 - postcss-selector-parser: 6.1.2 - - stylis@4.2.0: {} - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - superagent@10.2.0(supports-color@10.0.0): - dependencies: - component-emitter: 1.3.1 - cookiejar: 2.1.4 - debug: 4.4.0(supports-color@10.0.0) - fast-safe-stringify: 2.1.1 - form-data: 4.0.2 - formidable: 3.5.2 - methods: 1.1.2 - mime: 2.6.0 - qs: 6.14.0 - transitivePeerDependencies: - - supports-color - - supports-color@10.0.0: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - svgo@3.3.2: - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 5.1.0 - css-tree: 2.3.1 - css-what: 6.1.0 - csso: 5.0.5 - picocolors: 1.1.1 - - symbol-tree@3.2.4: {} - - synckit@0.11.11: - dependencies: - '@pkgr/core': 0.2.9 - - tailwind-merge@3.0.2: {} - - tailwindcss@4.0.16: {} - - tapable@2.2.1: {} - - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.22.0 - - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.1 - mkdirp: 3.0.1 - yallist: 5.0.0 - - terser-webpack-plugin@5.3.14(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack@5.98.0): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - terser: 5.39.0 - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - optionalDependencies: - '@swc/core': 1.11.13(@swc/helpers@0.5.15) - esbuild: 0.25.1 - - terser@5.39.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 - commander: 2.20.3 - source-map-support: 0.5.21 - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - - text-decoder@1.2.3: - dependencies: - b4a: 1.6.7 - - text-hex@1.0.0: {} - - text-table@0.2.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - thingies@1.21.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - thread-stream@3.1.0: - dependencies: - real-require: 0.2.0 - - through2@4.0.2: - dependencies: - readable-stream: 3.6.2 - - through@2.3.8: {} - - thunky@1.1.0: {} - - tiny-case@1.0.3: {} - - tiny-invariant@1.3.3: {} - - tiny-warning@1.0.3: {} - - tinyglobby@0.2.14: - dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - - tldts-core@6.1.85: {} - - tldts@6.1.85: - dependencies: - tldts-core: 6.1.85 - - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 - - tmp@0.2.3: {} - - tmpl@1.0.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - token-types@6.0.0: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - - toposort@2.0.2: {} - - touch@3.1.1: {} - - tough-cookie@4.1.4: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - - tough-cookie@5.1.2: - dependencies: - tldts: 6.1.85 - - tr46@0.0.3: {} - - tr46@3.0.0: - dependencies: - punycode: 2.3.1 - - tr46@5.1.0: - dependencies: - punycode: 2.3.1 - - tree-dump@1.0.2(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - tree-kill@1.2.2: {} - - triple-beam@1.4.1: {} - - trough@2.2.0: {} - - ts-api-utils@2.1.0(typescript@5.8.2): - dependencies: - typescript: 5.8.2 - - ts-interface-checker@0.1.13: {} - - ts-jest@29.3.0(@babel/core@7.26.10(supports-color@10.0.0))(@jest/transform@29.7.0(supports-color@10.0.0))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(typescript@5.8.2): - dependencies: - bs-logger: 0.2.6 - ejs: 3.1.10 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.1 - type-fest: 4.38.0 - typescript: 5.8.2 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.26.10(supports-color@10.0.0) - '@jest/transform': 29.7.0(supports-color@10.0.0) - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) - esbuild: 0.25.1 - - ts-loader@9.5.2(typescript@5.8.2)(webpack@5.98.0): - dependencies: - chalk: 4.1.2 - enhanced-resolve: 5.18.1 - micromatch: 4.0.8 - semver: 7.7.1 - source-map: 0.7.4 - typescript: 5.8.2 - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.13.13 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.8.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.11.13(@swc/helpers@0.5.15) - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tsconfig-paths@4.2.0: - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.1: {} - - tsscmp@1.0.6: {} - - turbo-stream@2.4.0: {} - - tweetnacl@0.14.5: {} - - tweetnacl@1.0.3: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-detect@4.0.8: {} - - type-detect@4.1.0: {} - - type-fest@0.21.3: {} - - type-fest@1.4.0: {} - - type-fest@2.19.0: {} - - type-fest@4.38.0: {} - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typedarray-to-buffer@4.0.0: {} - - typedarray@0.0.6: {} - - typedarray@0.0.7: {} - - typescript@5.8.2: {} - - ua-is-frozen@0.1.2: {} - - ua-parser-js@2.0.3(encoding@0.1.13): - dependencies: - '@types/node-fetch': 2.6.12 - detect-europe-js: 0.1.2 - is-standalone-pwa: 0.1.1 - node-fetch: 2.7.0(encoding@0.1.13) - ua-is-frozen: 0.1.2 - transitivePeerDependencies: - - encoding - - uc.micro@2.1.0: {} - - uglify-js@3.19.3: - optional: true - - uid@2.0.2: - dependencies: - '@lukeed/csprng': 1.1.0 - - uint8array-extras@1.4.0: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undefsafe@2.0.5: {} - - underscore@1.13.7: {} - - undici-types@6.20.0: {} - - undici@6.21.2: {} - - undici@7.5.0: {} - - unicode-canonical-property-names-ecmascript@2.0.1: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 - - unicode-match-property-value-ecmascript@2.2.0: {} - - unicode-property-aliases-ecmascript@2.1.0: {} - - unicorn-magic@0.1.0: {} - - unicorn-magic@0.3.0: {} - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - - unique-string@3.0.0: - dependencies: - crypto-random-string: 4.0.0 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - universal-user-agent@7.0.2: {} - - universalify@0.1.2: {} - - universalify@0.2.0: {} - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.2 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - - update-browserslist-db@1.1.3(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 - - update-notifier@7.3.1: - dependencies: - boxen: 8.0.1 - chalk: 5.4.1 - configstore: 7.0.0 - is-in-ci: 1.0.0 - is-installed-globally: 1.0.0 - is-npm: 6.0.0 - latest-version: 9.0.0 - pupa: 3.1.0 - semver: 7.7.1 - xdg-basedir: 5.1.0 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-join@5.0.0: {} - - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - url@0.10.3: - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - - url@0.11.4: - dependencies: - punycode: 1.4.1 - qs: 6.14.0 - - use-sync-external-store@1.4.0(react@18.3.1): - dependencies: - react: 18.3.1 - - util-deprecate@1.0.2: {} - - util@0.10.4: - dependencies: - inherits: 2.0.3 - - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.2.0 - is-generator-function: 1.1.0 - is-typed-array: 1.1.15 - which-typed-array: 1.1.19 - - utila@0.4.0: {} - - utils-merge@1.0.1: {} - - uuid@11.1.0: {} - - uuid@8.0.0: {} - - uuid@8.3.2: {} - - uuid@9.0.1: {} - - v8-compile-cache-lib@3.0.1: {} - - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - - validate-npm-package-name@6.0.0: {} - - validator@13.15.0: {} - - vary@1.1.2: {} - - verror@1.10.0: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.2 - - vite@6.3.5(@types/node@22.13.13)(jiti@2.4.2)(less@4.2.2)(sass@1.86.0)(terser@5.39.0)(yaml@2.7.0): - dependencies: - esbuild: 0.25.1 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.37.0 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 22.13.13 - fsevents: 2.3.3 - jiti: 2.4.2 - less: 4.2.2 - sass: 1.86.0 - terser: 5.39.0 - yaml: 2.7.0 - - vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)): - dependencies: - '@vue/devtools-api': 6.6.4 - vue: 3.5.13(typescript@5.8.2) - - vue@3.5.13(typescript@5.8.2): - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2)) - '@vue/shared': 3.5.13 - optionalDependencies: - typescript: 5.8.2 - - w3c-xmlserializer@4.0.0: - dependencies: - xml-name-validator: 4.0.0 - - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - watchpack@2.4.2: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - - wbuf@1.7.3: - dependencies: - minimalistic-assert: 1.0.1 - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - web-streams-polyfill@3.3.3: {} - - web-vitals@4.2.4: {} - - webidl-conversions@3.0.1: {} - - webidl-conversions@7.0.0: {} - - webpack-cli@6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0): - dependencies: - '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack@5.98.0) - colorette: 2.0.20 - commander: 12.1.0 - cross-spawn: 7.0.6 - envinfo: 7.14.0 - fastest-levenshtein: 1.0.16 - import-local: 3.2.0 - interpret: 3.1.1 - rechoir: 0.8.0 - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - webpack-merge: 6.0.1 - optionalDependencies: - webpack-dev-server: 5.2.2(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0) - - webpack-dev-middleware@7.4.2(webpack@5.98.0): - dependencies: - colorette: 2.0.20 - memfs: 4.17.0 - mime-types: 2.1.35 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.3.0 - optionalDependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - - webpack-dev-server@5.2.2(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0): - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/express-serve-static-core': 4.19.6 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.7 - '@types/sockjs': 0.3.36 - '@types/ws': 8.18.0 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.8.0(supports-color@10.0.0) - connect-history-api-fallback: 2.0.0 - express: 4.21.2(supports-color@10.0.0) - graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.21)(debug@4.4.0(supports-color@10.0.0)) - ipaddr.js: 2.2.0 - launch-editor: 2.10.0 - open: 10.1.0 - p-retry: 6.2.1 - schema-utils: 4.3.0 - selfsigned: 2.4.1 - serve-index: 1.9.1(supports-color@10.0.0) - sockjs: 0.3.24 - spdy: 4.0.2(supports-color@10.0.0) - webpack-dev-middleware: 7.4.2(webpack@5.98.0) - ws: 8.18.1 - optionalDependencies: - webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack-merge@6.0.1: - dependencies: - clone-deep: 4.0.1 - flat: 5.0.2 - wildcard: 2.0.1 - - webpack-sources@3.2.3: {} - - webpack@5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.7 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.1 - browserslist: 4.24.4 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.1 - es-module-lexer: 1.6.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 4.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack@5.98.0) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - optionalDependencies: - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.98.0) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - websocket-driver@0.7.4: - dependencies: - http-parser-js: 0.5.9 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - - websocket-extensions@0.1.4: {} - - whatwg-encoding@2.0.0: - dependencies: - iconv-lite: 0.6.3 - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-fetch@3.6.20: {} - - whatwg-mimetype@3.0.0: {} - - whatwg-mimetype@4.0.0: {} - - whatwg-url@11.0.0: - dependencies: - tr46: 3.0.0 - webidl-conversions: 7.0.0 - - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.0 - webidl-conversions: 7.0.0 - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - when-exit@2.1.4: {} - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@1.3.1: - dependencies: - isexe: 2.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@4.0.0: - dependencies: - isexe: 3.1.1 - - which@5.0.0: - dependencies: - isexe: 3.1.1 - - widest-line@5.0.0: - dependencies: - string-width: 7.2.0 - - wildcard@2.0.1: {} - - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - - word-wrap@1.2.5: {} - - wordwrap@1.0.0: {} - - workerpool@6.5.1: {} - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrap-ansi@9.0.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 - - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - write-file-atomic@6.0.0: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - - ws@8.17.1: {} - - ws@8.18.1: {} - - xdg-basedir@5.1.0: {} - - xml-name-validator@4.0.0: {} - - xml-name-validator@5.0.0: {} - - xml2js@0.6.2: - dependencies: - sax: 1.4.1 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - - xmlbuilder@15.1.1: {} - - xmlchars@2.2.0: {} - - xmlhttprequest-ssl@2.1.2: {} - - xtend@4.0.2: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yaml@1.10.2: {} - - yaml@2.7.0: {} - - yargs-parser@21.1.1: {} - - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - ylru@1.4.0: {} - - yn@3.1.1: {} - - yn@5.0.0: {} - - yocto-queue@0.1.0: {} - - yocto-queue@1.2.1: {} - - yoctocolors-cjs@2.1.2: {} - - yoctocolors@2.1.1: {} - - yup@1.6.1: - dependencies: - property-expr: 2.0.6 - tiny-case: 1.0.3 - toposort: 2.0.2 - type-fest: 2.19.0 - - zip-stream@6.0.1: - dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 - readable-stream: 4.7.0 - - zod@3.24.2: {} - - zone.js@0.15.0: {} diff --git a/benches/pnpm-workspace.yaml b/benches/pnpm-workspace.yaml deleted file mode 100644 index 8700f5a2..00000000 --- a/benches/pnpm-workspace.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# benches is a standalone fixture project (not a member of the repo-root workspace). -# Its dependencies are only ever resolved as paths by the resolver benchmarks; -# the JS is never executed. Making benches its own workspace root lets these -# settings apply to every `pnpm install` here — local and CI alike. -# -# ignoreScripts: assert no dependency/lifecycle script (e.g. postinstall) ever -# runs, keeping known-vulnerable transitive deps inert. -# strictDepBuilds: don't fail the install over those intentionally-skipped builds. -# -# NOTE: `pnpm install --ignore-workspace` bypasses this file, so do not pass that -# flag here — `cd benches && pnpm install` is enough. -packages: [] -ignoreScripts: true -strictDepBuilds: false diff --git a/benches/resolver.rs b/benches/resolver.rs deleted file mode 100644 index b5ccabd8..00000000 --- a/benches/resolver.rs +++ /dev/null @@ -1,498 +0,0 @@ -#[cfg(target_family = "wasm")] -use std::alloc::System; -use std::{ - alloc::{GlobalAlloc, Layout}, - env, fs, - fs::read_to_string, - future::Future, - io::{self, Write}, - path::{Path, PathBuf}, - sync::Arc, -}; - -#[global_allocator] -#[cfg(not(target_family = "wasm"))] -static GLOBAL: NeverGrowInPlaceAllocator = - NeverGrowInPlaceAllocator::new(mimalloc::MiMalloc); - -#[global_allocator] -#[cfg(target_family = "wasm")] -static GLOBAL: NeverGrowInPlaceAllocator = NeverGrowInPlaceAllocator::new(System); - -/// Delegates `alloc`/`dealloc` to the wrapped allocator but omits -/// [`GlobalAlloc::realloc`], forcing the default "alloc-new + copy + dealloc-old" -/// path so that benchmarks never benefit from non-deterministic in-place growth -/// provided by the underlying allocator's `realloc`. Wrapping `mimalloc::MiMalloc` -/// (instead of using it directly) also keeps `alloc` / `dealloc` visible to -/// CodSpeed's mimalloc white-box allocator tracking. -struct NeverGrowInPlaceAllocator { - allocator: A, -} - -impl NeverGrowInPlaceAllocator { - const fn new(allocator: A) -> Self { - Self { allocator } - } -} - -// SAFETY: Methods simply delegate to the wrapped allocator. -unsafe impl GlobalAlloc for NeverGrowInPlaceAllocator { - unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - self.allocator.alloc(layout) - } - - unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { - self.allocator.dealloc(ptr, layout) - } -} - -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; -use rspack_resolver::{FileSystemOptions, FileSystemOs, ResolveOptions, Resolver}; -use serde_json::Value; -use tokio::{ - runtime::{self, Builder}, - task::JoinSet, -}; - -fn symlink, Q: AsRef>(original: P, link: Q) -> io::Result<()> { - #[cfg(target_family = "unix")] - { - std::os::unix::fs::symlink(original, link) - } - - #[cfg(target_family = "windows")] - { - std::os::windows::fs::symlink_file(original, link) - } -} - -fn create_symlinks() -> io::Result { - let root = env::current_dir()?.join("fixtures/enhanced_resolve"); - let dirname = root.join("test"); - let temp_path = dirname.join("temp_symlinks"); - let create_symlink_fixtures = || -> io::Result<()> { - fs::create_dir(&temp_path)?; - let mut index = fs::File::create(temp_path.join("index.js"))?; - index.write_all(b"console.log('Hello, World!')")?; - // create 10000 symlink files pointing to the index.js - for i in 0..10000 { - symlink( - temp_path.join("index.js"), - temp_path.join(format!("file{i}.js")), - )?; - } - Ok(()) - }; - if !temp_path.exists() { - if let Err(err) = create_symlink_fixtures() { - let _ = fs::remove_dir_all(&temp_path); - return Err(err); - } - } - Ok(temp_path) -} - -fn rspack_resolver(enable_pnp: bool) -> rspack_resolver::Resolver { - use rspack_resolver::{AliasValue, ResolveOptions, Resolver}; - let alias_value = AliasValue::from("./"); - - let fs = FileSystemOs::new(FileSystemOptions { - #[cfg(feature = "yarn_pnp")] - enable_pnp, - }); - - Resolver::new_with_file_system( - fs, - ResolveOptions { - #[cfg(feature = "yarn_pnp")] - enable_pnp, - extensions: vec![".ts".into(), ".js".into(), ".mjs".into()], - condition_names: vec!["import".into(), "webpack".into(), "require".into()], - alias_fields: vec![vec!["browser".into()]], - extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])], - // Real projects LOVE setting these many aliases. - // I saw them with my own eyes. - alias: vec![ - ("/absolute/path".into(), vec![alias_value.clone()]), - ("aaa".into(), vec![alias_value.clone()]), - ("bbb".into(), vec![alias_value.clone()]), - ("ccc".into(), vec![alias_value.clone()]), - ("ddd".into(), vec![alias_value.clone()]), - ("eee".into(), vec![alias_value.clone()]), - ("fff".into(), vec![alias_value.clone()]), - ("ggg".into(), vec![alias_value.clone()]), - ("hhh".into(), vec![alias_value.clone()]), - ("iii".into(), vec![alias_value.clone()]), - ("jjj".into(), vec![alias_value.clone()]), - ("kkk".into(), vec![alias_value.clone()]), - ("lll".into(), vec![alias_value.clone()]), - ("mmm".into(), vec![alias_value.clone()]), - ("nnn".into(), vec![alias_value.clone()]), - ("ooo".into(), vec![alias_value.clone()]), - ("ppp".into(), vec![alias_value.clone()]), - ("qqq".into(), vec![alias_value.clone()]), - ("rrr".into(), vec![alias_value.clone()]), - ("sss".into(), vec![alias_value.clone()]), - ("@".into(), vec![alias_value.clone()]), - ("@@".into(), vec![alias_value.clone()]), - ("@@@".into(), vec![alias_value]), - ], - ..ResolveOptions::default() - }, - ) -} - -fn resolver_with_many_extensions() -> rspack_resolver::Resolver { - Resolver::new(ResolveOptions { - extensions: vec![ - ".bad0".to_string(), - ".bad1".to_string(), - ".bad2".to_string(), - ".bad3".to_string(), - ".bad4".to_string(), - ".bad5".to_string(), - ".bad6".to_string(), - ".bad7".to_string(), - ".bad8".to_string(), - ".bad9".to_string(), - ".mtsx".to_string(), - ".mts".to_string(), - ".mjs".to_string(), - ".tsx".to_string(), - ".ts".to_string(), - ".jsx".to_string(), - ".js".to_string(), - ], - imports_fields: vec![], - exports_fields: vec![], - enable_pnp: false, - ..Default::default() - }) -} - -fn tsconfig_resolver() -> rspack_resolver::Resolver { - use rspack_resolver::{ResolveOptions, Resolver, TsconfigOptions, TsconfigReferences}; - let config_dir = env::current_dir() - .unwrap() - .join("fixtures/tsconfig/cases/project_references"); - Resolver::new(ResolveOptions { - extensions: vec![".ts".into(), ".js".into()], - tsconfig: Some(TsconfigOptions { - config_file: config_dir.join("app"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }) -} - -fn create_async_resolve_task( - rspack_resolver: Arc, - path: PathBuf, - request: String, -) -> impl Future { - async move { - let _ = rspack_resolver.resolve(path, &request).await; - } -} - -fn bench_resolver(c: &mut Criterion) { - let cwd = env::current_dir().unwrap().join("benches"); - - let pkg_content = read_to_string("./benches/package.json").unwrap(); - let pkg_json: Value = serde_json::from_str(&pkg_content).unwrap(); - // about 1000 npm packages - let data = pkg_json["dependencies"] - .as_object() - .unwrap() - .keys() - .map(|name| (&cwd, name)) - .collect::>(); - - // check validity - runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { - for (path, request) in &data { - let r = rspack_resolver(false).resolve(path, request).await; - if !r.is_ok() { - panic!("resolve failed {path:?} {request},\n\nplease run `pnpm install` in `/benches` before running the benchmarks"); - } - } - }); - - let symlink_test_dir = create_symlinks().expect("Create symlink fixtures failed"); - - let symlinks_range = 0u32..10000; - - // check validity - runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap() - .block_on(async { - for i in symlinks_range.clone() { - assert!( - rspack_resolver(false) - .resolve(&symlink_test_dir, &format!("./file{i}")) - .await - .is_ok(), - "file{i}.js" - ); - } - }); - - let mut group = c.benchmark_group("resolver"); - - // CodSpeed memory mode (Valgrind massif) cannot meaningfully measure - // multi-threaded throughput — heap snapshots conflate allocations across - // worker threads and produce noisy, non-actionable deltas. - let skip_threaded = env::var("CODSPEED_RUNNER_MODE").as_deref() == Ok("memory"); - - // codspeed can only handle to up to 500 threads - let multi_rt = || { - Builder::new_multi_thread() - .max_blocking_threads(256) - .build() - .expect("failed to create tokio runtime") - }; - - // force to use four threads - rayon::ThreadPoolBuilder::new() - .num_threads(4) - .build_global() - .expect("Failed to build global thread pool"); - - group.bench_with_input( - BenchmarkId::from_parameter("single-thread"), - &data, - |b, data| { - let runner = runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to create tokio runtime"); - - let rspack_resolver = rspack_resolver(false); - - b.to_async(runner).iter_with_setup( - || { - rspack_resolver.clear_cache(); - }, - |_| async { - for (path, request) in data { - _ = rspack_resolver.resolve(path, request).await; - } - }, - ); - }, - ); - - group.bench_with_input( - BenchmarkId::from_parameter("[single-threaded]resolve with many extensions"), - &data, - |b, data| { - let runner = runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to create tokio runtime"); - let rspack_resolver = resolver_with_many_extensions(); - - b.to_async(runner).iter_with_setup( - || { - rspack_resolver.clear_cache(); - }, - |_| async { - for (path, request) in data { - _ = rspack_resolver - .resolve(path, &format!("{}/bad", request)) - .await; - } - }, - ); - }, - ); - - if !skip_threaded { - group.bench_with_input( - BenchmarkId::from_parameter("[multi-threaded]resolve"), - &data, - |b, data| { - let runner = multi_rt(); - let rspack_resolver = Arc::new(rspack_resolver(false)); - - b.iter_with_setup( - || { - rspack_resolver.clear_cache(); - }, - |_| { - runner.block_on(async { - let mut join_set = JoinSet::new(); - data.iter().for_each(|(path, request)| { - join_set.spawn(create_async_resolve_task( - rspack_resolver.clone(), - path.to_path_buf(), - request.to_string(), - )); - }); - let _ = join_set.join_all().await; - }); - }, - ); - }, - ); - } - - group.bench_with_input( - BenchmarkId::from_parameter("resolve from symlinks"), - &symlinks_range, - |b, data| { - let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); - let rspack_resolver = rspack_resolver(false); - - b.to_async(runner).iter_with_setup( - || { - rspack_resolver.clear_cache(); - }, - |_| async { - for i in data.clone() { - assert!( - rspack_resolver - .resolve(&symlink_test_dir, &format!("./file{i}")) - .await - .is_ok(), - "file{i}.js" - ); - } - }, - ); - }, - ); - - if !skip_threaded { - group.bench_with_input( - BenchmarkId::from_parameter("[multi-threaded]resolve from symlinks"), - &symlinks_range, - |b, data| { - let runner = multi_rt(); - let rspack_resolver = Arc::new(rspack_resolver(false)); - - let symlink_test_dir = symlink_test_dir.clone(); - - b.to_async(runner).iter_with_setup( - || { - rspack_resolver.clear_cache(); - }, - |_| async { - let mut join_set = JoinSet::new(); - - data.clone().for_each(|i| { - join_set.spawn(create_async_resolve_task( - rspack_resolver.clone(), - symlink_test_dir.clone(), - format!("./file{i}").to_string(), - )); - }); - join_set.join_all().await; - }, - ); - }, - ); - } - - let pnp_workspace = env::current_dir().unwrap().join("fixtures/pnp"); - let root_range = 1..11; - - group.bench_with_input( - BenchmarkId::from_parameter("pnp resolve"), - &root_range, - |b, data| { - let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); - let rspack_resolver = Arc::new(rspack_resolver(true)); - - b.iter_with_setup( - || { - // Drop all caches, then reload the PnP manifest before the timed - // body runs. The manifest re-parse (~250KB regex compile) is - // one-time work in real usage; keeping it out of the timed loop - // lets resolver-level deltas surface. - rspack_resolver.clear_cache(); - runner.block_on(async { - let _ = rspack_resolver - .resolve(pnp_workspace.join("1"), "preact") - .await; - }); - }, - |_| { - runner.block_on(async { - for i in data.clone() { - let _ = rspack_resolver - .resolve(pnp_workspace.join(format!("{i}")), "preact") - .await; - } - }); - }, - ); - }, - ); - - // tsconfig `paths` + project-references resolution. Each resolve hits the - // warm `tsconfigs` cache once (a single key hash of the fixed config path), - // so looping the case set keeps that lookup hot — this is the scenario that - // exercises the `Utf8PathBuf` vs `PathBuf` map-key question. - let tsconfig_dir = env::current_dir() - .unwrap() - .join("fixtures/tsconfig/cases/project_references"); - let tsconfig_data = vec![ - (tsconfig_dir.join("app"), "@/index.ts"), - (tsconfig_dir.join("app"), "@/../index.ts"), - (tsconfig_dir.join("project_a"), "@/index.ts"), - (tsconfig_dir.join("project_b/src"), "@/index.ts"), - (tsconfig_dir.join("project_a"), "./index.ts"), - (tsconfig_dir.join("project_c"), "./index.ts"), - ]; - - // check validity - runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap() - .block_on(async { - let resolver = tsconfig_resolver(); - for (path, request) in &tsconfig_data { - assert!( - resolver.resolve(path, request).await.is_ok(), - "tsconfig resolve failed {path:?} {request}, fixtures/tsconfig/cases/project_references" - ); - } - }); - - group.bench_with_input( - BenchmarkId::from_parameter("tsconfig resolve"), - &tsconfig_data, - |b, data| { - let runner = runtime::Builder::new_current_thread() - .enable_all() - .build() - .expect("failed to create tokio runtime"); - let rspack_resolver = tsconfig_resolver(); - - b.to_async(runner).iter_with_setup( - || { - rspack_resolver.clear_cache(); - }, - |_| async { - for _ in 0..100 { - for (path, request) in data { - _ = rspack_resolver.resolve(path, request).await; - } - } - }, - ); - }, - ); -} - -// Specifier microbenchmarks live in `benches/specifier.rs` (separate -// `[[bench]]` binary) so the very short `specifier/*` cases get a fresh -// instruction cache instead of competing with the resolver bench code for -// cache lines. See that file for the rationale. - -criterion_group!(resolver, bench_resolver); -criterion_main!(resolver); diff --git a/deny.toml b/deny.toml index 1c4e9974..60431b50 100644 --- a/deny.toml +++ b/deny.toml @@ -92,6 +92,7 @@ allow = [ "MIT", "Apache-2.0", "BSD-2-Clause", + "ISC", "Unicode-3.0", "Zlib" #"Apache-2.0 WITH LLVM-exception", @@ -132,7 +133,7 @@ exceptions = [ # published to private registries. # To see how to mark a crate as unpublished (to the official registry), # visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field. -ignore = false +ignore = true # One or more private registries that you might publish crates to, if a crate # is only published to private registries, and ignore is true, the crate will # not have its license(s) checked diff --git a/examples/resolver.rs b/examples/resolver.rs deleted file mode 100644 index 21684121..00000000 --- a/examples/resolver.rs +++ /dev/null @@ -1,49 +0,0 @@ -///! See documentation at -use std::{env, path::PathBuf}; - -use rspack_resolver::{AliasValue, ResolveOptions, Resolver}; - -#[tokio::main] -async fn main() { - let path = PathBuf::from(env::args().nth(1).expect("path")); - - assert!( - path.is_dir(), - "{path:?} must be a directory that will be resolved against." - ); - assert!(path.is_absolute(), "{path:?} must be an absolute path.",); - - let specifier = env::args().nth(2).expect("specifier"); - - println!("path: {path:?}"); - println!("specifier: {specifier}"); - - let options = ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - alias: vec![("asdf".into(), vec![AliasValue::from("./test.js")])], - extensions: vec![".js".into(), ".ts".into()], - extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])], - // ESM - condition_names: vec!["node".into(), "import".into()], - // CJS - // condition_names: vec!["node".into(), "require".into()], - ..ResolveOptions::default() - }; - let mut ctx = Default::default(); - - match Resolver::new(options) - .resolve_with_context(path, &specifier, &mut ctx) - .await - { - Err(error) => println!("Error: {error}"), - Ok(resolution) => println!("Resolved: {:?}", resolution.full_path()), - }; - - let mut sorted_file_deps = ctx.file_dependencies.iter().collect::>(); - sorted_file_deps.sort_by_key(|p| p.as_path()); - println!("file_deps: {:#?}", sorted_file_deps); - - let mut sorted_missing = ctx.missing_dependencies.iter().collect::>(); - sorted_missing.sort_by_key(|p| p.as_path()); - println!("missing_deps: {:#?}", sorted_missing); -} diff --git a/fuzz/.gitignore b/fuzz/.gitignore deleted file mode 100644 index 1a45eee7..00000000 --- a/fuzz/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -target -corpus -artifacts -coverage diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml deleted file mode 100644 index 417b2efa..00000000 --- a/fuzz/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -name = "resolver_fuzz" -version = "0.0.0" -publish = false -edition = "2021" - -# Use independent workspace for fuzzers -[workspace] -members = ["."] - -[package.metadata] -cargo-fuzz = true - -[[bin]] -name = "resolver" -path = "fuzz_targets/resolver.rs" -test = false -doc = false -bench = false - -[dependencies] -futures = "0.3" -libfuzzer-sys = "0.4.13" -rspack_resolver = { path = ".." } diff --git a/fuzz/fuzz_targets/resolver.rs b/fuzz/fuzz_targets/resolver.rs deleted file mode 100644 index 7e83b605..00000000 --- a/fuzz/fuzz_targets/resolver.rs +++ /dev/null @@ -1,44 +0,0 @@ -#![no_main] - -use libfuzzer_sys::fuzz_target; -use rspack_resolver::{AliasValue, ResolveOptions, Resolver}; - -fuzz_target!(|data: &[u8]| { - // First byte drives a few resolver-option toggles; the rest is the specifier. - let Some((&cfg, rest)) = data.split_first() else { - return; - }; - let Ok(specifier) = std::str::from_utf8(rest) else { - return; - }; - if specifier.chars().any(char::is_control) { - return; - } - - let condition_names = if cfg & 0b001 == 0 { - vec!["node".into(), "import".into()] - } else { - vec!["node".into(), "require".into()] - }; - let extensions = if cfg & 0b010 == 0 { - vec![".js".into(), ".json".into(), ".node".into()] - } else { - vec![".ts".into(), ".tsx".into(), ".js".into()] - }; - let alias = if cfg & 0b100 == 0 { - vec![] - } else { - vec![("@".into(), vec![AliasValue::Path("./src".into())])] - }; - - let resolver = Resolver::new(ResolveOptions { - condition_names, - extensions, - alias, - symlinks: cfg & 0b1000 == 0, - ..ResolveOptions::default() - }); - let cwd = std::env::current_dir().unwrap(); - // `resolve` is async; the future must be driven or the body is a no-op. - let _ = futures::executor::block_on(resolver.resolve(cwd, specifier)); -}); diff --git a/justfile b/justfile index 7f4de7c8..2608420e 100644 --- a/justfile +++ b/justfile @@ -10,7 +10,7 @@ alias r := ready # or install via `cargo install cargo-binstall` # Initialize the project by installing all the necessary tools. init: - cargo binstall cargo-watch typos-cli taplo-cli cargo-llvm-cov -y + cargo binstall cargo-watch typos-cli taplo-cli -y install: pnpm install @@ -32,10 +32,6 @@ ready: watch command: cargo watch -x '{{command}}' -# Run the example in `parser`, `formatter`, `linter` -example *args='': - just watch 'run --example resolver -- {{args}}' - # Format all files fmt: cargo fmt @@ -47,31 +43,9 @@ check: # Run all the tests test: - cargo test --all-features + pnpm run build:binding:debug + pnpm test # Lint the whole project lint: cargo clippy --all-features -- --deny warnings - -# Generate doc -doc: - RUSTDOCFLAGS='-D warnings' cargo doc --no-deps --all-features - -# Get code coverage -codecov: - cargo codecov --html - -# Run the benchmarks. See `tasks/benchmark` -benchmark: - cargo benchmark - -# Run cargo-fuzz -fuzz: - cd fuzz && cargo +nightly fuzz run --sanitizer none resolver -- -only_ascii=1 -max_total_time=900 - -# Manual Release -release: - cargo binstall -y release-plz - release-plz update - just check - # NOTE: make sure to update version in npm/package.json diff --git a/napi/Cargo.toml b/napi/Cargo.toml index c695ea74..13a5f683 100644 --- a/napi/Cargo.toml +++ b/napi/Cargo.toml @@ -14,7 +14,7 @@ napi = { version = "3.9.0", default-features = false, features = [ napi-build = { version = "2.3.2", default-features = false } napi-derive = { version = "3.5.6" } regex = "1.12.4" -rspack_resolver = { path = "..", package = "rspack_resolver" } +rspack_resolver = "=0.102.0-beta.1" tracing-subscriber = { version = "0.3.23", default-features = false, features = ["std", "fmt", "ansi"] } [build-dependencies] diff --git a/release-plz.toml b/release-plz.toml deleted file mode 100644 index 22b7a45c..00000000 --- a/release-plz.toml +++ /dev/null @@ -1,3 +0,0 @@ -[workspace] -semver_check = false -allow_dirty = true # The "fixtures" is being marked as dirty. diff --git a/src/alias_trie.rs b/src/alias_trie.rs deleted file mode 100644 index 438de24e..00000000 --- a/src/alias_trie.rs +++ /dev/null @@ -1,272 +0,0 @@ -//! Byte-trie accelerator for [`crate::ResolveOptions::alias`] matching. -//! -//! Replaces the linear `strip_prefix` scan in `load_alias` with a trie walk: -//! descend the trie one byte of the specifier at a time, collect terminal -//! aliases along the way, and yield them in the order they were originally -//! declared. - -use crate::Alias; - -/// A successful alias-key match against a specifier. -#[derive(Debug, PartialEq, Eq)] -pub struct AliasMatch { - /// Index of the entry in the original `Alias` vec, used to preserve the - /// `aliases.iter()` ordering callers rely on. - pub(crate) index: usize, - /// Length in bytes of the matched key (after stripping any `$` suffix). - /// Lets callers compute the specifier tail without re-running the prefix. - pub(crate) key_len: usize, - /// True for `$`-suffixed keys — caller should treat the match as exact. - pub(crate) is_exact: bool, -} - -/// Aliases ending at a trie node. In the rare case multiple aliases share the -/// same key string, the loader is expected to try them in declared order. -type TerminalList = Vec; - -#[derive(Debug)] -struct Terminal { - alias_index: usize, - key_len: usize, - is_exact: bool, -} - -#[derive(Debug, Default)] -struct Node { - /// Sparse children indexed by edge byte. Low fanout in practice, linear - /// scan beats a `[Option<...>; 256]` for memory and cache locality. - children: Vec<(u8, Box)>, - terminals: TerminalList, -} - -impl Node { - fn descend(&self, byte: u8) -> Option<&Self> { - self - .children - .iter() - .find_map(|(b, n)| (*b == byte).then(|| n.as_ref())) - } - - fn descend_mut_or_insert(&mut self, byte: u8) -> &mut Self { - if let Some(pos) = self.children.iter().position(|(b, _)| *b == byte) { - return &mut self.children[pos].1; - } - self.children.push((byte, Box::new(Self::default()))); - &mut self.children.last_mut().unwrap().1 - } -} - -pub struct AliasTrie { - root: Node, -} - -impl AliasTrie { - pub(crate) fn build(aliases: &Alias) -> Self { - let mut root = Node::default(); - for (index, (key, _)) in aliases.iter().enumerate() { - // `$`-suffixed keys are exact-match aliases — index by the stripped key. - let (effective, is_exact) = key - .strip_suffix('$') - .map_or((key.as_str(), false), |stripped| (stripped, true)); - let mut node = &mut root; - for byte in effective.as_bytes() { - node = node.descend_mut_or_insert(*byte); - } - node.terminals.push(Terminal { - alias_index: index, - key_len: effective.len(), - is_exact, - }); - } - Self { root } - } - - pub(crate) fn matches(&self, specifier: &str) -> Vec { - let bytes = specifier.as_bytes(); - let mut out = Vec::new(); - collect_terminals(&self.root, bytes, 0, &mut out); - let mut node = &self.root; - for (i, byte) in bytes.iter().enumerate() { - let Some(next) = node.descend(*byte) else { - break; - }; - node = next; - collect_terminals(node, bytes, i + 1, &mut out); - } - // Trie walk yields matches by key length; callers expect declared order so - // they can try AliasValue lists in the order the user wrote them. - if out.len() > 1 { - out.sort_unstable_by_key(|m| m.index); - } - out - } -} - -fn collect_terminals(node: &Node, bytes: &[u8], consumed: usize, out: &mut Vec) { - if node.terminals.is_empty() { - return; - } - let tail = &bytes[consumed..]; - let tail_empty = tail.is_empty(); - let tail_slash = matches!(tail.first(), Some(b'/' | b'\\')); - for term in &node.terminals { - let acceptable = if term.is_exact { - tail_empty - } else { - tail_empty || tail_slash - }; - if acceptable { - out.push(AliasMatch { - index: term.alias_index, - key_len: term.key_len, - is_exact: term.is_exact, - }); - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::AliasValue; - - fn aliases(entries: &[(&str, &[&str])]) -> Alias { - entries - .iter() - .map(|(k, vs)| { - ( - (*k).to_string(), - vs.iter().map(|v| AliasValue::from(*v)).collect(), - ) - }) - .collect() - } - - #[test] - fn empty_trie_yields_no_matches() { - let aliases: Alias = Vec::new(); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("anything"); - assert!(matches.is_empty(), "expected no matches, got {matches:?}"); - } - - #[test] - fn matches_prefix_key_with_trailing_slash() { - // Alias "react" matches specifier "react/foo" (prefix + slash). - let aliases = aliases(&[("react", &["./src/react"])]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("react/foo"); - assert_eq!( - matches, - vec![AliasMatch { - index: 0, - key_len: 5, - is_exact: false - }] - ); - } - - #[test] - fn matches_prefix_key_with_exact_specifier() { - // Alias "react" also matches the bare specifier "react". - let aliases = aliases(&[("react", &["./src/react"])]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("react"); - assert_eq!(matches.len(), 1); - assert_eq!(matches[0].index, 0); - } - - #[test] - fn rejects_prefix_followed_by_non_slash() { - // "react-dom" must NOT match the "react" prefix alias — tail starts with - // `-`, failing the SLASH_START filter. - let aliases = aliases(&[("react", &["./src/react"])]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("react-dom"); - assert!(matches.is_empty(), "expected no matches, got {matches:?}"); - } - - #[test] - fn accepts_prefix_followed_by_backslash() { - // SLASH_START accepts `\\` too (Windows paths). - let aliases = aliases(&[("react", &["./src/react"])]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("react\\foo"); - assert_eq!(matches.len(), 1); - assert_eq!(matches[0].index, 0); - } - - #[test] - fn empty_alias_key_matches_slash_prefixed_specifier() { - // `("", v)` is enhanced-resolve's emergent "match any slash-prefixed - // specifier" wildcard. The trie must report it without consuming any - // bytes of the specifier. - let aliases = aliases(&[("", &["./redirect"])]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("/foo"); - assert_eq!( - matches, - vec![AliasMatch { - index: 0, - key_len: 0, - is_exact: false - }] - ); - } - - #[test] - fn matches_preserve_declared_order_long_before_short() { - // Same path can match both aliases. The caller (load_alias) tries entries - // in declared order until one succeeds — so the trie must return them in - // that order even when the trie naturally encounters the shorter key - // first during the walk. - let aliases = aliases(&[("a/long/path", &["alpha"]), ("a", &["bravo"])]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("a/long/path/foo"); - let indices: Vec<_> = matches.iter().map(|m| m.index).collect(); - assert_eq!(indices, vec![0, 1], "got {matches:?}"); - } - - #[test] - fn duplicate_keys_return_all_terminals_in_declared_order() { - // Same key string registered multiple times lands on the same trie node - // with multiple `Terminal` entries (see `TerminalList`). `matches` must - // surface every duplicate and keep them in declared order, so the loader - // can try each AliasValue list in the order the user wrote them. - let aliases = aliases(&[ - ("react", &["./alpha"]), // idx=0 - ("other", &["./unrelated"]), // idx=1, interleaved to ensure sort isn't a no-op - ("react", &["./bravo"]), // idx=2 - ("react", &["./charlie"]), // idx=3 - ]); - let trie = AliasTrie::build(&aliases); - let matches = trie.matches("react/foo"); - let indices: Vec<_> = matches.iter().map(|m| m.index).collect(); - assert_eq!(indices, vec![0, 2, 3], "got {matches:?}"); - assert!( - matches.iter().all(|m| m.key_len == 5 && !m.is_exact), - "all duplicates of `react` must share key_len=5 and is_exact=false, got {matches:?}" - ); - } - - #[test] - fn dollar_exact_key_rejects_specifier_with_tail() { - // "b$" is exact-match for "b" only; "b/index" must NOT match. - let aliases = aliases(&[("b$", &["a/index"])]); - let trie = AliasTrie::build(&aliases); - let with_tail = trie.matches("b/index"); - assert!( - with_tail.is_empty(), - "exact-match alias should not accept tail, got {with_tail:?}" - ); - let exact = trie.matches("b"); - assert_eq!( - exact, - vec![AliasMatch { - index: 0, - key_len: 1, - is_exact: true - }] - ); - } -} diff --git a/src/builtins.rs b/src/builtins.rs deleted file mode 100644 index 5156f91d..00000000 --- a/src/builtins.rs +++ /dev/null @@ -1,71 +0,0 @@ -/// Node.js built-in modules -/// -/// `node -p "[...require('module').builtinModules].map(b => JSON.stringify(b)).join(',\n')"` -/// -pub const NODEJS_BUILTINS: &[&str] = &[ - "_http_agent", - "_http_client", - "_http_common", - "_http_incoming", - "_http_outgoing", - "_http_server", - "_stream_duplex", - "_stream_passthrough", - "_stream_readable", - "_stream_transform", - "_stream_wrap", - "_stream_writable", - "_tls_common", - "_tls_wrap", - "assert", - "assert/strict", - "async_hooks", - "buffer", - "child_process", - "cluster", - "console", - "constants", - "crypto", - "dgram", - "diagnostics_channel", - "dns", - "dns/promises", - "domain", - "events", - "fs", - "fs/promises", - "http", - "http2", - "https", - "inspector", - "module", - "net", - "os", - "path", - "path/posix", - "path/win32", - "perf_hooks", - "process", - "punycode", - "querystring", - "readline", - "repl", - "stream", - "stream/consumers", - "stream/promises", - "stream/web", - "string_decoder", - "sys", - "timers", - "timers/promises", - "tls", - "trace_events", - "tty", - "url", - "util", - "util/types", - "v8", - "vm", - "worker_threads", - "zlib", -]; diff --git a/src/cache.rs b/src/cache.rs deleted file mode 100644 index 14acda2b..00000000 --- a/src/cache.rs +++ /dev/null @@ -1,505 +0,0 @@ -use std::{ - borrow::{Borrow, Cow}, - convert::AsRef, - future::Future, - hash::{BuildHasherDefault, Hash, Hasher}, - io, - ops::Deref, - path::PathBuf, - sync::Arc, -}; - -use camino::{Utf8Component, Utf8Path, Utf8PathBuf}; -use dashmap::{DashMap, DashSet}; -use futures::future::BoxFuture; -use rustc_hash::FxHasher; -use tokio::sync::OnceCell as OnceLock; - -use crate::{ - context::ResolveContext as Ctx, - package_json::{off_to_location, PackageJson}, - resolver_path::{hash_path, ResolverPath}, - FileMetadata, FileSystem, JSONError, ResolveError, ResolveOptions, TsConfig, -}; - -#[derive(Default)] -pub struct Cache { - pub(crate) fs: Fs, - paths: DashSet>, - tsconfigs: DashMap, BuildHasherDefault>, -} - -impl Cache { - pub fn new(fs: Fs) -> Self { - Self { - fs, - paths: DashSet::default(), - tsconfigs: DashMap::default(), - } - } - - pub fn clear(&self) { - self.paths.clear(); - self.tsconfigs.clear(); - } - - pub fn value(&self, path: &Utf8Path) -> CachedPath { - let hash = hash_path(path.as_std_path()); - if let Some(cache_entry) = self.paths.get((hash, path).borrow() as &dyn CacheKey) { - return cache_entry.clone(); - } - let parent = path.parent().map(|p| self.value(p)); - let data = CachedPath(Arc::new(CachedPathImpl::new( - hash, - path.to_path_buf().into_boxed_path(), - parent, - ))); - self.paths.insert(data.clone()); - data - } - - pub async fn tsconfig( - &self, - root: bool, - path: &Utf8Path, - callback: F, // callback for modifying tsconfig with `extends` - ) -> Result, ResolveError> - where - F: FnOnce(TsConfig) -> Fut + Send, - Fut: Send + Future>, - { - if let Some(tsconfig_ref) = self.tsconfigs.get(path.as_std_path()) { - return Ok(Arc::clone(tsconfig_ref.value())); - } - let meta = self.fs.metadata(path.as_std_path()).await.ok(); - let tsconfig_path = if meta.is_some_and(|m| m.is_file) { - Cow::Borrowed(path) - } else if meta.is_some_and(|m| m.is_dir) { - Cow::Owned(path.join("tsconfig.json")) - } else { - let mut string = path.as_str().to_string(); - string.push_str(".json"); - Cow::Owned(Utf8PathBuf::from(string)) - }; - let mut tsconfig_string = self - .fs - .read_to_string(tsconfig_path.as_std_path()) - .await - .map_err(|_| ResolveError::TsconfigNotFound(path.as_std_path().to_path_buf()))?; - let mut tsconfig = - TsConfig::parse(root, &tsconfig_path, &mut tsconfig_string).map_err(|error| { - ResolveError::from_serde_json_error( - tsconfig_path.as_std_path().to_path_buf(), - &error, - Some(tsconfig_string), - ) - })?; - tsconfig = callback(tsconfig).await?; - let tsconfig = Arc::new(tsconfig.build()); - self - .tsconfigs - .insert(path.as_std_path().to_path_buf(), Arc::clone(&tsconfig)); - Ok(tsconfig) - } -} - -#[derive(Clone)] -pub struct CachedPath(Arc); - -impl Hash for CachedPath { - fn hash(&self, state: &mut H) { - self.0.hash.hash(state); - } -} - -impl PartialEq for CachedPath { - fn eq(&self, other: &Self) -> bool { - // Compare through std `Path`, not camino's `Utf8Path`. std `Path`/`Components` - // equality has a raw-byte `memcmp` fast path (its own comment: "for hashmap - // lookups"), whereas camino's `Utf8Path` always walks components with no fast - // path — that regressed this hottest cache-lookup equality. `as_std_path()` - // also preserves the per-platform semantics that match `hash_path` - // (byte-wise on Unix; component-wise on Windows, so `pack1/foo` and - // `pack1\foo` stay the same entry). A plain `as_str()` byte compare would be - // inconsistent with the component-wise hash on Windows and break dedup there. - self.0.path.as_std_path() == other.0.path.as_std_path() - } -} -impl Eq for CachedPath {} - -impl Deref for CachedPath { - type Target = CachedPathImpl; - - fn deref(&self) -> &Self::Target { - self.0.as_ref() - } -} - -impl<'a> Borrow for CachedPath { - fn borrow(&self) -> &(dyn CacheKey + 'a) { - self - } -} - -impl AsRef for CachedPath { - fn as_ref(&self) -> &CachedPathImpl { - self.0.as_ref() - } -} - -impl CacheKey for CachedPath { - fn tuple(&self) -> (u64, &Utf8Path) { - (self.hash, &self.path) - } -} - -pub struct CachedPathImpl { - hash: u64, - path: Box, - parent: Option, - meta: OnceLock>, - canonicalized: OnceLock>, - node_modules: OnceLock>, - package_json: OnceLock>>, - /// Memoized `/package.json` `ResolverPath` for the - /// `missing_dependencies` push that fires on every `package_json` cache-hit - /// `None` (~97% of `package_json` calls in dep-tracking workloads). - package_json_dep_path: std::sync::OnceLock, -} - -impl From<&CachedPathImpl> for ResolverPath { - /// Reuse the cache-side `FxHash` (already computed in `Cache::value`); the - /// only remaining work is one `Arc::from(&Path)` to materialize the shared - /// path buffer for the `ResolveContext` sink. - fn from(cached: &CachedPathImpl) -> Self { - Self::from_parts(cached.hash, Arc::from(cached.path.as_std_path())) - } -} - -impl CachedPathImpl { - fn new(hash: u64, path: Box, parent: Option) -> Self { - Self { - hash, - path, - parent, - meta: OnceLock::new(), - canonicalized: OnceLock::new(), - node_modules: OnceLock::new(), - package_json: OnceLock::new(), - package_json_dep_path: std::sync::OnceLock::new(), - } - } - - /// Without this cache, each `None` cache-hit on `package_json` would - /// re-`join` + re-allocate the `Arc` + re-hash on every push. - fn package_json_dep_path(&self) -> ResolverPath { - self - .package_json_dep_path - .get_or_init(|| self.path.join("package.json").into()) - .clone() - } - - pub fn path(&self) -> &Utf8Path { - &self.path - } - - pub fn to_path_buf(&self) -> Utf8PathBuf { - self.path.to_path_buf() - } - - pub fn parent(&self) -> Option<&CachedPath> { - self.parent.as_ref() - } - - async fn meta(&self, fs: &Fs) -> Option { - // Skip the Future state-machine + poll on cache hit. `tokio::sync::OnceCell::get` - // is sync and bypasses constructing the `get_or_init` future entirely. - if let Some(m) = self.meta.get() { - return *m; - } - *self - .meta - .get_or_init(|| async { fs.metadata(self.path.as_std_path()).await.ok() }) - .await - } - - pub async fn is_file(&self, fs: &Fs, ctx: &mut Ctx) -> bool { - if let Some(meta) = self.meta(fs).await { - ctx.add_file_dependency(self); - meta.is_file - } else { - ctx.add_missing_dependency(self); - false - } - } - - pub async fn is_dir(&self, fs: &Fs, ctx: &mut Ctx) -> bool { - self.meta(fs).await.map_or_else( - || { - ctx.add_missing_dependency(self); - false - }, - |meta| meta.is_dir, - ) - } - - pub async fn realpath(&self, fs: &Fs) -> io::Result { - // Cache hit: avoid the heap-allocated `Box::pin` for the cache-miss state machine - // by returning before delegating to the boxed recursive helper. - if let Some(cached) = self.canonicalized.get() { - return Ok(cached.clone().unwrap_or_else(|| self.path.to_path_buf())); - } - self.realpath_uncached(fs).await - } - - fn realpath_uncached<'a, Fs: FileSystem + Send + Sync>( - &'a self, - fs: &'a Fs, - ) -> BoxFuture<'a, io::Result> { - Box::pin(async move { - self - .canonicalized - .get_or_try_init(|| async move { - if fs - .symlink_metadata(self.path.as_std_path()) - .await - .is_ok_and(|m| m.is_symlink) - { - return fs - .canonicalize(self.path.as_std_path()) - .await - .map(|path| Some(Utf8PathBuf::from_path_buf(path).expect("path should be UTF-8"))); - } - if let Some(parent) = self.parent() { - let mut real_path = parent.realpath(fs).await?; - // Unnormalized paths (e.g. from alias values or absolute specifiers) can - // end in `..`, where `file_name()` returns `None` and would silently drop - // the component; POSIX semantics pop it after the parent is resolved. - match self.path.components().next_back() { - Some(Utf8Component::Normal(segment)) => real_path.push(segment), - Some(Utf8Component::ParentDir) => { - real_path.pop(); - } - _ => {} - } - return Ok(Some(real_path)); - } - Ok(None) - }) - .await - .cloned() - .map(|r| r.unwrap_or_else(|| self.path.to_path_buf())) - }) - } - - pub async fn module_directory( - &self, - module_name: &str, - cache: &Cache, - ctx: &mut Ctx, - ) -> Option { - let cached_path = cache.value(&self.path.join(module_name)); - cached_path - .is_dir(&cache.fs, ctx) - .await - .then_some(cached_path) - } - - pub async fn cached_node_modules( - &self, - cache: &Cache, - ctx: &mut Ctx, - ) -> Option { - if let Some(nm) = self.node_modules.get() { - // Replay ctx tracking from the cold path: module_directory -> is_dir calls - // ctx.add_missing_dependency when node_modules doesn't exist on disk. - if nm.is_none() { - ctx.add_missing_dependency(self.path.join("node_modules")); - } - return nm.clone(); - } - self - .node_modules - .get_or_init(|| self.module_directory("node_modules", cache, ctx)) - .await - .clone() - } - - /// Find package.json of a path by traversing parent directories. - /// - /// # Errors - /// - /// * [ResolveError::JSON] - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = %self.path)))] - pub async fn find_package_json( - &self, - fs: &Fs, - options: &ResolveOptions, - ctx: &mut Ctx, - ) -> Result>, ResolveError> { - let mut cache_value = self; - // Go up directories when the querying path is not a directory - while !cache_value.is_dir(fs, ctx).await { - if let Some(cv) = &cache_value.parent { - cache_value = cv.as_ref(); - } else { - break; - } - } - let mut cache_value = Some(cache_value); - while let Some(cv) = cache_value { - if let Some(package_json) = cv.package_json(fs, options, ctx).await? { - return Ok(Some(Arc::clone(&package_json))); - } - cache_value = cv.parent.as_deref(); - } - Ok(None) - } - - /// Get package.json of the given path. - /// - /// # Errors - /// - /// * [ResolveError::JSON] - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = %self.path)))] - pub async fn package_json( - &self, - fs: &Fs, - options: &ResolveOptions, - ctx: &mut Ctx, - ) -> Result>, ResolveError> { - if let Some(pkg) = self.package_json.get() { - // Preserve ctx dependency tracking on cache hit. - match pkg { - Some(package_json) => ctx.add_file_dependency(&package_json.path), - None => { - if ctx.missing_dependencies.is_some() { - ctx.add_missing_dependency(self.package_json_dep_path()); - } - } - } - return Ok(pkg.clone()); - } - // Change to `std::sync::OnceLock::get_or_try_init` when it is stable. - let result = self - .package_json - .get_or_try_init(|| async { - let package_json_path = self.path.join("package.json"); - let Ok(package_json_string) = fs.read(package_json_path.as_std_path()).await else { - return Ok(None); - }; - let real_path = if options.symlinks { - self.realpath(fs).await?.join("package.json") - } else { - package_json_path.clone() - }; - match PackageJson::parse( - package_json_path.clone().into(), - real_path.into(), - package_json_string, - ) { - Ok(v) => Ok(Some(Arc::new(v))), - Err(parse_err) => { - let package_json_path = self.path.join("package.json"); - let package_json_string = match fs.read_to_string(package_json_path.as_std_path()).await - { - Ok(c) => c, - Err(io_err) => { - return Err(ResolveError::from(io_err)); - } - }; - let serde_err = serde_json::from_str::(&package_json_string).err(); - - if let Some(err) = serde_err { - Err(ResolveError::from_serde_json_error( - package_json_path.into(), - &err, - Some(package_json_string), - )) - } else { - let (line, column) = off_to_location(&package_json_string, parse_err.index()); - - Err(ResolveError::JSON(JSONError { - path: package_json_path.into(), - message: parse_err.error().to_string(), - line, - column, - content: Some(package_json_string), - })) - } - } - } - }) - .await - .cloned(); - - // https://github.com/webpack/enhanced-resolve/blob/58464fc7cb56673c9aa849e68e6300239601e615/lib/DescriptionFileUtils.js#L68-L82 - match &result { - Ok(Some(package_json)) => { - ctx.add_file_dependency(&package_json.path); - } - Ok(None) => { - // Avoid an allocation by making this lazy - if ctx.missing_dependencies.is_some() { - ctx.add_missing_dependency(self.package_json_dep_path()); - } - } - Err(_) => { - if ctx.file_dependencies.is_some() { - ctx.add_file_dependency(self.path.join("package.json")); - } - } - } - result - } -} - -/// Memoized cache key, code adapted from . -trait CacheKey { - fn tuple(&self) -> (u64, &Utf8Path); -} - -impl Hash for dyn CacheKey + '_ { - fn hash(&self, state: &mut H) { - self.tuple().0.hash(state); - } -} - -impl PartialEq for dyn CacheKey + '_ { - fn eq(&self, other: &Self) -> bool { - // std `Path` equality (memcmp fast path + per-platform semantics matching - // `hash_path`); see `CachedPath`'s `PartialEq` for the full rationale. - self.tuple().1.as_std_path() == other.tuple().1.as_std_path() - } -} - -impl Eq for dyn CacheKey + '_ {} - -impl CacheKey for (u64, &Utf8Path) { - fn tuple(&self) -> (u64, &Utf8Path) { - (self.0, self.1) - } -} - -impl<'a> Borrow for (u64, &'a Utf8Path) { - fn borrow(&self) -> &(dyn CacheKey + 'a) { - self - } -} - -/// Since the cache key is memoized, use an identity hasher -/// to avoid double cache. -#[derive(Default)] -struct IdentityHasher(u64); - -impl Hasher for IdentityHasher { - fn write(&mut self, _: &[u8]) { - unreachable!("Invalid use of IdentityHasher") - } - fn write_u64(&mut self, n: u64) { - self.0 = n; - } - fn finish(&self) -> u64 { - self.0 - } -} diff --git a/src/context.rs b/src/context.rs deleted file mode 100644 index 24b38196..00000000 --- a/src/context.rs +++ /dev/null @@ -1,90 +0,0 @@ -use std::ops::{Deref, DerefMut}; - -use crate::{error::ResolveError, resolver_path::ResolverPath}; - -#[derive(Debug, Default, Clone)] -pub struct ResolveContext(ResolveContextImpl); - -#[derive(Debug, Default, Clone)] -pub struct ResolveContextImpl { - pub fully_specified: bool, - - pub query: Option, - - pub fragment: Option, - - /// Files that were found on file system - pub file_dependencies: Option>, - - /// Files that were not found on file system - pub missing_dependencies: Option>, - - /// The current resolving alias for bailing recursion alias. - pub resolving_alias: Option, - - /// For avoiding infinite recursion, which will cause stack overflow. - depth: u8, -} - -impl Deref for ResolveContext { - type Target = ResolveContextImpl; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for ResolveContext { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - -impl ResolveContext { - pub fn with_fully_specified(&mut self, yes: bool) { - self.fully_specified = yes; - } - - pub fn with_query_fragment(&mut self, query: Option<&str>, fragment: Option<&str>) { - if let Some(query) = query { - self.query.replace(query.to_string()); - } - if let Some(fragment) = fragment { - self.fragment.replace(fragment.to_string()); - } - } - - pub fn init_file_dependencies(&mut self) { - self.file_dependencies.replace(vec![]); - self.missing_dependencies.replace(vec![]); - } - - // Accepts anything convertible to `ResolverPath`. The conversion (which - // includes the `Arc` allocation for `&Path` / `PathBuf` callers, or - // hash reuse for `&CachedPathImpl`) only runs inside the `Some` branch, so - // `resolve()` calls without a context still pay zero. - pub fn add_file_dependency>(&mut self, dep: P) { - if let Some(deps) = &mut self.file_dependencies { - deps.push(dep.into()); - } - } - - pub fn add_missing_dependency>(&mut self, dep: P) { - if let Some(deps) = &mut self.missing_dependencies { - deps.push(dep.into()); - } - } - - pub fn with_resolving_alias(&mut self, alias: String) { - self.resolving_alias = Some(alias); - } - - pub fn test_for_infinite_recursion(&mut self) -> Result<(), ResolveError> { - self.depth += 1; - // 64 should be more than enough for detecting infinite recursion. - if self.depth > 32 { - return Err(ResolveError::Recursion); - } - Ok(()) - } -} diff --git a/src/error.rs b/src/error.rs deleted file mode 100644 index 4c142753..00000000 --- a/src/error.rs +++ /dev/null @@ -1,196 +0,0 @@ -use std::{io, path::PathBuf, sync::Arc}; - -use thiserror::Error; - -/// All resolution errors -/// -/// `thiserror` is used to display meaningful error messages. -#[derive(Debug, Clone, PartialEq, Error)] -#[non_exhaustive] -pub enum ResolveError { - /// Ignored path - /// - /// Derived from ignored path (false value) from browser field in package.json - /// ```json - /// { - /// "browser": { - /// "./module": false - /// } - /// } - /// ``` - /// See - #[error("Path is ignored {0}")] - Ignored(PathBuf), - - /// Module not found - #[error("Cannot find module '{0}'")] - NotFound(/* specifier */ String), - - /// Matched alias value not found - #[error("Cannot find module '{0}' for matched aliased key '{1}'")] - MatchedAliasNotFound(/* specifier */ String, /* alias key */ String), - - /// Tsconfig not found - #[error("Tsconfig not found {0}")] - TsconfigNotFound(PathBuf), - - /// Tsconfig's project reference path points to it self - #[error("Tsconfig's project reference path points to this tsconfig {0}")] - TsconfigSelfReference(PathBuf), - - #[error("{0}")] - IOError(IOError), - - /// Node.js builtin modules - /// - /// This is an error due to not being a Node.js runtime. - /// The `alias` option can be used to resolve a builtin module to a polyfill. - #[error("Builtin module {0}")] - Builtin(String), - - /// All of the aliased extension are not found - /// - /// Displays `Cannot resolve 'index.mjs' with extension aliases 'index.mts' in ...` - #[error("Cannot resolve '{0}' for extension aliases '{1}' in '{2}'")] - ExtensionAlias( - /* File name */ String, - /* Tried file names */ String, - /* Path to dir */ PathBuf, - ), - - /// The provided path specifier cannot be parsed - #[error("{0}")] - Specifier(SpecifierError), - - /// JSON parse error - #[error("{0:?}")] - JSON(JSONError), - - #[error( - r#"Invalid module "{0}" specifier is not a valid subpath for the "exports" resolution of {1}"# - )] - InvalidModuleSpecifier(String, PathBuf), - - #[error(r#"Invalid "exports" target "{0}" defined for '{1}' in the package config {2}"#)] - InvalidPackageTarget(String, String, PathBuf), - - #[error(r#"Package subpath '{0}' is not defined by "exports" in {1}"#)] - PackagePathNotExported(String, PathBuf), - - #[error(r#"Invalid package config "{0}", "exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only."#)] - InvalidPackageConfig(PathBuf), - - #[error(r#"Default condition should be last one in "{0}""#)] - InvalidPackageConfigDefault(PathBuf), - - #[error(r#"Expecting folder to folder mapping. "{0}" should end with "/"#)] - InvalidPackageConfigDirectory(PathBuf), - - #[error(r#"Package import specifier "{0}" is not defined in package {1}"#)] - PackageImportNotDefined(String, PathBuf), - - #[error("{0} is unimplemented")] - Unimplemented(&'static str), - - /// Occurs when alias paths reference each other. - #[error("Recursion in resolving")] - Recursion, -} - -impl ResolveError { - pub fn is_ignore(&self) -> bool { - matches!(self, Self::Ignored(_)) - } - - pub(crate) fn from_serde_json_error( - path: PathBuf, - error: &serde_json::Error, - content: Option, - ) -> Self { - Self::JSON(JSONError { - path, - message: error.to_string(), - line: error.line(), - column: error.column(), - content, - }) - } -} - -/// Error for [ResolveError::Specifier] -#[derive(Debug, Clone, Eq, PartialEq, Error)] -pub enum SpecifierError { - #[error("The specifiers must be a non-empty string. Received \"{0}\"")] - Empty(String), -} - -/// JSON error from [serde_json::Error] -#[derive(Debug, Clone, Eq, PartialEq)] -pub struct JSONError { - pub path: PathBuf, - pub message: String, - pub line: usize, - pub column: usize, - pub content: Option, -} - -#[derive(Debug, Clone, Error)] -#[error("{0}")] -pub struct IOError(Arc); - -impl PartialEq for IOError { - fn eq(&self, other: &Self) -> bool { - self.0.kind() == other.0.kind() - } -} - -impl From for io::Error { - fn from(error: IOError) -> Self { - let io_error = error.0.as_ref(); - Self::new(io_error.kind(), io_error.to_string()) - } -} - -impl From for ResolveError { - fn from(err: io::Error) -> Self { - Self::IOError(IOError(Arc::new(err))) - } -} - -#[tokio::test] -async fn test_into_io_error() { - use std::io::{self, ErrorKind}; - let error_string = "IOError occurred"; - let string_error = io::Error::new(ErrorKind::Interrupted, error_string.to_string()); - let string_error2 = io::Error::new(ErrorKind::Interrupted, error_string.to_string()); - let resolve_io_error: ResolveError = ResolveError::from(string_error2); - - assert_eq!(resolve_io_error, ResolveError::from(string_error)); - assert_eq!(resolve_io_error.clone(), resolve_io_error); - let ResolveError::IOError(io_error) = resolve_io_error else { - unreachable!() - }; - assert_eq!( - format!("{io_error:?}"), - r#"IOError(Custom { kind: Interrupted, error: "IOError occurred" })"# - ); - // fix for https://github.com/web-infra-dev/rspack/issues/4564 - let std_io_error: io::Error = io_error.into(); - assert_eq!(std_io_error.kind(), ErrorKind::Interrupted); - assert_eq!(std_io_error.to_string(), error_string); - assert_eq!( - format!("{std_io_error:?}"), - r#"Custom { kind: Interrupted, error: "IOError occurred" }"# - ); -} - -#[tokio::test] -async fn test_coverage() { - let error = ResolveError::NotFound("x".into()); - assert_eq!(format!("{error:?}"), r#"NotFound("x")"#); - assert_eq!(error.clone(), error); - - let error = ResolveError::Specifier(SpecifierError::Empty("x".into())); - assert_eq!(format!("{error:?}"), r#"Specifier(Empty("x"))"#); - assert_eq!(error.clone(), error); -} diff --git a/src/file_system.rs b/src/file_system.rs deleted file mode 100644 index ec774bc3..00000000 --- a/src/file_system.rs +++ /dev/null @@ -1,297 +0,0 @@ -use std::{ - fs, io, - path::{Path, PathBuf}, -}; - -#[cfg(not(target_arch = "wasm32"))] -use cfg_if::cfg_if; -#[cfg(feature = "yarn_pnp")] -use pnp::fs::LruZipCache; -#[cfg(all(feature = "yarn_pnp", not(target_arch = "wasm32")))] -use pnp::fs::{VPath, VPathInfo, ZipCache}; - -/// File System abstraction used for `ResolverGeneric` -#[async_trait::async_trait] -pub trait FileSystem { - /// See [std::fs::read] - /// - /// # Errors - /// - /// See [std::fs::read] - async fn read(&self, path: &Path) -> io::Result>; - /// See [std::fs::read_to_string] - /// - /// # Errors - /// - /// * See [std::fs::read_to_string] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - async fn read_to_string(&self, path: &Path) -> io::Result; - - /// See [std::fs::metadata] - /// - /// # Errors - /// See [std::fs::metadata] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - async fn metadata(&self, path: &Path) -> io::Result; - - /// See [std::fs::symlink_metadata] - /// - /// # Errors - /// - /// See [std::fs::symlink_metadata] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - async fn symlink_metadata(&self, path: &Path) -> io::Result; - - /// See [std::fs::canonicalize] - /// - /// # Errors - /// - /// See [std::fs::read_link] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - async fn canonicalize(&self, path: &Path) -> io::Result; -} - -/// Metadata information about a file -#[derive(Debug, Clone, Copy)] -pub struct FileMetadata { - pub is_file: bool, - pub is_dir: bool, - pub is_symlink: bool, -} - -impl FileMetadata { - pub fn new(is_file: bool, is_dir: bool, is_symlink: bool) -> Self { - Self { - is_file, - is_dir, - is_symlink, - } - } -} - -#[cfg(feature = "yarn_pnp")] -impl From for FileMetadata { - fn from(value: pnp::fs::FileType) -> Self { - Self::new( - value == pnp::fs::FileType::File, - value == pnp::fs::FileType::Directory, - false, - ) - } -} - -impl From for FileMetadata { - fn from(metadata: fs::Metadata) -> Self { - Self::new(metadata.is_file(), metadata.is_dir(), metadata.is_symlink()) - } -} - -pub struct FileSystemOptions { - #[cfg(feature = "yarn_pnp")] - pub enable_pnp: bool, -} - -impl Default for FileSystemOptions { - fn default() -> Self { - Self { - #[cfg(feature = "yarn_pnp")] - enable_pnp: true, - } - } -} - -/// Operating System -#[cfg_attr(target_arch = "wasm32", allow(dead_code))] -pub struct FileSystemOs { - options: FileSystemOptions, - #[cfg(feature = "yarn_pnp")] - pnp_lru: LruZipCache>, -} - -impl Default for FileSystemOs { - fn default() -> Self { - Self { - options: FileSystemOptions::default(), - #[cfg(feature = "yarn_pnp")] - pnp_lru: LruZipCache::new(50, pnp::fs::open_zip_via_read_p), - } - } -} - -impl FileSystemOs { - pub fn new(options: FileSystemOptions) -> Self { - Self { - options, - #[cfg(feature = "yarn_pnp")] - pnp_lru: LruZipCache::new(50, pnp::fs::open_zip_via_read_p), - } - } -} - -#[cfg(not(target_arch = "wasm32"))] -#[async_trait::async_trait] -impl FileSystem for FileSystemOs { - async fn read(&self, path: &Path) -> io::Result> { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { - VPath::Zip(info) => self.pnp_lru.read(info.physical_base_path(), info.zip_path), - VPath::Virtual(info) => fs::read(info.physical_base_path()), - VPath::Native(path) => fs::read(&path), - } - } - }} - - fs::read(path) - } - - async fn read_to_string(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { - VPath::Zip(info) => self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path), - VPath::Virtual(info) => fs::read_to_string(info.physical_base_path()), - VPath::Native(path) => fs::read_to_string(&path), - } - } - } - } - fs::read_to_string(path) - } - - async fn metadata(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { - VPath::Zip(info) => self - .pnp_lru - .file_type(info.physical_base_path(), info.zip_path) - .map(FileMetadata::from), - VPath::Virtual(info) => { - fs::metadata(info.physical_base_path()).map(FileMetadata::from) - } - VPath::Native(path) => fs::metadata(path).map(FileMetadata::from), - } - } - } - } - - fs::metadata(path).map(FileMetadata::from) - } - - async fn symlink_metadata(&self, path: &Path) -> io::Result { - fs::symlink_metadata(path).map(FileMetadata::from) - } - - async fn canonicalize(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { - VPath::Zip(info) => { - dunce::canonicalize(info.physical_base_path().join(info.zip_path)) - } - VPath::Virtual(info) => dunce::canonicalize(info.physical_base_path()), - VPath::Native(path) => dunce::canonicalize(path), - } - } - } - } - - dunce::canonicalize(path) - } -} - -#[cfg(target_arch = "wasm32")] -#[async_trait::async_trait] -impl FileSystem for FileSystemOs { - async fn read(&self, path: &Path) -> io::Result> { - std::fs::read(path) - } - - async fn read_to_string(&self, path: &Path) -> io::Result { - std::fs::read_to_string(path) - } - - async fn metadata(&self, path: &Path) -> io::Result { - // This implementation is verbose because there might be something wrong node wasm runtime. - // I will investigate it in the future. - if let Ok(m) = std::fs::metadata(path).map(FileMetadata::from) { - return Ok(m); - } - - self.symlink_metadata(path).await?; - let path = self.canonicalize(path).await?; - std::fs::metadata(path).map(FileMetadata::from) - } - - async fn symlink_metadata(&self, path: &Path) -> io::Result { - std::fs::symlink_metadata(path).map(FileMetadata::from) - } - - async fn canonicalize(&self, path: &Path) -> io::Result { - use std::path::Component; - let mut path_buf = path.to_path_buf(); - let link = fs::read_link(&path_buf)?; - path_buf.pop(); - for component in link.components() { - match component { - Component::ParentDir => { - path_buf.pop(); - } - Component::Normal(seg) => { - path_buf.push( - seg - .to_str() - .expect("path should be UTF-8") - .trim_end_matches('\0'), - ); - } - Component::RootDir => { - path_buf = PathBuf::from("/"); - } - Component::CurDir | Component::Prefix(_) => {} - } - - // This is not performant, we may optimize it with cache in the future - if fs::symlink_metadata(&path_buf).is_ok_and(|m| m.is_symlink()) { - let dir = self.canonicalize(&path_buf).await?; - path_buf = dir; - } - } - Ok(path_buf) - } -} - -#[tokio::test] -async fn metadata() { - let meta = FileMetadata { - is_file: true, - is_dir: true, - is_symlink: true, - }; - assert_eq!( - format!("{meta:?}"), - "FileMetadata { is_file: true, is_dir: true, is_symlink: true }" - ); - let _ = meta; -} diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 0ec572c2..00000000 --- a/src/lib.rs +++ /dev/null @@ -1,2301 +0,0 @@ -//! # Rspack Resolver -//! -//! Node.js [CommonJS][cjs] and [ECMAScript][esm] Module Resolution. -//! -//! Released on [crates.io](https://crates.io/crates/rspack_resolver) and [npm](https://www.npmjs.com/package/@rspack/resolver). -//! -//! A module resolution is the process of finding the file referenced by a module specifier in -//! `import "specifier"` or `require("specifier")`. -//! -//! All [configuration options](ResolveOptions) are aligned with webpack's [enhanced-resolve]. -//! -//! ## Terminology -//! -//! ### Specifier -//! -//! For [CommonJS modules][cjs], -//! the specifier is the string passed to the `require` function. e.g. `"id"` in `require("id")`. -//! -//! For [ECMAScript modules][esm], -//! the specifier of an `import` statement is the string after the `from` keyword, -//! e.g. `'specifier'` in `import 'specifier'` or `import { sep } from 'specifier'`. -//! Specifiers are also used in export from statements, and as the argument to an `import()` expression. -//! -//! This is also named "request" in some places. -//! -//! ## References: -//! -//! * Algorithm adapted from Node.js [CommonJS Module Resolution Algorithm] and [ECMAScript Module Resolution Algorithm]. -//! * Tests are ported from [enhanced-resolve]. -//! * Some code is adapted from [parcel-resolver]. -//! * The documentation is copied from [webpack's resolve configuration](https://webpack.js.org/configuration/resolve). -//! -//! [enhanced-resolve]: https://github.com/webpack/enhanced-resolve -//! [CommonJS Module Resolution Algorithm]: https://nodejs.org/api/modules.html#all-together -//! [ECMAScript Module Resolution Algorithm]: https://nodejs.org/api/esm.html#resolution-algorithm-specification -//! [parcel-resolver]: https://github.com/parcel-bundler/parcel/blob/v2/packages/utils/node-resolver-rs -//! [cjs]: https://nodejs.org/api/modules.html -//! [esm]: https://nodejs.org/api/esm.html -//! -//! ## Feature flags -#![cfg_attr(feature = "document-features", doc = document_features::document_features!())] -#![cfg_attr(docsrs, feature(doc_cfg))] -//! -//! ## Example -//! -//! ```rust,ignore -#![doc = include_str!("../examples/resolver.rs")] -//! ``` - -mod alias_trie; -mod builtins; -mod cache; -mod context; -mod error; -mod file_system; -mod options; -mod package_json; -mod path; -mod resolution; -mod resolver_path; -mod specifier; -mod tsconfig; - -#[cfg(test)] -mod tests; - -use std::{ - borrow::Cow, - cmp::Ordering, - fmt, - path::{Path, PathBuf}, - sync::{Arc, OnceLock}, -}; - -use camino::{Utf8Component, Utf8Path, Utf8PathBuf}; -use dashmap::DashSet; -use futures::future::{try_join_all, BoxFuture}; -use rustc_hash::FxHashSet; - -use crate::{ - alias_trie::AliasTrie, - cache::{Cache, CachedPath}, - context::ResolveContext as Ctx, - package_json::JSONMap, - path::{PathUtil, SLASH_START}, - specifier::Specifier, - tsconfig::{ExtendsField, ProjectReference, TsConfig}, -}; -pub use crate::{ - builtins::NODEJS_BUILTINS, - error::{JSONError, ResolveError, SpecifierError}, - file_system::{FileMetadata, FileSystem, FileSystemOptions, FileSystemOs}, - options::{ - Alias, AliasValue, EnforceExtension, ResolveOptions, Restriction, TsconfigOptions, - TsconfigReferences, - }, - package_json::{JSONValue, ModuleType, PackageJson}, - resolution::Resolution, - resolver_path::ResolverPath, -}; - -type ResolveResult = Result, ResolveError>; - -/// Context returned from the [Resolver::resolve_with_context] API -#[derive(Debug, Default, Clone)] -pub struct ResolveContext { - /// Files that were found on file system - pub file_dependencies: FxHashSet, - - /// Dependencies that were not found on file system - pub missing_dependencies: FxHashSet, -} - -/// Resolver with the current operating system as the file system -pub type Resolver = ResolverGeneric; - -/// Generic implementation of the resolver, can be configured by the [FileSystem] trait -pub struct ResolverGeneric { - options: ResolveOptions, - cache: Arc>, - /// Pre-built byte-trie over `options.alias` keys. - alias_trie: AliasTrie, - /// Pre-built byte-trie over `options.fallback` keys. - fallback_trie: AliasTrie, - #[cfg(feature = "yarn_pnp")] - pnp_manifest: Arc>, - /// Paths that have been searched and confirmed to have no `.pnp.cjs` reachable by filesystem walk. - #[cfg(feature = "yarn_pnp")] - pnp_no_manifest_cache: Arc>, - /// Lazily parsed directories from `NODE_PATH` env var. - node_path_dirs: OnceLock>, -} - -impl fmt::Debug for ResolverGeneric { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.options.fmt(f) - } -} - -impl Default for ResolverGeneric { - fn default() -> Self { - Self::new(ResolveOptions::default()) - } -} - -impl ResolverGeneric { - pub fn new(options: ResolveOptions) -> Self { - let options = options.sanitize(); - let alias_trie = AliasTrie::build(&options.alias); - let fallback_trie = AliasTrie::build(&options.fallback); - Self { - options, - cache: Arc::new(Cache::new(Fs::default())), - alias_trie, - fallback_trie, - #[cfg(feature = "yarn_pnp")] - pnp_manifest: Arc::new(arc_swap::ArcSwapOption::empty()), - #[cfg(feature = "yarn_pnp")] - pnp_no_manifest_cache: Arc::new(DashSet::new()), - node_path_dirs: OnceLock::new(), - } - } -} - -impl ResolverGeneric { - pub fn new_with_file_system(file_system: Fs, options: ResolveOptions) -> Self { - let options = options.sanitize(); - let alias_trie = AliasTrie::build(&options.alias); - let fallback_trie = AliasTrie::build(&options.fallback); - Self { - options, - cache: Arc::new(Cache::new(file_system)), - alias_trie, - fallback_trie, - #[cfg(feature = "yarn_pnp")] - pnp_manifest: Arc::new(arc_swap::ArcSwapOption::empty()), - #[cfg(feature = "yarn_pnp")] - pnp_no_manifest_cache: Arc::new(DashSet::new()), - node_path_dirs: OnceLock::new(), - } - } - - /// Clone the resolver using the same underlying cache. - #[must_use] - pub fn clone_with_options(&self, options: ResolveOptions) -> Self { - let options = options.sanitize(); - let alias_trie = AliasTrie::build(&options.alias); - let fallback_trie = AliasTrie::build(&options.fallback); - Self { - options, - cache: Arc::clone(&self.cache), - alias_trie, - fallback_trie, - #[cfg(feature = "yarn_pnp")] - pnp_manifest: Arc::clone(&self.pnp_manifest), - #[cfg(feature = "yarn_pnp")] - pnp_no_manifest_cache: Arc::clone(&self.pnp_no_manifest_cache), - node_path_dirs: self.node_path_dirs.clone(), - } - } - - /// Returns the options. - pub fn options(&self) -> &ResolveOptions { - &self.options - } - - /// Clear the underlying cache. - pub fn clear_cache(&self) { - self.cache.clear(); - #[cfg(feature = "yarn_pnp")] - { - self.pnp_manifest.store(None); - self.pnp_no_manifest_cache.clear(); - } - } - - /// Resolve `specifier` at an absolute path to a `directory`. - /// - /// A specifier is the string passed to require or import, i.e. `require("specifier")` or `import "specifier"`. - /// - /// `directory` must be an **absolute** path to a directory where the specifier is resolved against. - /// For CommonJS modules, it is the `__dirname` variable that contains the absolute path to the folder containing current module. - /// For ECMAScript modules, it is the value of `import.meta.url`. - /// - /// # Errors - /// - /// * See [ResolveError] - pub async fn resolve>( - &self, - directory: P, - specifier: &str, - ) -> Result { - let mut ctx = Ctx::default(); - self - .resolve_tracing(directory.as_ref(), specifier, &mut ctx) - .await - } - - /// Resolve `specifier` at absolute `path` with [ResolveContext] - /// - /// # Errors - /// - /// * See [ResolveError] - pub async fn resolve_with_context>( - &self, - directory: P, - specifier: &str, - resolve_context: &mut ResolveContext, - ) -> Result { - let mut ctx = Ctx::default(); - ctx.init_file_dependencies(); - let result = self - .resolve_tracing(directory.as_ref(), specifier, &mut ctx) - .await; - if let Some(deps) = &mut ctx.file_dependencies { - resolve_context.file_dependencies.extend(deps.drain(..)); - } - if let Some(deps) = &mut ctx.missing_dependencies { - resolve_context.missing_dependencies.extend(deps.drain(..)); - } - result - } - - /// Wrap `resolve_impl` with `tracing` information - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = directory.to_str().expect("path should be UTF-8"), specifier = specifier)))] - async fn resolve_tracing( - &self, - directory: &Path, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - let span = tracing::debug_span!("resolve", path = ?directory, specifier = specifier); - let _enter = span.enter(); - let r = self.resolve_impl(directory, specifier, ctx).await; - match &r { - Ok(r) => { - tracing::debug!(options = ?self.options, ret = ?r.path); - } - Err(err) => { - tracing::debug!(options = ?self.options, err = ?err); - } - } - r - } - - async fn resolve_impl( - &self, - path: &Path, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - ctx.with_fully_specified(self.options.fully_specified); - let cached_path = self - .cache - .value(Utf8Path::from_path(path).expect("path should be UTF-8")); - let cached_path = self.require(&cached_path, specifier, ctx).await?; - let path = self.load_realpath(&cached_path, ctx).await?; - if !self.options.restrictions.is_empty() && !self.check_restrictions(&path.normalize()) { - return Err(ResolveError::NotFound(specifier.to_string())); - } - - let package_json = cached_path - .find_package_json(&self.cache.fs, &self.options, ctx) - .await?; - if let Some(package_json) = &package_json { - // path must be inside the package. - debug_assert!(path.starts_with(package_json.directory())); - } - Ok(Resolution { - path, - query: ctx.query.take(), - fragment: ctx.fragment.take(), - package_json, - }) - } - - /// require(X) from module at path Y - /// - /// X: specifier - /// Y: path - /// - /// - fn require<'a>( - &'a self, - cached_path: &'a CachedPath, - specifier: &'a str, - ctx: &'a mut Ctx, - ) -> BoxFuture<'a, Result> { - let fut = async move { - ctx.test_for_infinite_recursion()?; - - // enhanced-resolve: parse - let (parsed, try_fragment_as_path) = self.load_parse(cached_path, specifier, ctx).await?; - if let Some(path) = try_fragment_as_path { - return Ok(path); - } - - self - .require_without_parse(cached_path, parsed.path(), ctx) - .await - }; - Box::pin(fut) - } - - async fn require_without_parse( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // tsconfig-paths - if let Some(path) = self - .load_tsconfig_paths(cached_path, specifier, ctx) - .await? - { - return Ok(path); - } - - // enhanced-resolve: try alias - if let Some(path) = self - .load_alias( - cached_path, - specifier, - &self.options.alias, - &self.alias_trie, - ctx, - ) - .await? - { - return Ok(path); - } - - let result = match Utf8Path::new(specifier).components().next() { - // 2. If X begins with '/' - Some(Utf8Component::RootDir | Utf8Component::Prefix(_)) => { - self.require_absolute(cached_path, specifier, ctx).await - } - // 3. If X begins with './' or '/' or '../' - Some(Utf8Component::CurDir | Utf8Component::ParentDir) => { - self.require_relative(cached_path, specifier, ctx).await - } - // 4. If X begins with '#' - Some(Utf8Component::Normal(_)) if specifier.as_bytes()[0] == b'#' => { - self.require_hash(cached_path, specifier, ctx).await - } - _ => { - // 1. If X is a core module, - // a. return the core module - // b. STOP - self.require_core(specifier)?; - - // (ESM) 5. Otherwise, - // Note: specifier is now a bare specifier. - // Set resolved the result of PACKAGE_RESOLVE(specifier, parentURL). - self.require_bare(cached_path, specifier, ctx).await - } - }; - - match result { - Ok(_) => result, - Err(err) => { - if err.is_ignore() { - return Err(err); - } - // enhanced-resolve: try fallback - self - .load_alias( - cached_path, - specifier, - &self.options.fallback, - &self.fallback_trie, - ctx, - ) - .await - .and_then(|value| value.ok_or(err)) - } - } - } - - // PACKAGE_RESOLVE(packageSpecifier, parentURL) - // 3. If packageSpecifier is a Node.js builtin module name, then - // 1. Return the string "node:" concatenated with packageSpecifier. - fn require_core(&self, specifier: &str) -> Result<(), ResolveError> { - if self.options.builtin_modules { - let starts_with_node = specifier.starts_with("node:"); - if starts_with_node || NODEJS_BUILTINS.binary_search(&specifier).is_ok() { - let mut specifier = specifier.to_string(); - if !starts_with_node { - specifier = format!("node:{specifier}"); - } - return Err(ResolveError::Builtin(specifier)); - } - } - Ok(()) - } - - async fn require_absolute( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // Make sure only path prefixes gets called - debug_assert!(Utf8Path::new(specifier) - .components() - .next() - .is_some_and(|c| matches!(c, Utf8Component::RootDir | Utf8Component::Prefix(_)))); - if !self.options.prefer_relative && self.options.prefer_absolute { - if let Ok(path) = self - .load_package_self_or_node_modules(cached_path, specifier, ctx) - .await - { - return Ok(path); - } - } - if let Some(path) = self.load_roots(specifier, ctx).await { - return Ok(path); - } - // 2. If X begins with '/' - // a. set Y to be the file system root - let path = self.cache.value( - // - #[cfg(windows)] - &Utf8Path::new(specifier).normalize(), - #[cfg(not(windows))] - Utf8Path::new(specifier), - ); - - if let Some(path) = self - .load_as_file_or_directory(&path, specifier, ctx) - .await? - { - return Ok(path); - } - Err(ResolveError::NotFound(specifier.to_string())) - } - - // 3. If X begins with './' or '/' or '../' - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn require_relative( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // Make sure only relative or normal paths gets called - debug_assert!(Utf8Path::new(specifier) - .components() - .next() - .is_some_and(|c| matches!( - c, - Utf8Component::CurDir | Utf8Component::ParentDir | Utf8Component::Normal(_) - ))); - let path = cached_path.path().normalize_with(specifier); - let cached_path = self.cache.value(&path); - // a. LOAD_AS_FILE(Y + X) - // b. LOAD_AS_DIRECTORY(Y + X) - if let Some(path) = self - .load_as_file_or_directory(&cached_path, specifier, ctx) - .await? - { - return Ok(path); - } - // c. THROW "not found" - Err(ResolveError::NotFound(specifier.to_string())) - } - - async fn require_hash( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - debug_assert_eq!(specifier.chars().next(), Some('#')); - // a. LOAD_PACKAGE_IMPORTS(X, dirname(Y)) - if let Some(path) = self - .load_package_imports(cached_path, specifier, ctx) - .await? - { - return Ok(path); - } - self - .load_package_self_or_node_modules(cached_path, specifier, ctx) - .await - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier)))] - async fn require_bare( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // Make sure no other path prefixes gets called - debug_assert!(Utf8Path::new(specifier) - .components() - .next() - .is_some_and(|c| matches!(c, Utf8Component::Normal(_)))); - if self.options.prefer_relative { - if let Ok(path) = self.require_relative(cached_path, specifier, ctx).await { - return Ok(path); - } - } - self - .load_package_self_or_node_modules(cached_path, specifier, ctx) - .await - } - - /// enhanced-resolve: ParsePlugin. - /// - /// It's allowed to escape # as \0# to avoid parsing it as fragment. - /// enhanced-resolve will try to resolve requests containing `#` as path and as fragment, - /// so it will automatically figure out if `./some#thing` means `.../some.js#thing` or `.../some#thing.js`. - /// When a # is resolved as path it will be escaped in the result. Here: `.../some\0#thing.js`. - /// - /// - async fn load_parse<'s>( - &self, - cached_path: &CachedPath, - specifier: &'s str, - ctx: &mut Ctx, - ) -> Result<(Specifier<'s>, Option), ResolveError> { - let parsed = Specifier::parse(specifier).map_err(ResolveError::Specifier)?; - ctx.with_query_fragment(parsed.query, parsed.fragment); - - // There is an edge-case where a request with # can be a path or a fragment -> try both - if ctx.fragment.is_some() && ctx.query.is_none() { - let specifier = parsed.path(); - let fragment = ctx.fragment.take().unwrap(); - let path = format!("{specifier}{fragment}"); - if let Ok(path) = self.require_without_parse(cached_path, &path, ctx).await { - return Ok((parsed, Some(path))); - } - ctx.fragment.replace(fragment); - } - Ok((parsed, None)) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn load_package_self_or_node_modules( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - let (_, subpath) = Self::parse_package_specifier(specifier); - if subpath.is_empty() { - ctx.with_fully_specified(false); - } - // 5. LOAD_PACKAGE_SELF(X, dirname(Y)) - if let Some(path) = self.load_package_self(cached_path, specifier, ctx).await? { - return Ok(path); - } - // 6. LOAD_NODE_MODULES(X, dirname(Y)) - if let Some(path) = self.load_node_modules(cached_path, specifier, ctx).await? { - return Ok(path); - } - // 7. Search NODE_PATH directories as fallback - if let Some(path) = self.load_node_path(specifier, ctx).await? { - return Ok(path); - } - // 8. THROW "not found" - Err(ResolveError::NotFound(specifier.to_string())) - } - - /// LOAD_PACKAGE_IMPORTS(X, DIR) - async fn load_package_imports( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - // 1. Find the closest package scope SCOPE to DIR. - // 2. If no scope was found, return. - let Some(package_json) = cached_path - .find_package_json(&self.cache.fs, &self.options, ctx) - .await? - else { - return Ok(None); - }; - // 3. If the SCOPE/package.json "imports" is null or undefined, return. - // 4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE), ["node", "require"]) defined in the ESM resolver. - if let Some(path) = self - .package_imports_resolve(specifier, &package_json, ctx) - .await? - { - // 5. RESOLVE_ESM_MATCH(MATCH). - return self.resolve_esm_match(specifier, &path, ctx).await; - } - Ok(None) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = cached_path.path().as_str())))] - async fn load_as_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - // enhanced-resolve feature: extension_alias - if let Some(path) = self.load_extension_alias(cached_path, ctx).await? { - return Ok(Some(path)); - } - if self.options.enforce_extension.is_disabled() { - // 1. If X is a file, load X as its file extension format. STOP - if let Some(path) = self.load_alias_or_file(cached_path, ctx).await? { - return Ok(Some(path)); - } - } - // 2. If X.js is a file, load X.js as JavaScript text. STOP - // 3. If X.json is a file, parse X.json to a JavaScript Object. STOP - // 4. If X.node is a file, load X.node as binary addon. STOP - if let Some(path) = self - .load_extensions(cached_path, &self.options.extensions, ctx) - .await? - { - return Ok(Some(path)); - } - Ok(None) - } - - async fn load_as_directory(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - // TODO: Only package.json is supported, so warn about having other values - // Checking for empty files is needed for omitting checks on package.json - // 1. If X/package.json is a file, - if !self.options.description_files.is_empty() { - // a. Parse X/package.json, and look for "main" field. - if let Some(package_json) = cached_path - .package_json(&self.cache.fs, &self.options, ctx) - .await? - { - // b. If "main" is a falsy value, GOTO 2. - for main_field in package_json.main_fields(&self.options.main_fields) { - // ref https://github.com/webpack/enhanced-resolve/blob/main/lib/MainFieldPlugin.js#L66-L67 - let main_field = if main_field.starts_with("./") || main_field.starts_with("../") { - Cow::Borrowed(main_field) - } else { - Cow::Owned(format!("./{main_field}")) - }; - - // c. let M = X + (json main field) - let main_field_path = cached_path.path().normalize_with(main_field.as_ref()); - // d. LOAD_AS_FILE(M) - let cached_path = self.cache.value(&main_field_path); - if let Ok(Some(path)) = self.load_as_file(&cached_path, ctx).await { - return Ok(Some(path)); - } - // e. LOAD_INDEX(M) - if let Some(path) = self.load_index(&cached_path, ctx).await? { - return Ok(Some(path)); - } - } - // f. LOAD_INDEX(X) DEPRECATED - // g. THROW "not found" - } - } - // 2. LOAD_INDEX(X) - self.load_index(cached_path, ctx).await - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn load_as_file_or_directory( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - if self.options.resolve_to_context { - return Ok( - cached_path - .is_dir(&self.cache.fs, ctx) - .await - .then(|| cached_path.clone()), - ); - } - if !specifier.ends_with('/') { - if let Some(path) = self.load_as_file(cached_path, ctx).await? { - return Ok(Some(path)); - } - } - if cached_path.is_dir(&self.cache.fs, ctx).await { - if let Some(path) = self.load_as_directory(cached_path, ctx).await? { - return Ok(Some(path)); - } - } - Ok(None) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = path.path().as_str())))] - async fn load_extensions( - &self, - path: &CachedPath, - extensions: &[String], - ctx: &mut Ctx, - ) -> ResolveResult { - if ctx.fully_specified { - return Ok(None); - } - let path = path.path().as_str(); - // 8 is wild guess for max extension length - let mut path_with_extension_buffer = String::with_capacity(path.len() + 8); - path_with_extension_buffer.push_str(path); - let base_len = path_with_extension_buffer.len(); - - for extension in extensions { - path_with_extension_buffer.truncate(base_len); - path_with_extension_buffer.push_str(extension); - let cached_path = self.cache.value(Utf8Path::new(&path_with_extension_buffer)); - if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { - return Ok(Some(path)); - } - } - Ok(None) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = cached_path.path().as_str())))] - async fn load_realpath( - &self, - cached_path: &CachedPath, - ctx: &mut Ctx, - ) -> Result { - if self.options.symlinks { - cached_path - .realpath(&self.cache.fs) - .await - .map(|path| { - ctx.add_file_dependency(path.as_path()); - path - }) - .map_err(ResolveError::from) - } else { - Ok(cached_path.to_path_buf()) - } - } - - fn check_restrictions(&self, path: &Utf8Path) -> bool { - let path = path.as_std_path(); - for restriction in &self.options.restrictions { - match restriction { - Restriction::Path(restricted_path) => { - if !path.starts_with(restricted_path) { - return false; - } - } - Restriction::Fn(f) => { - if !f(path) { - return false; - } - } - } - } - true - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = cached_path.path().as_str())))] - async fn load_index(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - for main_file in &self.options.main_files { - let main_path = cached_path.path().normalize_with(main_file); - let cached_path = self.cache.value(&main_path); - if self.options.enforce_extension.is_disabled() { - if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { - if self.check_restrictions(path.path()) { - return Ok(Some(path)); - } - } - } - // 1. If X/index.js is a file, load X/index.js as JavaScript text. STOP - // 2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP - // 3. If X/index.node is a file, load X/index.node as binary addon. STOP - if let Some(path) = self - .load_extensions(&cached_path, &self.options.extensions, ctx) - .await? - { - return Ok(Some(path)); - } - } - Ok(None) - } - - async fn load_alias_or_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - if !self.options.alias_fields.is_empty() { - if let Some(package_json) = cached_path - .find_package_json(&self.cache.fs, &self.options, ctx) - .await? - { - if let Some(path) = self - .load_browser_field(cached_path, None, &package_json, ctx) - .await? - { - return Ok(Some(path)); - } - } - } - // enhanced-resolve: try file as alias - let alias_specifier = cached_path.path().as_str(); - if let Some(path) = self - .load_alias( - cached_path, - alias_specifier, - &self.options.alias, - &self.alias_trie, - ctx, - ) - .await? - { - return Ok(Some(path)); - } - if cached_path.is_file(&self.cache.fs, ctx).await && self.check_restrictions(cached_path.path()) - { - return Ok(Some(cached_path.clone())); - } - Ok(None) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn load_node_modules( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - #[cfg(feature = "yarn_pnp")] - { - if self.options.enable_pnp { - if let Some(resolved_path) = self.load_pnp(cached_path, specifier, ctx).await? { - return Ok(Some(resolved_path)); - } - } - } - - let (package_name, subpath) = Self::parse_package_specifier(specifier); - // 1. let DIRS = NODE_MODULES_PATHS(START) - // 2. for each DIR in DIRS: - for module_name in &self.options.modules { - for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { - // Skip if /path/to/node_modules does not exist - if !cached_path.is_dir(&self.cache.fs, ctx).await { - continue; - } - - let Some(cached_path) = self - .get_module_directory(cached_path, module_name, ctx) - .await - else { - continue; - }; - if let Some(path) = self - .resolve_in_module_dir(&cached_path, specifier, package_name, subpath, ctx) - .await? - { - return Ok(Some(path)); - } - } - } - Ok(None) - } - - /// Try resolving a specifier within a single module directory (e.g. a node_modules dir or a NODE_PATH dir). - async fn resolve_in_module_dir( - &self, - cached_path: &CachedPath, - specifier: &str, - package_name: &str, - subpath: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - // Optimize lookup by inspecting whether the package exists - // From LOAD_PACKAGE_EXPORTS(X, DIR) - // 1. Try to interpret X as a combination of NAME and SUBPATH where the name - // may have a @scope/ prefix and the subpath begins with a slash (`/`). - if !package_name.is_empty() { - let package_path = cached_path.path().normalize_with(package_name); - let pkg_cached = self.cache.value(&package_path); - if pkg_cached.is_dir(&self.cache.fs, ctx).await { - // a. LOAD_PACKAGE_EXPORTS(X, DIR) - if let Some(path) = self - .load_package_exports(specifier, subpath, &pkg_cached, ctx) - .await? - { - return Ok(Some(path)); - } - } else { - // package_name is not a directory, so useless to check inside it - if !subpath.is_empty() { - return Ok(None); - } - // Skip if the directory leading to the scope package does not exist - // i.e. `@scope` is not a directory for `@scope/package` - if package_name.starts_with('@') { - if let Some(path) = pkg_cached.parent() { - if !path.is_dir(&self.cache.fs, ctx).await { - return Ok(None); - } - } - } - } - } - - // Try as file or directory for all other cases - // b. LOAD_AS_FILE(DIR/X) - // c. LOAD_AS_DIRECTORY(DIR/X) - let node_module_file = cached_path.path().normalize_with(specifier); - let file_cached = self.cache.value(&node_module_file); - self - .load_as_file_or_directory(&file_cached, specifier, ctx) - .await - } - - /// Parse `NODE_PATH` env var into directory list. Uses `;` on Windows, `:` on POSIX. - fn parse_node_path_env() -> Vec { - std::env::var_os("NODE_PATH") - .map(|path| { - std::env::split_paths(&path) - .filter(|paths| paths.is_absolute()) - .collect::>() - }) - .unwrap_or_default() - } - - /// Lazily get NODE_PATH directories. Parsed once on first access. - fn node_path_dirs(&self) -> &[PathBuf] { - if !self.options.node_path { - return &[]; - } - self.node_path_dirs.get_or_init(Self::parse_node_path_env) - } - - #[cfg(all(test, not(target_os = "windows")))] - fn with_node_path_dirs(self, dirs: Vec) -> Self { - let _ = self.node_path_dirs.set(dirs); - self - } - - /// Search NODE_PATH directories for a bare specifier. - /// NODE_PATH dirs are absolute paths searched directly (no parent directory walking). - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier)))] - async fn load_node_path(&self, specifier: &str, ctx: &mut Ctx) -> ResolveResult { - let dirs = self.node_path_dirs(); - if dirs.is_empty() { - return Ok(None); - } - let (package_name, subpath) = Self::parse_package_specifier(specifier); - for dir in dirs { - let cached_path = self - .cache - .value(Utf8Path::from_path(dir).expect("path should be UTF-8")); - if !cached_path.is_dir(&self.cache.fs, ctx).await { - continue; - } - if let Some(path) = self - .resolve_in_module_dir(&cached_path, specifier, package_name, subpath, ctx) - .await? - { - return Ok(Some(path)); - } - } - Ok(None) - } - - #[cfg(feature = "yarn_pnp")] - #[cfg_attr(feature = "enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = cached_path.path().as_str())))] - fn find_pnp_manifest(&self, cached_path: &CachedPath) -> Option> { - // 1. Already have a manifest → return it (covers global cache paths too) - if let Some(manifest) = self.pnp_manifest.load_full() { - return Some(manifest); - } - - // 2. This path was searched before and found nothing → skip filesystem walk - if self.pnp_no_manifest_cache.contains(cached_path) { - return None; - } - - // 3. Search for `.pnp.cjs` by walking up from this path - let base_path = cached_path.to_path_buf(); - let Some(manifest_path) = pnp::find_closest_pnp_manifest_path(base_path.as_std_path()) else { - self.pnp_no_manifest_cache.insert(cached_path.clone()); - - for p in base_path.ancestors() { - let p_cached = self.cache.value(p); - if self.pnp_no_manifest_cache.contains(&p_cached) { - break; - } - self.pnp_no_manifest_cache.insert(p_cached); - } - return None; - }; - - tracing::debug!("use manifest path: {:?}", manifest_path); - - let manifest = pnp::load_pnp_manifest(&manifest_path).ok()?; - let manifest = Arc::new((manifest_path, manifest)); - - let previous = self - .pnp_manifest - .compare_and_swap(&None::>, Some(Arc::clone(&manifest))); - - if let Some(existing) = previous.as_ref() { - return Some(Arc::clone(existing)); - } - - Some(manifest) - } - - #[cfg(feature = "yarn_pnp")] - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn load_pnp( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result, ResolveError> { - let Some(pnp_data) = self.find_pnp_manifest(cached_path) else { - return Ok(None); - }; - let (manifest_path, manifest) = pnp_data.as_ref(); - ctx.add_file_dependency(manifest_path); - - let mut path = cached_path.to_path_buf(); - path.push(""); - let resolution = - pnp::resolve_to_unqualified_via_manifest(manifest, specifier, path.as_std_path()); - - tracing::debug!("pnp resolve unqualified as: {:?}", resolution); - - match resolution { - Ok(pnp::Resolution::Resolved(path, subpath)) => { - let cached_path = self - .cache - .value(Utf8Path::from_path(&path).expect("path should be UTF-8")); - - let export_resolution = self.load_package_self(&cached_path, specifier, ctx).await?; - // can be found in pnp cached folder - if export_resolution.is_some() { - return Ok(export_resolution); - } - let is_bare = subpath.is_none(); - - let inner_request = subpath.map_or_else( - || ".".to_string(), - |mut p| { - p.insert_str(0, "./"); - p - }, - ); - - let mut inner_options = self.options().clone(); - if is_bare { - inner_options.fully_specified = false; - } - let inner_resolver = self.clone_with_options(inner_options); - - // try as file or directory `path` in the pnp folder - let Ok(inner_resolution) = inner_resolver.resolve(&path, &inner_request).await else { - return Err(ResolveError::NotFound(specifier.to_string())); - }; - - Ok(Some(self.cache.value( - Utf8Path::from_path(inner_resolution.path()).expect("path should be UTF-8"), - ))) - } - - Ok(pnp::Resolution::Skipped) => Ok(None), - Err(_) => Err(ResolveError::NotFound(specifier.to_string())), - } - } - - async fn get_module_directory( - &self, - cached_path: &CachedPath, - module_name: &str, - ctx: &mut Ctx, - ) -> Option { - if module_name == "node_modules" { - cached_path.cached_node_modules(&self.cache, ctx).await - } else if cached_path.path().components().next_back() - == Some(Utf8Component::Normal(module_name)) - { - Some(cached_path.clone()) - } else { - cached_path - .module_directory(module_name, &self.cache, ctx) - .await - } - } - - async fn load_package_exports( - &self, - specifier: &str, - subpath: &str, - cached_path: &CachedPath, - ctx: &mut Ctx, - ) -> ResolveResult { - // 2. If X does not match this pattern or DIR/NAME/package.json is not a file, - // return. - let Some(package_json) = cached_path - .package_json(&self.cache.fs, &self.options, ctx) - .await? - else { - return Ok(None); - }; - // 3. Parse DIR/NAME/package.json, and look for "exports" field. - // 4. If "exports" is null or undefined, return. - // 5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), "." + SUBPATH, - // `package.json` "exports", ["node", "require"]) defined in the ESM resolver. - // Note: The subpath is not prepended with a dot on purpose - for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(path) = self - .package_exports_resolve(cached_path.path(), &format!(".{subpath}"), exports, ctx) - .await? - { - // 6. RESOLVE_ESM_MATCH(MATCH) - return self.resolve_esm_match(specifier, &path, ctx).await; - }; - } - Ok(None) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn load_package_self( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - // 1. Find the closest package scope SCOPE to DIR. - // 2. If no scope was found, return. - let Some(package_json) = cached_path - .find_package_json(&self.cache.fs, &self.options, ctx) - .await? - else { - return Ok(None); - }; - // 3. If the SCOPE/package.json "exports" is null or undefined, return. - // 4. If the SCOPE/package.json "name" is not the first segment of X, return. - if let Some(subpath) = package_json - .name - .as_ref() - .and_then(|package_name| Self::strip_package_name(specifier, package_name)) - { - // 5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE), - // "." + X.slice("name".length), `package.json` "exports", ["node", "require"]) - // defined in the ESM resolver. - let package_url = - Utf8Path::from_path(package_json.directory()).expect("path should be UTF-8"); - // Note: The subpath is not prepended with a dot on purpose - // because `package_exports_resolve` matches subpath without the leading dot. - for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(cached_path) = self - .package_exports_resolve(package_url, &format!(".{subpath}"), exports, ctx) - .await? - { - // 6. RESOLVE_ESM_MATCH(MATCH) - return self.resolve_esm_match(specifier, &cached_path, ctx).await; - } - } - } - self - .load_browser_field(cached_path, Some(specifier), &package_json, ctx) - .await - } - - /// RESOLVE_ESM_MATCH(MATCH) - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = specifier, path = cached_path.path().as_str())))] - async fn resolve_esm_match( - &self, - specifier: &str, - cached_path: &CachedPath, - ctx: &mut Ctx, - ) -> ResolveResult { - // 1. let RESOLVED_PATH = fileURLToPath(MATCH) - // 2. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension format. STOP - // - // Non-compliant ESM can result in a directory, so directory is tried as well. - if let Some(path) = self.load_as_file_or_directory(cached_path, "", ctx).await? { - return Ok(Some(path)); - } - - let mut path_str = Some(cached_path.path().as_str()); - - // 3. If the RESOLVED_PATH contains `?``, it could be a path with query - // so try to resolve it as a file or directory without the query, - // but also `?` is a valid character in a path, so we should try from right to left. - while let Some(s) = path_str { - if let Some((before, _)) = s.rsplit_once('?') { - if (self - .load_as_file_or_directory(&self.cache.value(Utf8Path::new(before)), "", ctx) - .await?) - .is_some() - { - return Ok(Some(cached_path.clone())); - } - path_str = Some(before); - } else { - break; - } - } - - // 3. THROW "not found" - Err(ResolveError::NotFound(specifier.to_string())) - } - - /// enhanced-resolve: AliasFieldPlugin for [ResolveOptions::alias_fields] - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(specifier = module_specifier, path = cached_path.path().as_str())))] - async fn load_browser_field( - &self, - cached_path: &CachedPath, - module_specifier: Option<&str>, - package_json: &PackageJson, - ctx: &mut Ctx, - ) -> ResolveResult { - let path = cached_path.path(); - let Some(new_specifier) = - package_json.resolve_browser_field(path, module_specifier, &self.options.alias_fields)? - else { - return Ok(None); - }; - // Abort when resolving recursive module - if module_specifier.is_some_and(|s| s == new_specifier) { - return Ok(None); - } - if ctx - .resolving_alias - .as_ref() - .is_some_and(|s| s == new_specifier) - { - // Complete when resolving to self `{"./a.js": "./a.js"}` - if new_specifier - .strip_prefix("./") - .is_some_and(|s| path.ends_with(s)) - { - return if cached_path.is_file(&self.cache.fs, ctx).await { - if self.check_restrictions(cached_path.path()) { - Ok(Some(cached_path.clone())) - } else { - Ok(None) - } - } else { - Err(ResolveError::NotFound(new_specifier.to_string())) - }; - } - return Err(ResolveError::Recursion); - } - ctx.with_resolving_alias(new_specifier.to_string()); - ctx.with_fully_specified(false); - let cached_path = self - .cache - .value(Utf8Path::from_path(package_json.directory()).expect("path should be UTF-8")); - self - .require(&cached_path, new_specifier, ctx) - .await - .map(Some) - } - - /// enhanced-resolve: AliasPlugin for [ResolveOptions::alias] and [ResolveOptions::fallback]. - async fn load_alias( - &self, - cached_path: &CachedPath, - specifier: &str, - aliases: &Alias, - trie: &AliasTrie, - ctx: &mut Ctx, - ) -> ResolveResult { - // The trie has already done all the prefix / `$`-exact / `SLASH_START` - // bookkeeping that the previous strip_prefix loop hand-rolled; here we - // only walk the matches in declared order and dispatch each one. - for m in trie.matches(specifier) { - let (alias_key_raw, specifiers) = &aliases[m.index]; - // `key_len` is the byte length of the matching key after stripping - // any `$` suffix, so a slice into the raw key gives us the effective - // key used for `normalize_with` and error reporting. - let alias_key = &alias_key_raw[..m.key_len]; - // It should stop resolving when all of the tried alias values - // failed to resolve. - // - let mut should_stop = false; - for r in specifiers { - match r { - AliasValue::Path(alias_value) => { - if let Some(path) = self - .load_alias_value( - cached_path, - alias_key, - alias_value, - specifier, - ctx, - &mut should_stop, - ) - .await? - { - return Ok(Some(path)); - } - } - AliasValue::Ignore => { - let path = cached_path.path().normalize_with(alias_key); - return Err(ResolveError::Ignored(path.into())); - } - } - } - if should_stop { - return Err(ResolveError::MatchedAliasNotFound( - specifier.to_string(), - alias_key.to_string(), - )); - } - } - Ok(None) - } - - async fn load_alias_value( - &self, - cached_path: &CachedPath, - alias_key: &str, - alias_value: &str, - request: &str, - ctx: &mut Ctx, - should_stop: &mut bool, - ) -> ResolveResult { - if request != alias_value - && !request - .strip_prefix(alias_value) - .is_some_and(|prefix| prefix.starts_with('/')) - { - let tail = &request[alias_key.len()..]; - - let new_specifier = if tail.is_empty() { - Cow::Borrowed(alias_value) - } else { - let alias_path = Utf8Path::new(alias_value).normalize(); - // Must not append anything to alias_value if it is a file. - let alias_value_cached_path = self.cache.value(&alias_path); - if alias_value_cached_path.is_file(&self.cache.fs, ctx).await { - return Ok(None); - } - - // Remove the leading slash so the final path is concatenated. - let tail = tail.trim_start_matches(SLASH_START); - if tail.is_empty() { - Cow::Borrowed(alias_value) - } else { - let normalized = alias_path.normalize_with(tail); - Cow::Owned(normalized.into_string()) - } - }; - - *should_stop = true; - ctx.with_fully_specified(false); - return match self.require(cached_path, new_specifier.as_ref(), ctx).await { - Err(ResolveError::NotFound(_) | ResolveError::MatchedAliasNotFound(_, _)) => Ok(None), - Ok(path) => return Ok(Some(path)), - Err(err) => return Err(err), - }; - } - Ok(None) - } - - /// Given an extension alias map `{".js": [".ts", ".js"]}`, - /// load the mapping instead of the provided extension - /// - /// This is an enhanced-resolve feature - /// - /// # Errors - /// - /// * [ResolveError::ExtensionAlias]: When all of the aliased extensions are not found - async fn load_extension_alias(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - if self.options.extension_alias.is_empty() { - return Ok(None); - } - let Some(path_extension) = cached_path.path().extension() else { - return Ok(None); - }; - let Some((_, extensions)) = self - .options - .extension_alias - .iter() - .find(|(ext, _)| ext.trim_start_matches('.') == path_extension) - else { - return Ok(None); - }; - let path = cached_path.path(); - let Some(filename) = path.file_name() else { - return Ok(None); - }; - let path_without_extension = path.with_extension(""); - - ctx.with_fully_specified(true); - for extension in extensions { - let mut path_with_extension = path_without_extension.clone().into_string(); - path_with_extension.reserve_exact(extension.len()); - path_with_extension.push_str(extension); - let cached_path = self.cache.value(Utf8Path::new(&path_with_extension)); - if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { - ctx.with_fully_specified(false); - return Ok(Some(path)); - } - } - // Bail if path is module directory such as `ipaddr.js` - if !cached_path.is_file(&self.cache.fs, ctx).await - || !self.check_restrictions(cached_path.path()) - { - ctx.with_fully_specified(false); - return Ok(None); - } - // Create a meaningful error message. - let dir = path.parent().unwrap().as_std_path().to_path_buf(); - let filename_without_extension = Utf8Path::new(filename).with_extension(""); - let filename_without_extension = filename_without_extension.as_str(); - let files = extensions - .iter() - .map(|ext| format!("{filename_without_extension}{ext}")) - .collect::>() - .join(","); - Err(ResolveError::ExtensionAlias( - filename.to_string(), - files, - dir, - )) - } - - /// enhanced-resolve: RootsPlugin - /// - /// A list of directories where requests of server-relative URLs (starting with '/') are resolved, - /// defaults to context configuration option. - /// - /// On non-Windows systems these requests are resolved as an absolute path first. - async fn load_roots(&self, specifier: &str, ctx: &mut Ctx) -> Option { - if self.options.roots.is_empty() { - return None; - } - if let Some(specifier) = specifier.strip_prefix(SLASH_START) { - for root in &self.options.roots { - let cached_path = self - .cache - .value(Utf8Path::from_path(root).expect("path should be UTF-8")); - if let Ok(path) = self.require_relative(&cached_path, specifier, ctx).await { - return Some(path); - } - } - } - None - } - - async fn load_tsconfig_paths( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - let Some(tsconfig_options) = &self.options.tsconfig else { - return Ok(None); - }; - let tsconfig = self - .load_tsconfig( - /* root */ true, - Utf8Path::from_path(&tsconfig_options.config_file).expect("path should be UTF-8"), - &tsconfig_options.references, - ) - .await?; - // TODO: restore once these can be reported without costing `module count * tsconfig count`. - // Temporarily disabled: a monorepo with project references bursts memory in the consumer, - // which keeps this set per module. Trade-off: tsconfig edits won't invalidate watch builds. - // See `tsconfig_file_as_file_dependencies`, ignored for now. - // for dependency in &tsconfig.file_dependencies { - // ctx.add_file_dependency(dependency.as_path()); - // } - let paths = tsconfig.resolve(cached_path.path(), specifier); - for path in paths { - let cached_path = self.cache.value(&path); - if let Ok(path) = self.require_relative(&cached_path, ".", ctx).await { - return Ok(Some(path)); - } - } - Ok(None) - } - - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip(self), fields(path = path.as_str())))] - fn load_tsconfig<'a>( - &'a self, - root: bool, - path: &'a Utf8Path, - references: &'a TsconfigReferences, - ) -> BoxFuture<'a, Result, ResolveError>> { - let fut = async move { - self - .cache - .tsconfig(root, path, |mut tsconfig| async move { - let directory = self.cache.value(tsconfig.directory()); - tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); - - // Extend tsconfig - self - .merge_tsconfig_extends(&mut tsconfig, &directory) - .await?; - - // Load project references - match references { - TsconfigReferences::Disabled => { - tsconfig.references.drain(..); - } - TsconfigReferences::Auto => {} - TsconfigReferences::Paths(paths) => { - tsconfig.references = paths - .iter() - .map(|path| ProjectReference { - path: Utf8PathBuf::from_path_buf(path.clone()).expect("path should be UTF-8"), - tsconfig: None, - }) - .collect(); - } - } - let mut visited = FxHashSet::default(); - self.load_references(&mut tsconfig, &mut visited).await?; - - Ok(tsconfig) - }) - .await - }; - Box::pin(fut) - } - - // Walks `tsconfig.references` and loads each referenced tsconfig, recursing - // into nested references so that transitive `paths` (e.g. A → B → C) are - // honored — matching `tsc`'s "nearest tsconfig wins" behavior and - // `enhanced-resolve`'s recursive `references: "auto"` walk. - // - // `visited` carries the canonical paths of tsconfigs already being loaded - // along the current chain. When a reference points back into the chain, - // the cycle edge is cut: the reference is still attached with its own - // `paths` honored, but its nested references are not walked. - fn load_references<'a>( - &'a self, - tsconfig: &'a mut TsConfig, - visited: &'a mut FxHashSet, - ) -> BoxFuture<'a, Result<(), ResolveError>> { - Box::pin(async move { - if tsconfig.references.is_empty() { - return Ok(()); - } - let directory = tsconfig.directory().to_path_buf(); - let current_path = tsconfig.path.clone(); - let mut flattened_reference_paths = FxHashSet::default(); - visited.insert(current_path.clone()); - for reference in &mut tsconfig.references { - let reference_tsconfig_path = directory.normalize_with(&reference.path); - // Reborrow so the closure below can capture `&mut FxHashSet` across - // multiple iterations of this loop. Without the reborrow, the first - // iteration would consume the original `&mut visited` binding. - let visited: &mut FxHashSet = &mut *visited; - let reference_tsconfig = self - .cache - .tsconfig( - /* root */ true, - &reference_tsconfig_path, - |mut reference_tsconfig| { - let current_path = current_path.clone(); - async move { - if reference_tsconfig.path == current_path { - return Err(ResolveError::TsconfigSelfReference( - reference_tsconfig.path.clone().into(), - )); - } - // Cut the cycle: if this reference is already part of the - // ongoing load chain, return it without walking its own - // references. Its `paths` are still attached to the parent. - if visited.contains(&reference_tsconfig.path) { - return Ok(reference_tsconfig); - } - // Apply `extends` so the reference inherits its base config's - // `baseUrl`/`paths` before its own references are walked. - let directory = self.cache.value(reference_tsconfig.directory()); - self - .merge_tsconfig_extends(&mut reference_tsconfig, &directory) - .await?; - self - .load_references(&mut reference_tsconfig, visited) - .await?; - Ok(reference_tsconfig) - } - }, - ) - .await?; - tsconfig - .file_dependencies - .extend(reference_tsconfig.file_dependencies.iter().cloned()); - for nested in &reference_tsconfig.flattened_references { - if flattened_reference_paths.insert(nested.path.clone()) { - tsconfig.flattened_references.push(Arc::clone(nested)); - } - } - if flattened_reference_paths.insert(reference_tsconfig.path.clone()) { - tsconfig - .flattened_references - .push(Arc::clone(&reference_tsconfig)); - } - reference.tsconfig.replace(reference_tsconfig); - } - Ok(()) - }) - } - - async fn merge_tsconfig_extends( - &self, - tsconfig: &mut TsConfig, - directory: &CachedPath, - ) -> Result<(), ResolveError> { - let Some(extends) = &tsconfig.extends else { - return Ok(()); - }; - let extended_tsconfig_paths = match extends { - ExtendsField::Single(s) => { - vec![ - self - .get_extended_tsconfig_path(directory, tsconfig, s) - .await?, - ] - } - ExtendsField::Multiple(specifiers) => { - try_join_all( - specifiers - .iter() - .map(|s| self.get_extended_tsconfig_path(directory, tsconfig, s)), - ) - .await? - } - }; - for extended_tsconfig_path in extended_tsconfig_paths { - let extended_tsconfig = self - .load_tsconfig( - /* root */ false, - &extended_tsconfig_path, - &TsconfigReferences::Disabled, - ) - .await?; - tsconfig.extend_tsconfig(&extended_tsconfig); - } - Ok(()) - } - - async fn get_extended_tsconfig_path( - &self, - directory: &CachedPath, - tsconfig: &TsConfig, - specifier: &str, - ) -> Result { - match specifier.as_bytes().first() { - None => Err(ResolveError::Specifier(SpecifierError::Empty( - specifier.to_string(), - ))), - Some(b'/') => Ok(Utf8PathBuf::from(specifier)), - Some(b'.') => Ok(tsconfig.directory().normalize_with(specifier)), - _ => self - .clone_with_options(ResolveOptions { - description_files: vec![], - extensions: vec![".json".into()], - main_files: vec!["tsconfig.json".into()], - ..ResolveOptions::default() - }) - .load_package_self_or_node_modules(directory, specifier, &mut Ctx::default()) - .await - .map(|p| p.to_path_buf()) - .map_err(|err| match err { - ResolveError::NotFound(_) => ResolveError::TsconfigNotFound(PathBuf::from(specifier)), - _ => err, - }), - } - } - - /// PACKAGE_RESOLVE(packageSpecifier, parentURL) - async fn package_resolve( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - let (package_name, subpath) = Self::parse_package_specifier(specifier); - - // 3. If packageSpecifier is a Node.js builtin module name, then - // 1. Return the string "node:" concatenated with packageSpecifier. - self.require_core(package_name)?; - - // 11. While parentURL is not the file system root, - for module_name in &self.options.modules { - for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { - // 1. Let packageURL be the URL resolution of "node_modules/" concatenated with packageSpecifier, relative to parentURL. - let Some(cached_path) = self - .get_module_directory(cached_path, module_name, ctx) - .await - else { - continue; - }; - if let Some(path) = self - .package_resolve_in_dir(&cached_path, package_name, subpath, ctx) - .await? - { - return Ok(Some(path)); - } - } - } - - // Fallback: search NODE_PATH directories - for dir in self.node_path_dirs() { - let cached_path = self - .cache - .value(Utf8Path::from_path(dir).expect("path should be UTF-8")); - if !cached_path.is_dir(&self.cache.fs, ctx).await { - continue; - } - if let Some(path) = self - .package_resolve_in_dir(&cached_path, package_name, subpath, ctx) - .await? - { - return Ok(Some(path)); - } - } - - Err(ResolveError::NotFound(specifier.to_string())) - } - - /// Try ESM package resolution within a single module directory. - async fn package_resolve_in_dir( - &self, - cached_path: &CachedPath, - package_name: &str, - subpath: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - let package_path = cached_path.path().normalize_with(package_name); - let cached_path = self.cache.value(&package_path); - if !cached_path.is_dir(&self.cache.fs, ctx).await { - return Ok(None); - } - if let Some(package_json) = cached_path - .package_json(&self.cache.fs, &self.options, ctx) - .await? - { - for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(path) = self - .package_exports_resolve(cached_path.path(), &format!(".{subpath}"), exports, ctx) - .await? - { - return Ok(Some(path)); - } - } - if subpath == "." { - for main_field in package_json.main_fields(&self.options.main_fields) { - let path = cached_path.path().normalize_with(main_field); - let main_cached = self.cache.value(&path); - if main_cached.is_file(&self.cache.fs, ctx).await - && self.check_restrictions(main_cached.path()) - { - return Ok(Some(main_cached.clone())); - } - } - } - } - let subpath = format!(".{subpath}"); - ctx.with_fully_specified(false); - self.require(&cached_path, &subpath, ctx).await.map(Some) - } - - /// PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions) - fn package_exports_resolve<'a>( - &'a self, - package_url: &'a Utf8Path, - subpath: &'a str, - exports: &'a JSONValue, - ctx: &'a mut Ctx, - ) -> BoxFuture<'a, ResolveResult> { - let fut = async move { - let conditions = &self.options.condition_names; - // 1. If exports is an Object with both a key starting with "." and a key not starting with ".", throw an Invalid Package Configuration error. - if let JSONValue::Object(map) = exports { - let mut has_dot = false; - let mut without_dot = false; - for key in map.keys() { - let starts_with_dot_or_hash = key.starts_with(['.', '#']); - has_dot = has_dot || starts_with_dot_or_hash; - without_dot = without_dot || !starts_with_dot_or_hash; - if has_dot && without_dot { - return Err(ResolveError::InvalidPackageConfig( - package_url.join("package.json").into(), - )); - } - } - } - // 2. If subpath is equal to ".", then - // Note: subpath is not prepended with a dot when passed in. - if subpath == "." { - // enhanced-resolve appends query and fragment when resolving exports field - // https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/lib/ExportsFieldPlugin.js#L57-L62 - // This is only need when querying the main export, otherwise ctx is passed through. - if ctx.query.is_some() || ctx.fragment.is_some() { - let query = ctx.query.clone().unwrap_or_default(); - let fragment = ctx.fragment.clone().unwrap_or_default(); - return Err(ResolveError::PackagePathNotExported( - format!("./{}{query}{fragment}", subpath.trim_start_matches('.')), - package_url.join("package.json").into(), - )); - } - // 1. Let mainExport be undefined. - let main_export = match exports { - // 2. If exports is a String or Array, or an Object containing no keys starting with ".", then - JSONValue::String(_) | JSONValue::Array(_) => { - // 1. Set mainExport to exports. - Some(exports) - } - // 3. Otherwise if exports is an Object containing a "." property, then - JSONValue::Object(map) => { - // 1. Set mainExport to exports["."]. - map.get(".").map_or_else( - || { - if map - .keys() - .any(|key| key.starts_with("./") || key.starts_with('#')) - { - None - } else { - Some(exports) - } - }, - Some, - ) - } - JSONValue::Static(_) => None, - }; - // 4. If mainExport is not undefined, then - if let Some(main_export) = main_export { - // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, mainExport, null, false, conditions). - let resolved = self - .package_target_resolve( - package_url, - ".", - main_export, - None, - /* is_imports */ false, - conditions, - ctx, - ) - .await?; - // 2. If resolved is not null or undefined, return resolved. - if let Some(path) = resolved { - return Ok(Some(path)); - } - } - } - // 3. Otherwise, if exports is an Object and all keys of exports start with ".", then - if let JSONValue::Object(exports) = exports { - // 1. Let matchKey be the string "./" concatenated with subpath. - // Note: `package_imports_exports_resolve` does not require the leading dot. - let match_key = &subpath; - // 2. Let resolved be the result of PACKAGE_IMPORTS_EXPORTS_RESOLVE( matchKey, exports, packageURL, false, conditions). - if let Some(path) = self - .package_imports_exports_resolve( - match_key, - exports, - package_url, - /* is_imports */ false, - conditions, - ctx, - ) - .await? - { - // 3. If resolved is not null or undefined, return resolved. - return Ok(Some(path)); - } - } - // 4. Throw a Package Path Not Exported error. - Err(ResolveError::PackagePathNotExported( - subpath.to_string(), - package_url.join("package.json").into(), - )) - }; - Box::pin(fut) - } - - /// PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions) - async fn package_imports_resolve( - &self, - specifier: &str, - package_json: &PackageJson, - ctx: &mut Ctx, - ) -> Result, ResolveError> { - // 1. Assert: specifier begins with "#". - debug_assert!(specifier.starts_with('#'), "{specifier}"); - // 2. If specifier is exactly equal to "#", then - // 1. Throw an Invalid Module Specifier error. - // 3. Let packageURL be the result of LOOKUP_PACKAGE_SCOPE(parentURL). - // 4. If packageURL is not null, then - - // 1. Let pjson be the result of READ_PACKAGE_JSON(packageURL). - // 2. If pjson.imports is a non-null Object, then - - // 1. Let resolved be the result of PACKAGE_IMPORTS_EXPORTS_RESOLVE( specifier, pjson.imports, packageURL, true, conditions). - let mut has_imports = false; - for imports in package_json.imports_fields(&self.options.imports_fields) { - if !has_imports { - has_imports = true; - // TODO: fill in test case for this case - if specifier == "#" { - return Err(ResolveError::InvalidModuleSpecifier( - specifier.to_string(), - package_json.path.clone(), - )); - } - } - if let Some(path) = self - .package_imports_exports_resolve( - specifier, - imports, - Utf8Path::from_path(package_json.directory()).expect("path should be UTF-8"), - /* is_imports */ true, - &self.options.condition_names, - ctx, - ) - .await? - { - // 2. If resolved is not null or undefined, return resolved. - return Ok(Some(path)); - } - } - - // 5. Throw a Package Import Not Defined error. - if has_imports { - Err(ResolveError::PackageImportNotDefined( - specifier.to_string(), - package_json.path.clone(), - )) - } else { - Ok(None) - } - } - - /// PACKAGE_IMPORTS_EXPORTS_RESOLVE(matchKey, matchObj, packageURL, isImports, conditions) - async fn package_imports_exports_resolve( - &self, - match_key: &str, - match_obj: &JSONMap<'_>, - package_url: &Utf8Path, - is_imports: bool, - conditions: &[String], - ctx: &mut Ctx, - ) -> ResolveResult { - // enhanced-resolve behaves differently, it throws - // Error: CachedPath to directories is not possible with the exports field (specifier was ./dist/) - if match_key.ends_with('/') { - return Ok(None); - } - // 1. If matchKey is a key of matchObj and does not contain "*", then - if !match_key.contains('*') { - // 1. Let target be the value of matchObj[matchKey]. - if let Some(target) = match_obj.get(match_key) { - // 2. Return the result of PACKAGE_TARGET_RESOLVE(packageURL, target, null, isImports, conditions). - return self - .package_target_resolve( - package_url, - match_key, - target, - None, - is_imports, - conditions, - ctx, - ) - .await; - } - } - - let mut best_target = None; - let mut best_match = ""; - let mut best_key = String::new(); - // 2. Let expansionKeys be the list of keys of matchObj containing only a single "*", sorted by the sorting function PATTERN_KEY_COMPARE which orders in descending order of specificity. - // 3. For each key expansionKey in expansionKeys, do - for (expansion_key, target) in match_obj { - if expansion_key.starts_with("./") || expansion_key.starts_with('#') { - // 1. Let patternBase be the substring of expansionKey up to but excluding the first "*" character. - if let Some((pattern_base, pattern_trailer)) = expansion_key.split_once('*') { - // 2. If matchKey starts with but is not equal to patternBase, then - if match_key.starts_with(pattern_base) - // 1. Let patternTrailer be the substring of expansionKey from the index after the first "*" character. - && !pattern_trailer.contains('*') - // 2. If patternTrailer has zero length, or if matchKey ends with patternTrailer and the length of matchKey is greater than or equal to the length of expansionKey, then - && (pattern_trailer.is_empty() - || (match_key.len() >= expansion_key.len() - && match_key.ends_with(pattern_trailer))) - && Self::pattern_key_compare(&best_key, expansion_key).is_gt() - { - // 1. Let target be the value of matchObj[expansionKey]. - best_target = Some(target); - // 2. Let patternMatch be the substring of matchKey starting at the index of the length of patternBase up to the length of matchKey minus the length of patternTrailer. - best_match = &match_key[pattern_base.len()..match_key.len() - pattern_trailer.len()]; - best_key = expansion_key.to_string(); - } - } else if expansion_key.ends_with('/') - && match_key.starts_with(&**expansion_key) - && Self::pattern_key_compare(&best_key, expansion_key).is_gt() - { - // TODO: [DEP0148] DeprecationWarning: Use of deprecated folder mapping "./dist/" in the "exports" field module resolution of the package at xxx/package.json. - best_target = Some(target); - best_match = &match_key[expansion_key.len()..]; - best_key = expansion_key.to_string(); - } - } - } - if let Some(best_target) = best_target { - // 3. Return the result of PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions). - return self - .package_target_resolve( - package_url, - &best_key, - best_target, - Some(best_match), - is_imports, - conditions, - ctx, - ) - .await; - } - // 4. Return null. - Ok(None) - } - - /// PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions) - #[allow(clippy::too_many_arguments)] - fn package_target_resolve<'a>( - &'a self, - package_url: &'a Utf8Path, - target_key: &'a str, - target: &'a JSONValue, - pattern_match: Option<&'a str>, - is_imports: bool, - conditions: &'a [String], - ctx: &'a mut Ctx, - ) -> BoxFuture<'a, ResolveResult> { - let fut = async move { - fn normalize_string_target<'a>( - target_key: &'a str, - target: &'a str, - pattern_match: Option<&'a str>, - package_url: &Utf8Path, - ) -> Result, ResolveError> { - let target = if let Some(pattern_match) = pattern_match { - if !target_key.contains('*') && !target.contains('*') { - // enhanced-resolve behaviour - // TODO: [DEP0148] DeprecationWarning: Use of deprecated folder mapping "./dist/" in the "exports" field module resolution of the package at xxx/package.json. - if target_key.ends_with('/') && target.ends_with('/') { - Cow::Owned(format!("{target}{pattern_match}")) - } else { - return Err(ResolveError::InvalidPackageConfigDirectory( - package_url.join("package.json").into(), - )); - } - } else { - Cow::Owned(target.replace('*', pattern_match)) - } - } else { - Cow::Borrowed(target) - }; - Ok(target) - } - - match target { - // 1. If target is a String, then - JSONValue::String(target) => { - // 1. If target does not start with "./", then - if !target.starts_with("./") { - // 1. If isImports is false, or if target starts with "../" or "/", or if target is a valid URL, then - if !is_imports || target.starts_with("../") || target.starts_with('/') { - // 1. Throw an Invalid Package Target error. - return Err(ResolveError::InvalidPackageTarget( - target.to_string(), - target_key.to_string(), - package_url.join("package.json").into(), - )); - } - // 2. If patternMatch is a String, then - // 1. Return PACKAGE_RESOLVE(target with every instance of "*" replaced by patternMatch, packageURL + "/"). - let target = normalize_string_target(target_key, target, pattern_match, package_url)?; - let package_url = self.cache.value(package_url); - // // 3. Return PACKAGE_RESOLVE(target, packageURL + "/"). - return self.package_resolve(&package_url, &target, ctx).await; - } - - // 2. If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants, throw an Invalid Package Target error. - // 3. Let resolvedTarget be the URL resolution of the concatenation of packageURL and target. - // 4. Assert: resolvedTarget is contained in packageURL. - // 5. If patternMatch is null, then - let target = normalize_string_target(target_key, target, pattern_match, package_url)?; - if Utf8Path::new(target.as_ref()).is_invalid_exports_target() { - return Err(ResolveError::InvalidPackageTarget( - target.to_string(), - target_key.to_string(), - package_url.join("package.json").into(), - )); - } - let resolved_target = package_url.normalize_with(target.as_ref()); - // 6. If patternMatch split on "/" or "\" contains any "", ".", "..", or "node_modules" segments, case insensitive and including percent encoded variants, throw an Invalid Module Specifier error. - // 7. Return the URL resolution of resolvedTarget with every instance of "*" replaced with patternMatch. - let value = self.cache.value(&resolved_target); - return Ok(Some(value)); - } - // 2. Otherwise, if target is a non-null Object, then - JSONValue::Object(target) => { - // 1. If exports contains any index property keys, as defined in ECMA-262 6.1.7 Array Index, throw an Invalid Package Configuration error. - // 2. For each property p of target, in object insertion order as, - for (key, target_value) in target.iter() { - let key = key.to_string(); - // 1. If p equals "default" or conditions contains an entry for p, then - if key == "default" || conditions.contains(&key) { - // 1. Let targetValue be the value of the p property in target. - // 2. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions). - let resolved = self - .package_target_resolve( - package_url, - target_key, - target_value, - pattern_match, - is_imports, - conditions, - ctx, - ) - .await; - // 3. If resolved is equal to undefined, continue the loop. - if let Some(path) = resolved? { - // 4. Return resolved. - return Ok(Some(path)); - } - } - } - // 3. Return undefined. - return Ok(None); - } - // 3. Otherwise, if target is an Array, then - JSONValue::Array(targets) => { - // 1. If _target.length is zero, return null. - if targets.is_empty() { - // Note: return PackagePathNotExported has the same effect as return because there are no matches. - return Err(ResolveError::PackagePathNotExported( - pattern_match.unwrap_or(".").to_string(), - package_url.join("package.json").into(), - )); - } - // 2. For each item targetValue in target, do - for (i, target_value) in targets.iter().enumerate() { - // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions), continuing the loop on any Invalid Package Target error. - let resolved = self - .package_target_resolve( - package_url, - target_key, - target_value, - pattern_match, - is_imports, - conditions, - ctx, - ) - .await; - - if resolved.is_err() && i == targets.len() { - return resolved; - } - - // 2. If resolved is undefined, continue the loop. - if let Ok(Some(path)) = resolved { - // 3. Return resolved. - return Ok(Some(path)); - } - } - // 3. Return or throw the last fallback resolution null return or error. - // Note: see `resolved.is_err() && i == targets.len()` - } - JSONValue::Static(_) => {} - } - // 4. Otherwise, if target is null, return null. - Ok(None) - // 5. Otherwise throw an Invalid Package Target error. - }; - Box::pin(fut) - } - - // Returns (module, subpath) - // https://github.com/nodejs/node/blob/8f0f17e1e3b6c4e58ce748e06343c5304062c491/lib/internal/modules/esm/resolve.js#L688 - fn parse_package_specifier(specifier: &str) -> (&str, &str) { - let mut separator_index = specifier.as_bytes().iter().position(|b| *b == b'/'); - // let mut valid_package_name = true; - // let mut is_scoped = false; - if specifier.starts_with('@') { - // is_scoped = true; - if separator_index.is_none() || specifier.is_empty() { - // valid_package_name = false; - } else if let Some(index) = &separator_index { - separator_index = specifier.as_bytes()[*index + 1..] - .iter() - .position(|b| *b == b'/') - .map(|i| i + *index + 1); - } - } - let package_name = - separator_index.map_or(specifier, |separator_index| &specifier[..separator_index]); - - // TODO: https://github.com/nodejs/node/blob/8f0f17e1e3b6c4e58ce748e06343c5304062c491/lib/internal/modules/esm/resolve.js#L705C1-L714C1 - // Package name cannot have leading . and cannot have percent-encoding or - // \\ separators. - // if (RegExpPrototypeExec(invalidPackageNameRegEx, packageName) !== null) - // validPackageName = false; - - // if (!validPackageName) { - // throw new ERR_INVALID_MODULE_SPECIFIER( - // specifier, 'is not a valid package name', fileURLToPath(base)); - // } - let package_subpath = - separator_index.map_or("", |separator_index| &specifier[separator_index..]); - (package_name, package_subpath) - } - - /// PATTERN_KEY_COMPARE(keyA, keyB) - fn pattern_key_compare(key_a: &str, key_b: &str) -> Ordering { - if key_a.is_empty() { - return Ordering::Greater; - } - // 1. Assert: keyA ends with "/" or contains only a single "*". - debug_assert!( - key_a.ends_with('/') || key_a.match_indices('*').count() == 1, - "{key_a}" - ); - // 2. Assert: keyB ends with "/" or contains only a single "*". - debug_assert!( - key_b.ends_with('/') || key_b.match_indices('*').count() == 1, - "{key_b}" - ); - // 3. Let baseLengthA be the index of "*" in keyA plus one, if keyA contains "*", or the length of keyA otherwise. - let a_pos = key_a.chars().position(|c| c == '*'); - let base_length_a = a_pos.map_or(key_a.len(), |p| p + 1); - // 4. Let baseLengthB be the index of "*" in keyB plus one, if keyB contains "*", or the length of keyB otherwise. - let b_pos = key_b.chars().position(|c| c == '*'); - let base_length_b = b_pos.map_or(key_b.len(), |p| p + 1); - // 5. If baseLengthA is greater than baseLengthB, return -1. - if base_length_a > base_length_b { - return Ordering::Less; - } - // 6. If baseLengthB is greater than baseLengthA, return 1. - if base_length_b > base_length_a { - return Ordering::Greater; - } - // 7. If keyA does not contain "*", return 1. - if !key_a.contains('*') { - return Ordering::Greater; - } - // 8. If keyB does not contain "*", return -1. - if !key_b.contains('*') { - return Ordering::Less; - } - // 9. If the length of keyA is greater than the length of keyB, return -1. - if key_a.len() > key_b.len() { - return Ordering::Less; - } - // 10. If the length of keyB is greater than the length of keyA, return 1. - if key_b.len() > key_a.len() { - return Ordering::Greater; - } - // 11. Return 0. - Ordering::Equal - } - - fn strip_package_name<'a>(specifier: &'a str, package_name: &'a str) -> Option<&'a str> { - specifier - .strip_prefix(package_name) - .filter(|tail| tail.is_empty() || tail.starts_with(SLASH_START)) - } -} diff --git a/src/options.rs b/src/options.rs deleted file mode 100644 index b2e2f154..00000000 --- a/src/options.rs +++ /dev/null @@ -1,684 +0,0 @@ -use std::{ - fmt, - path::{Path, PathBuf}, - sync::Arc, -}; - -use camino::Utf8Path; - -use crate::path::PathUtil; - -/// Module Resolution Options -/// -/// Options are directly ported from [enhanced-resolve](https://github.com/webpack/enhanced-resolve#resolver-options). -/// -/// See [webpack resolve](https://webpack.js.org/configuration/resolve/) for information and examples -#[derive(Debug, Clone)] -pub struct ResolveOptions { - /// Path to TypeScript configuration file. - /// - /// Default `None` - pub tsconfig: Option, - - /// Create aliases to import or require certain modules more easily. - /// - /// An alias is used to replace a whole path or part of a path. - /// For example, to alias a commonly used `src/` folders: `vec![("@/src"), vec![AliasValue::Path("/path/to/src")]]` - /// - /// A trailing $ can also be added to the given object's keys to signify an exact match. - /// - /// See [webpack's `resolve.alias` documentation](https://webpack.js.org/configuration/resolve/#resolvealias) for a list of use cases. - pub alias: Alias, - - /// A list of alias fields in description files. - /// - /// Specify a field, such as `browser`, to be parsed according to [this specification](https://github.com/defunctzombie/package-browser-field-spec). - /// Can be a path to json object such as `["path", "to", "exports"]`. - /// - /// Default `[]` - pub alias_fields: Vec>, - - /// Condition names for exports field which defines entry points of a package. - /// - /// The key order in the exports field is significant. During condition matching, earlier entries have higher priority and take precedence over later entries. - /// - /// Default `[]` - pub condition_names: Vec, - - /// The JSON files to use for descriptions. (There was once a `bower.json`.) - /// - /// Default `["package.json"]` - pub description_files: Vec, - - /// Whether the resolver should check for the presence of a .pnp.cjs file up the dependency tree. - /// - /// Default `true` - #[cfg(feature = "yarn_pnp")] - pub enable_pnp: bool, - - /// Set to [EnforceExtension::Enabled] for [ESM Mandatory file extensions](https://nodejs.org/api/esm.html#mandatory-file-extensions). - /// - /// If `enforce_extension` is set to [EnforceExtension::Enabled], resolution will not allow extension-less files. - /// This means `require('./foo.js')` will resolve, while `require('./foo')` will not. - /// - /// The default value for `enforce_extension` is [EnforceExtension::Auto], which is changed upon initialization. - /// - /// It changes to [EnforceExtension::Enabled] if [ResolveOptions::extensions] contains an empty string; - /// otherwise, this value changes to [EnforceExtension::Disabled]. - /// - /// Explicitly set the value to [EnforceExtension::Disabled] to disable this automatic behavior. - /// - /// For reference, this behavior is aligned with `enhanced-resolve`. See . - pub enforce_extension: EnforceExtension, - - /// A list of exports fields in description files. - /// - /// Can be a path to a JSON object such as `["path", "to", "exports"]`. - /// - /// Default `[["exports"]]`. - pub exports_fields: Vec>, - - /// Fields from `package.json` which are used to provide the internal requests of a package - /// (requests starting with # are considered internal). - /// - /// Can be a path to a JSON object such as `["path", "to", "imports"]`. - /// - /// Default `[["imports"]]`. - pub imports_fields: Vec>, - - /// An object which maps extension to extension aliases. - /// - /// Default `{}` - pub extension_alias: Vec<(String, Vec)>, - - /// Attempt to resolve these extensions in order. - /// - /// If multiple files share the same name but have different extensions, - /// will resolve the one with the extension listed first in the array and skip the rest. - /// - /// All extensions must have a leading dot. - /// - /// Default `[".js", ".json", ".node"]` - pub extensions: Vec, - - /// Redirect module requests when normal resolving fails. - /// - /// Default `[]` - pub fallback: Alias, - - /// Request passed to resolve is already fully specified and extensions or main files are not resolved for it (they are still resolved for internal requests). - /// - /// See also webpack configuration [resolve.fullySpecified](https://webpack.js.org/configuration/module/#resolvefullyspecified) - /// - /// Default `false` - pub fully_specified: bool, - - /// A list of main fields in description files - /// - /// Default `["main"]`. - pub main_fields: Vec, - - /// The filename to be used while resolving directories. - /// - /// Default `["index"]` - pub main_files: Vec, - - /// A list of directories to resolve modules from, can be absolute path or folder name. - /// - /// Default `["node_modules"]` - pub modules: Vec, - - /// Resolve to a context instead of a file. - /// - /// Default `false` - pub resolve_to_context: bool, - - /// Prefer to resolve module requests as relative requests instead of using modules from node_modules directories. - /// - /// Default `false` - pub prefer_relative: bool, - - /// Prefer to resolve server-relative urls as absolute paths before falling back to resolve in ResolveOptions::roots. - /// - /// Default `false` - pub prefer_absolute: bool, - - /// A list of resolve restrictions to restrict the paths that a request can be resolved on. - /// - /// Default `[]` - pub restrictions: Vec, - - /// A list of directories where requests of server-relative URLs (starting with '/') are resolved. - /// On non-Windows systems these requests are resolved as an absolute path first. - /// - /// Default `[]` - pub roots: Vec, - - /// Whether to resolve symlinks to their symlinked location. - /// When enabled, symlinked resources are resolved to their real path, not their symlinked location. - /// Note that this may cause module resolution to fail when using tools that symlink packages (like npm link). - /// - /// Default `true` - pub symlinks: bool, - - /// Whether to parse [module.builtinModules](https://nodejs.org/api/module.html#modulebuiltinmodules) or not. - /// For example, "zlib" will throw [crate::ResolveError::Builtin] when set to true. - /// - /// Default `false` - pub builtin_modules: bool, - - /// When enabled, the resolver also searches - /// [`NODE_PATH`](https://nodejs.org/api/modules.html#loading-from-the-global-folders) - /// entries after `node_modules`. Callers can decide when to enable it - /// (e.g. only for CJS dependency types). - /// - /// Default `false` - pub node_path: bool, -} - -impl ResolveOptions { - /// ## Examples - /// - /// ``` - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_condition_names(&["bar"]); - /// assert_eq!(options.condition_names, vec!["bar".to_string()]) - /// ``` - #[must_use] - pub fn with_condition_names(mut self, names: &[&str]) -> Self { - self.condition_names = names - .iter() - .map(ToString::to_string) - .collect::>(); - self - } - - /// ## Examples - /// - /// ``` - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_builtin_modules(false); - /// assert_eq!(options.builtin_modules, false) - /// ``` - #[must_use] - pub fn with_builtin_modules(mut self, flag: bool) -> Self { - self.builtin_modules = flag; - self - } - - /// Adds a single root to the options - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_root("foo"); - /// assert_eq!(options.roots, vec![PathBuf::from("foo")]) - /// ``` - #[must_use] - pub fn with_root>(mut self, root: P) -> Self { - self.roots.push(root.as_ref().to_path_buf()); - self - } - - /// Adds a single extension to the list of extensions - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_extension("jsonc"); - /// assert!(options.extensions.contains(&"jsonc".to_string())); - /// ``` - #[must_use] - pub fn with_extension>(mut self, extension: S) -> Self { - self.extensions.push(extension.into()); - self - } - - /// Adds a single main field to the list of fields - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_main_field("something"); - /// assert!(options.main_fields.contains(&"something".to_string())); - /// ``` - #[must_use] - pub fn with_main_field>(mut self, field: S) -> Self { - self.main_fields.push(field.into()); - self - } - - /// Changes how the extension should be treated - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::{EnforceExtension, ResolveOptions}; - /// - /// let options = ResolveOptions::default().with_force_extension(EnforceExtension::Enabled); - /// assert_eq!(options.enforce_extension, EnforceExtension::Enabled); - /// ``` - #[must_use] - pub fn with_force_extension(mut self, enforce_extension: EnforceExtension) -> Self { - self.enforce_extension = enforce_extension; - self - } - - /// Sets the value for [ResolveOptions::fully_specified] - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_fully_specified(true); - /// assert_eq!(options.fully_specified, true); - /// ``` - #[must_use] - pub fn with_fully_specified(mut self, fully_specified: bool) -> Self { - self.fully_specified = fully_specified; - self - } - /// Sets the value for [ResolveOptions::prefer_relative] - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_prefer_relative(true); - /// assert_eq!(options.prefer_relative, true); - /// ``` - #[must_use] - pub fn with_prefer_relative(mut self, flag: bool) -> Self { - self.prefer_relative = flag; - self - } - /// Sets the value for [ResolveOptions::prefer_absolute] - /// - /// ## Examples - /// - /// ``` - /// use std::path::{Path, PathBuf}; - /// - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_prefer_absolute(true); - /// assert_eq!(options.prefer_absolute, true); - /// ``` - #[must_use] - pub fn with_prefer_absolute(mut self, flag: bool) -> Self { - self.prefer_absolute = flag; - self - } - - /// Changes the value of [ResolveOptions::symlinks] - /// - /// ## Examples - /// - /// ``` - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_symbolic_link(false); - /// assert_eq!(options.symlinks, false); - /// ``` - #[must_use] - pub fn with_symbolic_link(mut self, flag: bool) -> Self { - self.symlinks = flag; - self - } - - /// Adds a module to [ResolveOptions::modules] - /// - /// ## Examples - /// - /// ``` - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_module("module"); - /// assert!(options.modules.contains(&"module".to_string())); - /// ``` - #[must_use] - pub fn with_module>(mut self, module: M) -> Self { - self.modules.push(module.into()); - self - } - - /// Adds a main file to [ResolveOptions::main_files] - /// - /// ## Examples - /// - /// ``` - /// use rspack_resolver::ResolveOptions; - /// - /// let options = ResolveOptions::default().with_main_file("foo"); - /// assert!(options.main_files.contains(&"foo".to_string())); - /// ``` - #[must_use] - pub fn with_main_file>(mut self, module: M) -> Self { - self.main_files.push(module.into()); - self - } - - pub(crate) fn sanitize(mut self) -> Self { - debug_assert!( - self - .extensions - .iter() - .filter(|e| !e.is_empty()) - .all(|e| e.starts_with('.')), - "All extensions must start with a leading dot" - ); - // Set `enforceExtension` to `true` when [ResolveOptions::extensions] contains an empty string. - // See - if self.enforce_extension == EnforceExtension::Auto { - if !self.extensions.is_empty() && self.extensions.iter().any(String::is_empty) { - self.enforce_extension = EnforceExtension::Enabled; - } else { - self.enforce_extension = EnforceExtension::Disabled; - } - } - for restriction in &mut self.restrictions { - if let Restriction::Path(path) = restriction { - let normalized = Utf8Path::from_path(path).map(PathUtil::normalize); - if let Some(normalized) = normalized.filter(|p| !p.as_str().is_empty()) { - *path = normalized.into_std_path_buf(); - } - } - } - self - } -} - -/// Value for [ResolveOptions::enforce_extension] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum EnforceExtension { - Auto, - Enabled, - Disabled, -} - -impl EnforceExtension { - pub const fn is_auto(&self) -> bool { - matches!(self, Self::Auto) - } - - pub const fn is_enabled(&self) -> bool { - matches!(self, Self::Enabled) - } - - pub const fn is_disabled(&self) -> bool { - matches!(self, Self::Disabled) - } -} - -/// Alias for [ResolveOptions::alias] and [ResolveOptions::fallback] -pub type Alias = Vec<(String, Vec)>; - -/// Alias Value for [ResolveOptions::alias] and [ResolveOptions::fallback] -#[derive(Debug, Clone, Hash, PartialEq, Eq)] -pub enum AliasValue { - /// The path value - Path(String), - - /// The `false` value - Ignore, -} - -impl From for AliasValue -where - S: Into, -{ - fn from(value: S) -> Self { - Self::Path(value.into()) - } -} - -/// Value for [ResolveOptions::restrictions] -#[derive(Clone)] -pub enum Restriction { - Path(PathBuf), - Fn(Arc bool + Sync + Send>), -} - -impl std::fmt::Debug for Restriction { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Path(path) => write!(f, "Path({path:?})"), - Self::Fn(_) => write!(f, "Fn()"), - } - } -} - -/// Tsconfig Options for [ResolveOptions::tsconfig] -/// -/// Derived from [tsconfig-paths-webpack-plugin](https://github.com/dividab/tsconfig-paths-webpack-plugin#options) -#[derive(Debug, Clone)] -pub struct TsconfigOptions { - /// Allows you to specify where to find the TypeScript configuration file. - /// You may provide - /// * a relative path to the configuration file. It will be resolved relative to cwd. - /// * an absolute path to the configuration file. - pub config_file: PathBuf, - - /// Support for Typescript Project References. - pub references: TsconfigReferences, -} - -/// Configuration for [TsconfigOptions::references] -#[derive(Debug, Clone)] -pub enum TsconfigReferences { - Disabled, - /// Use the `references` field from tsconfig of `config_file`. - Auto, - /// Manually provided relative or absolute path. - Paths(Vec), -} - -impl Default for ResolveOptions { - fn default() -> Self { - Self { - tsconfig: None, - alias: vec![], - alias_fields: vec![], - condition_names: vec![], - description_files: vec!["package.json".into()], - enforce_extension: EnforceExtension::Auto, - extension_alias: vec![], - exports_fields: vec![vec!["exports".into()]], - imports_fields: vec![vec!["imports".into()]], - extensions: vec![".js".into(), ".json".into(), ".node".into()], - fallback: vec![], - fully_specified: false, - main_fields: vec!["main".into()], - main_files: vec!["index".into()], - modules: vec!["node_modules".into()], - #[cfg(feature = "yarn_pnp")] - enable_pnp: true, - resolve_to_context: false, - prefer_relative: false, - prefer_absolute: false, - restrictions: vec![], - roots: vec![], - symlinks: true, - builtin_modules: false, - node_path: false, - } - } -} - -// For tracing -impl fmt::Display for ResolveOptions { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if let Some(tsconfig) = &self.tsconfig { - write!(f, "tsconfig:{tsconfig:?},")?; - } - if !self.alias.is_empty() { - write!(f, "alias:{:?},", self.alias)?; - } - if !self.alias_fields.is_empty() { - write!(f, "alias_fields:{:?},", self.alias_fields)?; - } - if !self.condition_names.is_empty() { - write!(f, "condition_names:{:?},", self.condition_names)?; - } - if self.enforce_extension.is_enabled() { - write!(f, "enforce_extension:{:?},", self.enforce_extension)?; - } - if !self.exports_fields.is_empty() { - write!(f, "exports_fields:{:?},", self.exports_fields)?; - } - if !self.imports_fields.is_empty() { - write!(f, "imports_fields:{:?},", self.imports_fields)?; - } - if !self.extension_alias.is_empty() { - write!(f, "extension_alias:{:?},", self.extension_alias)?; - } - if !self.extensions.is_empty() { - write!(f, "extensions:{:?},", self.extensions)?; - } - if !self.fallback.is_empty() { - write!(f, "fallback:{:?},", self.fallback)?; - } - if self.fully_specified { - write!(f, "fully_specified:{:?},", self.fully_specified)?; - } - if !self.main_fields.is_empty() { - write!(f, "main_fields:{:?},", self.main_fields)?; - } - if !self.main_files.is_empty() { - write!(f, "main_files:{:?},", self.main_files)?; - } - if !self.modules.is_empty() { - write!(f, "modules:{:?},", self.modules)?; - } - if self.resolve_to_context { - write!(f, "resolve_to_context:{:?},", self.resolve_to_context)?; - } - if self.prefer_relative { - write!(f, "prefer_relative:{:?},", self.prefer_relative)?; - } - if self.prefer_absolute { - write!(f, "prefer_absolute:{:?},", self.prefer_absolute)?; - } - if !self.restrictions.is_empty() { - write!(f, "restrictions:{:?},", self.restrictions)?; - } - if !self.roots.is_empty() { - write!(f, "roots:{:?},", self.roots)?; - } - if self.symlinks { - write!(f, "symlinks:{:?},", self.symlinks)?; - } - if self.builtin_modules { - write!(f, "builtin_modules:{:?},", self.builtin_modules)?; - } - if self.node_path { - write!(f, "node_path:{:?},", self.node_path)?; - } - Ok(()) - } -} - -#[cfg(test)] -mod test { - use std::path::PathBuf; - - use super::{ - AliasValue, EnforceExtension, ResolveOptions, Restriction, TsconfigOptions, TsconfigReferences, - }; - - #[test] - fn enforce_extension() { - assert!(EnforceExtension::Auto.is_auto()); - assert!(!EnforceExtension::Enabled.is_auto()); - assert!(!EnforceExtension::Disabled.is_auto()); - - assert!(!EnforceExtension::Auto.is_enabled()); - assert!(EnforceExtension::Enabled.is_enabled()); - assert!(!EnforceExtension::Disabled.is_enabled()); - - assert!(!EnforceExtension::Auto.is_disabled()); - assert!(!EnforceExtension::Enabled.is_disabled()); - assert!(EnforceExtension::Disabled.is_disabled()); - } - - #[test] - fn display() { - let options = ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: PathBuf::from("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - alias: vec![("a".into(), vec![AliasValue::Ignore])], - alias_fields: vec![vec!["browser".into()]], - condition_names: vec!["require".into()], - enforce_extension: EnforceExtension::Enabled, - extension_alias: vec![(".js".into(), vec![".ts".into()])], - exports_fields: vec![vec!["exports".into()]], - imports_fields: vec![vec!["imports".into()]], - fallback: vec![("fallback".into(), vec![AliasValue::Ignore])], - fully_specified: true, - resolve_to_context: true, - prefer_relative: true, - prefer_absolute: true, - restrictions: vec![Restriction::Path(PathBuf::from("restrictions"))], - roots: vec![PathBuf::from("roots")], - builtin_modules: true, - ..ResolveOptions::default() - }; - - let expected = r#"tsconfig:TsconfigOptions { config_file: "tsconfig.json", references: Auto },alias:[("a", [Ignore])],alias_fields:[["browser"]],condition_names:["require"],enforce_extension:Enabled,exports_fields:[["exports"]],imports_fields:[["imports"]],extension_alias:[(".js", [".ts"])],extensions:[".js", ".json", ".node"],fallback:[("fallback", [Ignore])],fully_specified:true,main_fields:["main"],main_files:["index"],modules:["node_modules"],resolve_to_context:true,prefer_relative:true,prefer_absolute:true,restrictions:[Path("restrictions")],roots:["roots"],symlinks:true,builtin_modules:true,"#; - assert_eq!(format!("{options}"), expected); - - let options = ResolveOptions { - alias: vec![], - alias_fields: vec![], - builtin_modules: false, - condition_names: vec![], - description_files: vec![], - #[cfg(feature = "yarn_pnp")] - enable_pnp: true, - enforce_extension: EnforceExtension::Disabled, - exports_fields: vec![], - extension_alias: vec![], - extensions: vec![], - fallback: vec![], - fully_specified: false, - imports_fields: vec![], - main_fields: vec![], - main_files: vec![], - modules: vec![], - prefer_absolute: false, - prefer_relative: false, - resolve_to_context: false, - restrictions: vec![], - roots: vec![], - symlinks: false, - tsconfig: None, - node_path: false, - }; - - assert_eq!(format!("{options}"), ""); - } -} diff --git a/src/package_json/mod.rs b/src/package_json/mod.rs deleted file mode 100644 index 91459a57..00000000 --- a/src/package_json/mod.rs +++ /dev/null @@ -1,59 +0,0 @@ -mod simd; - -use std::fmt::Display; - -pub use simd::*; - -#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] -pub enum ModuleType { - #[default] - CommonJs, - Module, -} - -impl Display for ModuleType { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::Module => write!(f, "module"), - Self::CommonJs => write!(f, "commonjs"), - } - } -} - -impl TryFrom<&str> for ModuleType { - type Error = &'static str; - fn try_from(value: &str) -> Result { - match value { - "module" => Ok(Self::Module), - "commonjs" => Ok(Self::CommonJs), - _ => Err("Invalid module type"), - } - } -} -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum SideEffects { - Bool(bool), - String(String), - Array(Vec), -} - -pub fn off_to_location(json: &str, offset: usize) -> (usize, usize) { - let mut line = 0; - let mut col = 0; - let mut current_offset = 0; - for ch in json.chars() { - let b = ch.len_utf8(); - current_offset += b; - if ch == '\n' { - line += 1; - col = 0; - } else { - col += b; - } - - if current_offset >= offset { - break; - } - } - (line + 1, col + 1) -} diff --git a/src/package_json/simd.rs b/src/package_json/simd.rs deleted file mode 100644 index d9759856..00000000 --- a/src/package_json/simd.rs +++ /dev/null @@ -1,426 +0,0 @@ -//! package.json definitions -//! -//! Code related to export field are copied from [Parcel's resolver](https://github.com/parcel-bundler/parcel/blob/v2/packages/utils/node-resolver-rs/src/package_json.rs) - -use std::{ - fmt::{Debug, Formatter}, - marker::PhantomData, - path::{Path, PathBuf}, -}; - -use camino::Utf8Path; -use serde::de::{Deserialize, Deserializer, IgnoredAny, MapAccess, Visitor}; -use simd_json::{ - borrowed::{Object, Value}, - prelude::*, - serde::from_slice, - to_borrowed_value, BorrowedValue, Error as SimdParseError, ObjectHasher, -}; - -use crate::{path::PathUtil, ResolveError}; - -pub type JSONMap<'a> = simd_json::borrowed::Object<'a>; - -#[cfg(feature = "package_json_raw_json_api")] -use simd_json::serde::from_refborrowed_value; -pub use simd_json::BorrowedValue as JSONValue; - -use crate::package_json::{ModuleType, SideEffects}; - -/// Top-level `package.json` fields the resolver never reads. They are skipped -/// while deserializing so their (often large) sub-trees are never built into the -/// retained DOM. This is the same set the `package_json_raw_json_api` path used -/// to strip after parsing — only now they are never allocated in the first place. -const SKIPPED_FIELDS: [&str; 7] = [ - "dependencies", - "devDependencies", - "peerDependencies", - "optionalDependencies", - "scripts", - "description", - "keywords", -]; - -/// A `package.json` object with [`SKIPPED_FIELDS`] dropped during deserialization. -/// Built exactly like simd-json's own object visitor (borrowed keys + values), -/// only short-circuiting the skipped keys to `IgnoredAny` so their values are -/// drained without allocating any container. -struct FilteredObject<'a>(Object<'a>); - -impl<'de> Deserialize<'de> for FilteredObject<'de> { - fn deserialize>(deserializer: D) -> Result { - struct ObjectVisitor; - - impl<'de> Visitor<'de> for ObjectVisitor { - type Value = FilteredObject<'de>; - - fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { - formatter.write_str("a package.json object") - } - - fn visit_map>(self, mut map: A) -> Result { - let size = map.size_hint().unwrap_or_default(); - let mut object = Object::with_capacity_and_hasher(size, ObjectHasher::default()); - while let Some(key) = map.next_key::<&str>()? { - if SKIPPED_FIELDS.contains(&key) { - map.next_value::()?; - } else { - object.insert(key.into(), map.next_value::()?); - } - } - Ok(FilteredObject(object)) - } - } - - deserializer.deserialize_map(ObjectVisitor) - } -} - -/// Whether the first non-whitespace byte is `{`, i.e. the JSON root is an object. -fn is_object_root(buf: &[u8]) -> bool { - buf.iter().find(|b| !b.is_ascii_whitespace()) == Some(&b'{') -} - -pub struct JSONCell { - value: BorrowedValue<'static>, - buf: Vec, - _invariant: PhantomData<&'static str>, -} - -impl JSONCell { - pub fn try_new(mut buf: Vec) -> Result { - // Every real package.json is a JSON object; parse those field-by-field so the - // skipped fields never allocate. Non-object roots keep the generic parse so - // behavior (e.g. an empty `PackageJson` for a malformed file) is unchanged. - let value = if is_object_root(&buf) { - Value::Object(Box::new(from_slice::(&mut buf)?.0)) - } else { - to_borrowed_value(&mut buf)? - }; - - // SAFETY: `value` only borrows from `buf`, which is moved into and owned by the - // returned `JSONCell`, so the borrowed data outlives every `borrow_dependent`. - let value = unsafe { std::mem::transmute::, BorrowedValue<'static>>(value) }; - - Ok(Self { - value, - buf, - _invariant: PhantomData, - }) - } - - pub fn borrow_dependent(&self) -> &JSONValue<'_> { - &self.value - } -} - -impl Debug for JSONCell { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - let str = String::from_utf8_lossy(&self.buf); - f.write_fmt(format_args!("JSONCell({str})")) - } -} - -impl Default for JSONCell { - fn default() -> Self { - Self { - value: JSONValue::Static(StaticNode::Null), - buf: Vec::new(), - _invariant: PhantomData, - } - } -} - -/// Deserialized package.json -#[derive(Debug, Default)] -pub struct PackageJson { - /// Path to `package.json`. Contains the `package.json` filename. - pub path: PathBuf, - - /// Realpath to `package.json`. Contains the `package.json` filename. - pub realpath: PathBuf, - - /// The "name" field defines your package's name. - /// The "name" field can be used in addition to the "exports" field to self-reference a package using its name. - /// - /// - pub name: Option, - - /// The "type" field. - /// - /// - pub r#type: Option, - - /// The "sideEffects" field. - /// - /// - pub side_effects: Option, - - raw_json: std::sync::Arc, - - #[cfg(feature = "package_json_raw_json_api")] - serde_json: std::sync::Arc, -} - -const BOM: [u8; 3] = [0xEF, 0xBB, 0xBF]; -#[derive(Debug, PartialEq, Eq)] -pub struct ParseError { - pub(crate) message: String, - pub(crate) index: usize, -} - -impl ParseError { - pub fn index(&self) -> usize { - self.index - } - pub fn error(&self) -> &str { - &self.message - } -} - -impl From for ParseError { - fn from(value: SimdParseError) -> Self { - Self { - index: value.index(), - message: format!("{:?}", value.error()).to_lowercase(), - } - } -} - -impl PackageJson { - /// # Panics - /// # Errors - pub(crate) fn parse(path: PathBuf, realpath: PathBuf, json: Vec) -> Result { - if json.starts_with(&BOM) { - return Err(ParseError { - message: "BOM character found".to_string(), - index: 0, - }); - } - - let json_cell = JSONCell::try_new(json).map_err(ParseError::from)?; - - let mut package_json = Self::default(); - if let Some(json_object) = json_cell.borrow_dependent().as_object() { - package_json.name = json_object - .get("name") - .and_then(|field| field.as_str()) - .map(ToString::to_string); - - package_json.r#type = json_object - .get("type") - .and_then(|str| str.as_str()) - .and_then(|str| str.try_into().ok()); - - package_json.side_effects = json_object - .get("sideEffects") - .and_then(|value| SideEffects::try_from(value).ok()); - - #[cfg(feature = "package_json_raw_json_api")] - { - package_json.init_serde_json(json_object); - } - } - - package_json.path = path; - package_json.realpath = realpath; - package_json.raw_json = std::sync::Arc::new(json_cell); - - Ok(package_json) - } - - #[cfg(feature = "package_json_raw_json_api")] - fn init_serde_json(&mut self, value: &JSONMap) { - let mut json_map = serde_json::value::Map::with_capacity(9); - - for (key, value) in value { - if let Ok(v) = from_refborrowed_value(value) { - json_map.insert(key.to_string(), v); - } - } - self.serde_json = std::sync::Arc::new(serde_json::Value::Object(json_map)); - } - - fn get_value_by_paths<'a>(fields: &'a JSONMap, paths: &[String]) -> Option<&'a JSONValue<'a>> { - if paths.is_empty() { - return None; - } - - let mut value = fields.get(paths[0].as_str())?; - for key in paths.iter().skip(1) { - if let Some(inner_value) = value.as_object().and_then(|o| o.get(key.as_str())) { - value = inner_value; - } else { - return None; - } - } - Some(value) - } - - /// Raw serde json value of `package.json`. - /// - /// This is currently used in Rspack for: - /// * getting the `sideEffects` field - /// * query in - search on GitHub indicates query on the `type` field. - /// - /// To reduce overall memory consumption, large fields that useless for pragmatic use are removed. - /// They are: `description`, `keywords`, `scripts`, - /// `dependencies` and `devDependencies`, `peerDependencies`, `optionalDependencies`. - #[cfg(feature = "package_json_raw_json_api")] - pub fn raw_json(&self) -> &std::sync::Arc { - &self.serde_json - } - - /// Directory to `package.json` - /// - /// # Panics - /// - /// * When the package.json path is misconfigured. - pub fn directory(&self) -> &Path { - debug_assert!(self - .realpath - .file_name() - .is_some_and(|x| x == "package.json")); - self.realpath.parent().unwrap() - } - - /// The "main" field defines the entry point of a package when imported by name via a node_modules lookup. Its value is a path. - /// - /// When a package has an "exports" field, this will take precedence over the "main" field when importing the package by name. - /// - /// Values are dynamically retrieved from [ResolveOptions::main_fields]. - /// - /// - pub(crate) fn main_fields<'a>( - &'a self, - main_fields: &'a [String], - ) -> impl Iterator + 'a { - main_fields.iter().filter_map(|main_field| { - self - .raw_json - .borrow_dependent() - .get_str(main_field.as_str()) - }) - } - - /// The "exports" field allows defining the entry points of a package when imported by name loaded either via a node_modules lookup or a self-reference to its own name. - /// - /// - pub(crate) fn exports_fields<'a>( - &'a self, - exports_fields: &'a [Vec], - ) -> impl Iterator> + 'a { - exports_fields.iter().filter_map(|object_path| { - self - .raw_json - .borrow_dependent() - .as_object() - .and_then(|json_object| Self::get_value_by_paths(json_object, object_path)) - }) - } - - /// In addition to the "exports" field, there is a package "imports" field to create private mappings that only apply to import specifiers from within the package itself. - /// - /// - pub(crate) fn imports_fields<'a>( - &'a self, - imports_fields: &'a [Vec], - ) -> impl Iterator> + 'a { - imports_fields.iter().filter_map(|object_path| { - self - .raw_json - .borrow_dependent() - .as_object() - .and_then(|json_object| Self::get_value_by_paths(json_object, object_path)) - .and_then(|value| value.as_object()) - }) - } - - /// The "browser" field is provided by a module author as a hint to javascript bundlers or component tools when packaging modules for client side use. - /// Multiple values are configured by [ResolveOptions::alias_fields]. - /// - /// - fn browser_fields<'a>( - &'a self, - alias_fields: &'a [Vec], - ) -> impl Iterator> + 'a { - alias_fields.iter().filter_map(|object_path| { - self - .raw_json - .borrow_dependent() - .as_object() - .and_then(|json_object| Self::get_value_by_paths(json_object, object_path)) - // Only object is valid, all other types are invalid - // https://github.com/webpack/enhanced-resolve/blob/3a28f47788de794d9da4d1702a3a583d8422cd48/lib/AliasFieldPlugin.js#L44-L52 - .and_then(|value| value.as_object()) - }) - } - - /// Resolve the request string for this package.json by looking at the `browser` field. - /// - /// # Errors - /// - /// * Returns [ResolveError::Ignored] for `"path": false` in `browser` field. - pub(crate) fn resolve_browser_field<'a>( - &'a self, - path: &Utf8Path, - request: Option<&str>, - alias_fields: &'a [Vec], - ) -> Result, ResolveError> { - for object in self.browser_fields(alias_fields) { - if let Some(request) = request { - if let Some(value) = object.get(request) { - return Self::alias_value(path, value); - } - } else { - let dir = Utf8Path::from_path(self.path.parent().unwrap()).expect("path should be UTF-8"); - for (key, value) in object { - let joined = dir.normalize_with(key.to_string()); - if joined == path { - return Self::alias_value(path, value); - } - } - } - } - Ok(None) - } - - fn alias_value<'a>( - key: &Utf8Path, - value: &'a JSONValue, - ) -> Result, ResolveError> { - match value { - JSONValue::String(value) => Ok(Some(value)), - JSONValue::Static(sn) => { - if matches!(sn.as_bool(), Some(false)) { - Err(ResolveError::Ignored(key.as_std_path().to_path_buf())) - } else { - Ok(None) - } - } - _ => Ok(None), - } - } -} - -impl<'a> TryFrom<&'a JSONValue<'a>> for SideEffects { - type Error = &'static str; - fn try_from(value: &'a JSONValue<'a>) -> Result { - match value { - Value::Static(StaticNode::Bool(b)) => Ok(Self::Bool(*b)), - Value::String(str) => Ok(Self::String(str.to_string())), - Value::Array(arr) => { - let mut vec = Vec::with_capacity(arr.len()); - for item in arr.iter() { - if let Value::String(s) = item { - vec.push(s.to_string()); - } else { - return Err("Invalid sideEffects array item, expected string"); - } - } - Ok(Self::Array(vec)) - } - _ => Err("Invalid sideEffects value, expected bool, string or array of strings"), - } - } -} diff --git a/src/path.rs b/src/path.rs deleted file mode 100644 index ad9b7d77..00000000 --- a/src/path.rs +++ /dev/null @@ -1,140 +0,0 @@ -//! Path Utilities -//! -//! Code adapted from the following libraries -//! * [path-absolutize](https://docs.rs/path-absolutize) -//! * [normalize_path](https://docs.rs/normalize-path) -use camino::{Utf8Component, Utf8Path, Utf8PathBuf}; - -pub const SLASH_START: &[char; 2] = &['/', '\\']; - -/// Extension trait to add path normalization to camino's [`Utf8Path`]. -pub trait PathUtil { - /// Normalize this path without performing I/O. - /// - /// All redundant separator and up-level references are collapsed. - /// - /// However, this does not resolve links. - fn normalize(&self) -> Utf8PathBuf; - - /// Normalize with subpath assuming this path is normalized without performing I/O. - /// - /// All redundant separator and up-level references are collapsed. - /// - /// However, this does not resolve links. - fn normalize_with>(&self, subpath: P) -> Utf8PathBuf; - - /// Defined in ESM PACKAGE_TARGET_RESOLVE - /// If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants - fn is_invalid_exports_target(&self) -> bool; -} - -impl PathUtil for Utf8Path { - // https://github.com/parcel-bundler/parcel/blob/e0b99c2a42e9109a9ecbd6f537844a1b33e7faf5/packages/utils/node-resolver-rs/src/path.rs#L7 - fn normalize(&self) -> Utf8PathBuf { - let mut components = self.components().peekable(); - let mut ret = if let Some(c @ Utf8Component::Prefix(..)) = components.peek() { - let buf = Utf8PathBuf::from(c.as_str()); - components.next(); - buf - } else { - Utf8PathBuf::new() - }; - - for component in components { - match component { - Utf8Component::Prefix(..) => unreachable!("Path {:?}", self), - Utf8Component::RootDir => { - ret.push(component.as_str()); - } - Utf8Component::CurDir => {} - Utf8Component::ParentDir => { - ret.pop(); - } - Utf8Component::Normal(c) => { - ret.push(c); - } - } - } - - ret - } - - // https://github.com/parcel-bundler/parcel/blob/e0b99c2a42e9109a9ecbd6f537844a1b33e7faf5/packages/utils/node-resolver-rs/src/path.rs#L37 - fn normalize_with>(&self, subpath: B) -> Utf8PathBuf { - let subpath = subpath.as_ref(); - - let mut components = subpath.components(); - - let Some(head) = components.next() else { - return subpath.to_path_buf(); - }; - - if matches!(head, Utf8Component::Prefix(..) | Utf8Component::RootDir) { - return subpath.to_path_buf(); - } - - let mut ret = self.to_path_buf(); - for component in std::iter::once(head).chain(components) { - match component { - Utf8Component::CurDir => {} - Utf8Component::ParentDir => { - ret.pop(); - } - Utf8Component::Normal(c) => { - ret.push(c); - } - Utf8Component::Prefix(..) | Utf8Component::RootDir => { - unreachable!("Path {:?} Subpath {:?}", self, subpath) - } - } - } - - ret - } - - fn is_invalid_exports_target(&self) -> bool { - self.components().enumerate().any(|(index, c)| match c { - Utf8Component::ParentDir => true, - Utf8Component::CurDir => index > 0, - Utf8Component::Normal(c) => c.eq_ignore_ascii_case("node_modules"), - _ => false, - }) - } -} - -// https://github.com/webpack/enhanced-resolve/blob/main/test/path.test.js -#[tokio::test] -async fn is_invalid_exports_target() { - let test_cases = [ - "../a.js", - "../", - "./a/b/../../../c.js", - "./a/b/../../../", - "./../../c.js", - "./../../", - "./a/../b/../../c.js", - "./a/../b/../../", - "./././../", - ]; - - for case in test_cases { - assert!(Utf8Path::new(case).is_invalid_exports_target(), "{case}"); - } - - assert!(!Utf8Path::new("C:").is_invalid_exports_target()); - assert!(!Utf8Path::new("/").is_invalid_exports_target()); -} - -#[tokio::test] -async fn normalize() { - assert_eq!( - Utf8Path::new("/foo/.././foo/").normalize(), - Utf8Path::new("/foo") - ); - assert_eq!(Utf8Path::new("C://").normalize(), Utf8Path::new("C://")); - assert_eq!(Utf8Path::new("C:").normalize(), Utf8Path::new("C:")); - assert_eq!( - Utf8Path::new(r"\\server\share").normalize(), - Utf8Path::new(r"\\server\share") - ); -} diff --git a/src/resolution.rs b/src/resolution.rs deleted file mode 100644 index 0acab18f..00000000 --- a/src/resolution.rs +++ /dev/null @@ -1,95 +0,0 @@ -use std::{ - fmt, - path::{Path, PathBuf}, - sync::Arc, -}; - -use camino::Utf8PathBuf; - -use crate::package_json::PackageJson; - -/// The final path resolution with optional `?query` and `#fragment` -#[derive(Clone)] -pub struct Resolution { - pub(crate) path: Utf8PathBuf, - - /// path query `?query`, contains `?`. - pub(crate) query: Option, - - /// path fragment `#query`, contains `#`. - pub(crate) fragment: Option, - - pub(crate) package_json: Option>, -} - -impl fmt::Debug for Resolution { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("Resolution") - .field("path", &self.path) - .field("query", &self.query) - .field("fragment", &self.fragment) - .field("package_json", &self.package_json.as_ref().map(|p| &p.path)) - .finish() - } -} - -impl PartialEq for Resolution { - fn eq(&self, other: &Self) -> bool { - self.path == other.path && self.query == other.query && self.fragment == other.fragment - } -} -impl Eq for Resolution {} - -impl Resolution { - /// Returns the path without query and fragment - pub fn path(&self) -> &Path { - self.path.as_std_path() - } - - /// Returns the path without query and fragment - pub fn into_path_buf(self) -> PathBuf { - self.path.into_std_path_buf() - } - - /// Returns the path query `?query`, contains the leading `?` - pub fn query(&self) -> Option<&str> { - self.query.as_deref() - } - - /// Returns the path fragment `#fragment`, contains the leading `#` - pub fn fragment(&self) -> Option<&str> { - self.fragment.as_deref() - } - - /// Returns serialized package_json - pub fn package_json(&self) -> Option<&Arc> { - self.package_json.as_ref() - } - - /// Returns the full path with query and fragment - pub fn full_path(&self) -> PathBuf { - let mut path = self.path.clone().into_string(); - if let Some(query) = &self.query { - path.push_str(query); - } - if let Some(fragment) = &self.fragment { - path.push_str(fragment); - } - PathBuf::from(path) - } -} - -#[tokio::test] -async fn test() { - let resolution = Resolution { - path: "foo".into(), - query: Some("?query".to_string()), - fragment: Some("#fragment".to_string()), - package_json: None, - }; - assert_eq!(resolution.path(), Path::new("foo")); - assert_eq!(resolution.query(), Some("?query")); - assert_eq!(resolution.fragment(), Some("#fragment")); - assert_eq!(resolution.full_path(), PathBuf::from("foo?query#fragment")); - assert_eq!(resolution.into_path_buf(), PathBuf::from("foo")); -} diff --git a/src/resolver_path.rs b/src/resolver_path.rs deleted file mode 100644 index 45e3883f..00000000 --- a/src/resolver_path.rs +++ /dev/null @@ -1,216 +0,0 @@ -#[cfg(unix)] -use std::os::unix::ffi::OsStrExt; -use std::{ - fmt, - hash::{Hash, Hasher}, - ops::Deref, - path::{Path, PathBuf}, - sync::Arc, -}; - -use camino::{Utf8Path, Utf8PathBuf}; -use rustc_hash::FxHasher; - -/// A path returned in [`crate::ResolveContext`] dependencies, paired with a -/// precomputed `FxHash` of the path bytes. -/// -/// Downstream consumers (rspack) place these into hash collections keyed by -/// the precomputed hash, avoiding repeated hashing of long absolute paths on -/// every insert and lookup. -/// -/// Hash and equality are kept aligned per platform so the standard -/// `a == b ⇒ hash(a) == hash(b)` contract holds: -/// - On Unix, both hash and equality compare the raw `OsStr` bytes (fast bulk -/// `write`; matches the resolver's cache-side `Cache::value` hash). -/// - On other platforms, both go through `Path` (component-walked hash and -/// normalized equality), so e.g. `pack1/foo` and `pack1\\foo` are treated as -/// the same dependency on Windows — same behavior `PathBuf` had before. -#[derive(Clone)] -pub struct ResolverPath { - hash: u64, - path: Arc, -} - -impl ResolverPath { - pub fn new(path: Arc) -> Self { - let hash = hash_path(&path); - Self { hash, path } - } - - /// Construct without recomputing the hash. - /// - /// # Precondition - /// `hash` MUST equal `hash_path(path)`. Violating this breaks `HashSet`'s - /// bucketing invariant — entries become unfindable and deduplication stops - /// working. Not `unsafe` because the failure mode is a logic bug rather - /// than UB. - #[inline] - pub(crate) fn from_parts(hash: u64, path: Arc) -> Self { - Self { hash, path } - } - - #[inline] - pub fn as_path(&self) -> &Path { - &self.path - } - - #[inline] - pub fn as_arc(&self) -> &Arc { - &self.path - } - - #[inline] - pub fn into_arc(self) -> Arc { - self.path - } - - /// The precomputed `FxHash` of the path bytes. - #[inline] - pub fn precomputed_hash(&self) -> u64 { - self.hash - } -} - -/// Hash a path with `FxHasher`, matching the bytes-on-unix optimization used by -/// the resolver's internal cache so [`ResolverPath`] values constructed from a -/// `CachedPath` produce the same `u64` as values constructed from a `&Path`. -#[inline] -pub fn hash_path(path: &Path) -> u64 { - let mut hasher = FxHasher::default(); - // The std `Path::hash` impl walks components (utf8 split + per-segment - // write); a single bulk `write` of the raw bytes is materially cheaper on - // the resolver hot path. - #[cfg(unix)] - hasher.write(path.as_os_str().as_bytes()); - #[cfg(not(unix))] - path.hash(&mut hasher); - hasher.finish() -} - -impl Hash for ResolverPath { - #[inline] - fn hash(&self, state: &mut H) { - state.write_u64(self.hash); - } -} - -impl PartialEq for ResolverPath { - /// Mirror `hash_path`'s per-platform scheme so the `a == b ⇒ hash(a) == - /// hash(b)` invariant holds: raw `OsStr` bytes on Unix (matches the - /// bulk-byte hash), component-normalized `Path::eq` elsewhere (matches - /// `Path::hash`). - fn eq(&self, other: &Self) -> bool { - #[cfg(unix)] - { - self.path.as_os_str() == other.path.as_os_str() - } - #[cfg(not(unix))] - { - self.path == other.path - } - } -} - -impl Eq for ResolverPath {} - -impl Deref for ResolverPath { - type Target = Path; - - fn deref(&self) -> &Self::Target { - &self.path - } -} - -impl AsRef for ResolverPath { - fn as_ref(&self) -> &Path { - &self.path - } -} - -impl From for ResolverPath { - fn from(path: PathBuf) -> Self { - Self::new(Arc::from(path)) - } -} - -impl From<&Path> for ResolverPath { - fn from(path: &Path) -> Self { - Self::new(Arc::from(path)) - } -} - -impl From<&PathBuf> for ResolverPath { - fn from(path: &PathBuf) -> Self { - Self::new(Arc::from(path.as_path())) - } -} - -impl From> for ResolverPath { - fn from(path: Arc) -> Self { - Self::new(path) - } -} - -// The resolver stores paths internally as UTF-8 (`camino`); these accept the -// internal representation directly while keeping the stored buffer an -// `Arc` so the `as_arc`/`into_arc` output contract stays unchanged. -impl From for ResolverPath { - fn from(path: Utf8PathBuf) -> Self { - Self::new(Arc::from(path.into_std_path_buf())) - } -} - -impl From<&Utf8Path> for ResolverPath { - fn from(path: &Utf8Path) -> Self { - Self::new(Arc::from(path.as_std_path())) - } -} - -impl fmt::Debug for ResolverPath { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.path.fmt(f) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn hash_is_path_byte_hash() { - let p: &Path = Path::new("/a/b/c.js"); - let rp = ResolverPath::from(p); - assert_eq!(rp.precomputed_hash(), hash_path(p)); - } - - #[test] - fn equal_paths_have_equal_hashes() { - let a = ResolverPath::from(PathBuf::from("/x/y")); - let b = ResolverPath::from(Path::new("/x/y")); - assert_eq!(a, b); - assert_eq!(a.precomputed_hash(), b.precomputed_hash()); - } - - #[test] - fn writes_u64_into_hasher() { - use std::{collections::HashSet, hash::BuildHasherDefault}; - - #[derive(Default)] - struct IdHasher(u64); - impl Hasher for IdHasher { - fn write(&mut self, _: &[u8]) { - unreachable!() - } - fn write_u64(&mut self, n: u64) { - self.0 = n; - } - fn finish(&self) -> u64 { - self.0 - } - } - - let mut set: HashSet> = HashSet::default(); - set.insert(ResolverPath::from(Path::new("/a/b"))); - assert!(set.contains(&ResolverPath::from(PathBuf::from("/a/b")))); - } -} diff --git a/src/specifier.rs b/src/specifier.rs deleted file mode 100644 index fb1f2768..00000000 --- a/src/specifier.rs +++ /dev/null @@ -1,281 +0,0 @@ -use std::borrow::Cow; - -use crate::error::SpecifierError; - -#[derive(Debug)] -pub struct Specifier<'a> { - path: Cow<'a, str>, - pub query: Option<&'a str>, - pub fragment: Option<&'a str>, -} - -impl<'a> Specifier<'a> { - pub fn path(&'a self) -> &'a str { - self.path.as_ref() - } - - /// Parse a module specifier into path, query, and fragment. - /// - /// # Errors - /// - /// * See [SpecifierError] - pub fn parse(specifier: &'a str) -> Result { - if specifier.is_empty() { - return Err(SpecifierError::Empty(specifier.to_string())); - } - let offset = match specifier.as_bytes()[0] { - b'/' | b'.' | b'#' => 1, - _ => 0, - }; - let (path, query, fragment) = Self::parse_query_framgment(specifier, offset); - if path.is_empty() { - return Err(SpecifierError::Empty(specifier.to_string())); - } - Ok(Self { - path, - query, - fragment, - }) - } - - fn parse_query_framgment( - specifier: &'a str, - skip: usize, - ) -> (Cow<'a, str>, Option<&'a str>, Option<&'a str>) { - let mut query_start: Option = None; - let mut fragment_start: Option = None; - let mut escaped_indexes: Vec = Vec::new(); - - // Scan as bytes: `?`, `#`, and `\0` are single-byte ASCII (< 0x80), so their - // byte positions coincide with char positions in any UTF-8 input. This skips - // the per-step UTF-8 decode that `char_indices()` performs, which dominated - // the callgrind baseline. - let bytes = specifier.as_bytes(); - let mut prev = bytes[0]; - for (i, &b) in bytes.iter().enumerate().skip(skip) { - if b == b'?' && query_start.is_none() { - query_start = Some(i); - } - if b == b'#' { - if prev == 0 { - escaped_indexes.push(i - 1); - } else { - fragment_start = Some(i); - break; - } - } - prev = b; - } - - let (path, query, fragment) = match (query_start, fragment_start) { - (Some(i), Some(j)) => { - debug_assert!(i < j); - ( - &specifier[..i], - Some(&specifier[i..j]), - Some(&specifier[j..]), - ) - } - (Some(i), None) => (&specifier[..i], Some(&specifier[i..]), None), - (None, Some(j)) => (&specifier[..j], None, Some(&specifier[j..])), - _ => (specifier, None, None), - }; - - let path = if escaped_indexes.is_empty() { - Cow::Borrowed(path) - } else { - // Each escaped index points at a `\0` byte that we need to drop. Copy the - // surrounding slices in one pass — O(n) — instead of re-decoding chars and - // calling `escaped_indexes.contains(&i)` per char, which was O(n*k). - // The slice indices land on char boundaries because `\0` is ASCII. - let mut s = String::with_capacity(path.len() - escaped_indexes.len()); - let mut last = 0; - for &esc in &escaped_indexes { - s.push_str(&path[last..esc]); - last = esc + 1; - } - s.push_str(&path[last..]); - Cow::Owned(s) - }; - - (path, query, fragment) - } -} - -#[cfg(test)] -mod tests { - use super::{Specifier, SpecifierError}; - - #[test] - fn debug() { - let specifier = Specifier::parse("/").unwrap(); - assert_eq!( - format!("{specifier:?}"), - r#"Specifier { path: "/", query: None, fragment: None }"# - ); - } - - #[test] - fn empty() { - let specifiers = ["", "?"]; - for specifier in specifiers { - let error = Specifier::parse(specifier).unwrap_err(); - assert_eq!(error, SpecifierError::Empty(specifier.to_string())); - } - } - - #[test] - fn absolute() -> Result<(), SpecifierError> { - let specifier = "/test?#"; - let parsed = Specifier::parse(specifier)?; - assert_eq!(parsed.path, "/test"); - assert_eq!(parsed.query, Some("?")); - assert_eq!(parsed.fragment, Some("#")); - Ok(()) - } - - #[test] - fn relative() -> Result<(), SpecifierError> { - let specifiers = ["./test", "../test", "../../test"]; - for specifier in specifiers { - let mut r = specifier.to_string(); - r.push_str("?#"); - let parsed = Specifier::parse(&r)?; - assert_eq!(parsed.path, specifier); - assert_eq!(parsed.query, Some("?")); - assert_eq!(parsed.fragment, Some("#")); - } - Ok(()) - } - - #[test] - fn hash() -> Result<(), SpecifierError> { - let specifiers = ["#", "#path"]; - for specifier in specifiers { - let mut r = specifier.to_string(); - r.push_str("?#"); - let parsed = Specifier::parse(&r)?; - assert_eq!(parsed.path, specifier); - assert_eq!(parsed.query, Some("?")); - assert_eq!(parsed.fragment, Some("#")); - } - Ok(()) - } - - #[test] - fn module() -> Result<(), SpecifierError> { - let specifiers = ["module"]; - for specifier in specifiers { - let mut r = specifier.to_string(); - r.push_str("?#"); - let parsed = Specifier::parse(&r)?; - assert_eq!(parsed.path, specifier); - assert_eq!(parsed.query, Some("?")); - assert_eq!(parsed.fragment, Some("#")); - } - Ok(()) - } - - #[test] - fn query_fragment() -> Result<(), SpecifierError> { - let data = [ - ("a?", Some("?"), None), - ("a?query", Some("?query"), None), - ("a?query1?query2", Some("?query1?query2"), None), - ( - "a?query1?query2?query3", - Some("?query1?query2?query3"), - None, - ), - ("a#", None, Some("#")), - ("a#b#c", None, Some("#b#c")), - ("a#fragment", None, Some("#fragment")), - ("a?#", Some("?"), Some("#")), - ("a?#fragment", Some("?"), Some("#fragment")), - ("a?query#", Some("?query"), Some("#")), - ("a?query#fragment", Some("?query"), Some("#fragment")), - ("a#fragment?", None, Some("#fragment?")), - ("a#fragment?query", None, Some("#fragment?query")), - ]; - - for (specifier_str, query, fragment) in data { - let specifier = Specifier::parse(specifier_str)?; - assert_eq!(specifier.path, "a", "{specifier_str}"); - assert_eq!(specifier.query, query, "{specifier_str}"); - assert_eq!(specifier.fragment, fragment, "{specifier_str}"); - } - - Ok(()) - } - - #[test] - // https://github.com/webpack/enhanced-resolve/blob/main/test/identifier.test.js - fn enhanced_resolve_edge_cases() -> Result<(), SpecifierError> { - let data = [ - ("path/#", "path/", "", "#"), - ("path/as/?", "path/as/", "?", ""), - ("path/#/?", "path/", "", "#/?"), - ("path/#repo#hash", "path/", "", "#repo#hash"), - ("path/#r#hash", "path/", "", "#r#hash"), - ("path/#repo/#repo2#hash", "path/", "", "#repo/#repo2#hash"), - ("path/#r/#r#hash", "path/", "", "#r/#r#hash"), - ( - "path/#/not/a/hash?not-a-query", - "path/", - "", - "#/not/a/hash?not-a-query", - ), - ]; - - for (specifier_str, path, query, fragment) in data { - let specifier = Specifier::parse(specifier_str)?; - assert_eq!(specifier.path, path, "{specifier_str}"); - assert_eq!(specifier.query.unwrap_or(""), query, "{specifier_str}"); - assert_eq!( - specifier.fragment.unwrap_or(""), - fragment, - "{specifier_str}" - ); - } - - Ok(()) - } - - // https://github.com/webpack/enhanced-resolve/blob/main/test/identifier.test.js - #[test] - fn enhanced_resolve_windows_like() -> Result<(), SpecifierError> { - let data = [ - ("path\\#", "path\\", "", "#"), - ("path\\as\\?", "path\\as\\", "?", ""), - ("path\\#\\?", "path\\", "", "#\\?"), - ("path\\#repo#hash", "path\\", "", "#repo#hash"), - ("path\\#r#hash", "path\\", "", "#r#hash"), - ( - "path\\#repo\\#repo2#hash", - "path\\", - "", - "#repo\\#repo2#hash", - ), - ("path\\#r\\#r#hash", "path\\", "", "#r\\#r#hash"), - ( - "path\\#/not/a/hash?not-a-query", - "path\\", - "", - "#/not/a/hash?not-a-query", - ), - ]; - - for (specifier_str, path, query, fragment) in data { - let specifier = Specifier::parse(specifier_str)?; - assert_eq!(specifier.path, path, "{specifier_str}"); - assert_eq!(specifier.query.unwrap_or(""), query, "{specifier_str}"); - assert_eq!( - specifier.fragment.unwrap_or(""), - fragment, - "{specifier_str}" - ); - } - - Ok(()) - } -} diff --git a/src/tests/alias.rs b/src/tests/alias.rs deleted file mode 100644 index d42922a1..00000000 --- a/src/tests/alias.rs +++ /dev/null @@ -1,335 +0,0 @@ -//! - -use std::path::Path; - -use normalize_path::NormalizePath; - -use crate::{AliasValue, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -async fn alias() { - use std::path::{Path, PathBuf}; - - use super::memory_fs::MemoryFS; - use crate::ResolverGeneric; - - let f = Path::new("/"); - - let file_system = MemoryFS::new(&[ - ("/a/index", ""), - ("/a/dir/index", ""), - ("/recursive/index", ""), - ("/recursive/dir/index", ""), - ("/b/index", ""), - ("/b/dir/index", ""), - ("/c/index", ""), - ("/c/dir/index", ""), - ("/d/index.js", ""), - ("/d/dir/.empty", ""), - ("/e/index", ""), - ("/e/anotherDir/index", ""), - ("/e/dir/file", ""), - ("/dashed-name", ""), - ]); - - let resolver = ResolverGeneric::::new_with_file_system( - file_system, - ResolveOptions { - alias: vec![ - ("aliasA".into(), vec![AliasValue::from("a")]), - ("b$".into(), vec![AliasValue::from("a/index")]), - ("c$".into(), vec![AliasValue::from("/a/index")]), - ( - "multiAlias".into(), - vec![ - AliasValue::from("b"), - AliasValue::from("c"), - AliasValue::from("d"), - AliasValue::from("e"), - AliasValue::from("a"), - ], - ), - ("recursive".into(), vec![AliasValue::from("recursive/dir")]), - ("/d/dir".into(), vec![AliasValue::from("/c/dir")]), - ("/d/index.js".into(), vec![AliasValue::from("/c/index")]), - ("#".into(), vec![AliasValue::from("/c/dir")]), - ("@".into(), vec![AliasValue::from("/c/dir")]), - ("ignored".into(), vec![AliasValue::Ignore]), - // not part of enhanced-resolve, added to make sure query in alias value works - ( - "alias_query".into(), - vec![AliasValue::from("a?query_after")], - ), - ( - "alias_fragment".into(), - vec![AliasValue::from("a#fragment_after")], - ), - ("dash".into(), vec![AliasValue::Ignore]), - ( - "@scope/package-name/file$".into(), - vec![AliasValue::from("/c/dir")], - ), - ], - modules: vec!["/".into()], - ..ResolveOptions::default() - }, - ); - - #[rustfmt::skip] - let pass = [ - ("should resolve a not aliased module 1", "a", "/a/index"), - ("should resolve a not aliased module 2", "a/index", "/a/index"), - ("should resolve a not aliased module 3", "a/dir", "/a/dir/index"), - ("should resolve a not aliased module 4", "a/dir/index", "/a/dir/index"), - ("should resolve an aliased module 1", "aliasA", "/a/index"), - ("should resolve an aliased module 2", "aliasA/index", "/a/index"), - ("should resolve an aliased module 3", "aliasA/dir", "/a/dir/index"), - ("should resolve an aliased module 4", "aliasA/dir/index", "/a/dir/index"), - ("should resolve '#' alias 1", "#", "/c/dir/index"), - ("should resolve '#' alias 2", "#/index", "/c/dir/index"), - ("should resolve '@' alias 1", "@", "/c/dir/index"), - ("should resolve '@' alias 2", "@/index", "/c/dir/index"), - ("should resolve '@' alias 3", "@/", "/c/dir/index"), - ("should resolve a recursive aliased module 1", "recursive", "/recursive/dir/index"), - ("should resolve a recursive aliased module 2", "recursive/index", "/recursive/dir/index"), - ("should resolve a recursive aliased module 3", "recursive/dir", "/recursive/dir/index"), - ("should resolve a recursive aliased module 4", "recursive/dir/index", "/recursive/dir/index"), - ("should resolve a file aliased module 1", "b", "/a/index"), - ("should resolve a file aliased module 2", "c", "/a/index"), - ("should resolve a file aliased module with a query 1", "b?query", "/a/index?query"), - ("should resolve a file aliased module with a query 2", "c?query", "/a/index?query"), - ("should resolve a path in a file aliased module 1", "b/index", "/b/index"), - ("should resolve a path in a file aliased module 2", "b/dir", "/b/dir/index"), - ("should resolve a path in a file aliased module 3", "b/dir/index", "/b/dir/index"), - ("should resolve a path in a file aliased module 4", "c/index", "/c/index"), - ("should resolve a path in a file aliased module 5", "c/dir", "/c/dir/index"), - ("should resolve a path in a file aliased module 6", "c/dir/index", "/c/dir/index"), - ("should resolve a file aliased file 1", "d", "/c/index"), - ("should resolve a file aliased file 2", "d/dir/index", "/c/dir/index"), - ("should resolve a file in multiple aliased dirs 1", "multiAlias/dir/file", "/e/dir/file"), - ("should resolve a file in multiple aliased dirs 2", "multiAlias/anotherDir", "/e/anotherDir/index"), - // not part of enhanced-resolve, added to make sure query in alias value works - ("should resolve query in alias value", "alias_query?query_before", "/a/index?query_after"), - ("should resolve query in alias value", "alias_fragment#fragment_before", "/a/index#fragment_after"), - ("should resolve dashed name", "dashed-name", "/dashed-name"), - ("should resolve scoped package name with sub dir", "@scope/package-name/file", "/c/dir/index"), - ]; - - for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(f, request).await.map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(PathBuf::from(expected)), - "{comment} {request}" - ); - } - - #[rustfmt::skip] - let ignore = [ - ("should resolve an ignore module", "ignored", ResolveError::Ignored(f.join("ignored"))) - ]; - - for (comment, request, expected) in ignore { - let resolution = resolver.resolve(f, request).await; - assert_eq!(resolution, Err(expected), "{comment} {request}"); - } -} - -// Not part of enhanced-resolve -#[tokio::test] -async fn infinite_recursion() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - alias: vec![ - ("./a".into(), vec![AliasValue::from("./b")]), - ("./b".into(), vec![AliasValue::from("./a")]), - ], - ..ResolveOptions::default() - }); - let resolution = resolver.resolve(f, "./a").await; - assert_eq!(resolution, Err(ResolveError::Recursion)); -} - -fn check_slash(path: &Path) { - let s = path.to_str().expect("path should be UTF-8").to_string(); - #[cfg(target_os = "windows")] - { - assert!(!s.contains('/'), "{s}"); - assert!(s.contains('\\'), "{s}"); - } - #[cfg(not(target_os = "windows"))] - { - assert!(s.contains('/'), "{s}"); - assert!(!s.contains('\\'), "{s}"); - } -} - -#[tokio::test] -async fn absolute_path() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - alias: vec![( - f.join("foo").to_str().unwrap().to_string(), - vec![AliasValue::Ignore], - )], - modules: vec![f.clone().to_str().unwrap().to_string()], - ..ResolveOptions::default() - }); - let resolution = resolver.resolve(&f, "foo/index").await; - assert_eq!(resolution, Err(ResolveError::Ignored(f.join("foo")))); -} - -#[tokio::test] -async fn system_path() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - alias: vec![( - "@app".into(), - vec![AliasValue::from( - f.join("alias").to_str().expect("path should be UTF-8"), - )], - )], - ..ResolveOptions::default() - }); - - let specifiers = ["@app/files/a", "@app/files/a.js"]; - - for specifier in specifiers { - let path = resolver - .resolve(&f, specifier) - .await - .map(Resolution::into_path_buf) - .unwrap(); - assert_eq!(path, f.join("alias/files/a.js")); - check_slash(&path); - } -} - -#[tokio::test] -async fn alias_is_full_path() { - let f = super::fixture(); - let dir = f.join("foo"); - let dir_str = dir.to_str().expect("path should be UTF-8").to_string(); - - let resolver = Resolver::new(ResolveOptions { - alias: vec![("@".into(), vec![AliasValue::Path(dir_str.clone())])], - ..ResolveOptions::default() - }); - - let mut ctx = ResolveContext::default(); - - let specifiers = [ - "@/index".to_string(), - "@/index.js".to_string(), - // specifier has multiple `/` for reasons we'll never know - "@////index".to_string(), - // specifier is a full path - dir_str, - ]; - - for specifier in specifiers { - let resolution = resolver.resolve_with_context(&f, &specifier, &mut ctx); - assert_eq!( - resolution.await.map(|r| r.full_path()), - Ok(dir.join("index.js")) - ); - } - - for path in ctx.file_dependencies { - assert_eq!(path.as_path(), path.normalize(), "{path:?}"); - check_slash(&path); - } - - for path in ctx.missing_dependencies { - assert_eq!(path.as_path(), path.normalize(), "{path:?}"); - check_slash(&path); - if let Some(path) = path.parent() { - assert!(!path.is_file(), "{path:?} must not be a file"); - } - } -} - -// For the `should_stop` variable in `load_alias` -#[tokio::test] -async fn all_alias_values_are_not_found() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - alias: vec![( - "m1".to_string(), - vec![AliasValue::Path( - f.join("node_modules") - .join("m2") - .to_str() - .expect("path should be UTF-8") - .to_string(), - )], - )], - ..ResolveOptions::default() - }); - let resolution = resolver.resolve(&f, "m1/a.js").await; - assert_eq!( - resolution, - Err(ResolveError::MatchedAliasNotFound( - "m1/a.js".to_string(), - "m1".to_string(), - )) - ); -} - -#[tokio::test] -async fn alias_fragment() { - let f = super::fixture(); - - let data = [ - // enhanced-resolve has `#` prepended with a `\0`, they are removed from the - // following 3 expected test results. - // See https://github.com/webpack/enhanced-resolve#escaping - ( - "handle fragment edge case (no fragment)", - "./no#fragment/#/#", - f.join("no#fragment/#/#.js"), - ), - ( - "handle fragment edge case (fragment)", - "./no#fragment/#/", - f.join("no.js#fragment/#/"), - ), - ( - "handle fragment escaping", - "./no\0#fragment/\0#/\0##fragment", - f.join("no#fragment/#/#.js#fragment"), - ), - ]; - - for (comment, request, expected) in data { - let resolver = Resolver::new(ResolveOptions { - alias: vec![( - "foo".to_string(), - vec![AliasValue::Path(request.to_string())], - )], - ..ResolveOptions::default() - }); - let resolved_path = resolver.resolve(&f, "foo").await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); - } -} - -#[tokio::test] -async fn alias_try_fragment_as_path() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - alias: vec![( - "#".to_string(), - vec![AliasValue::Path( - f.join("#") - .to_str() - .expect("path should be UTF-8") - .to_string(), - )], - )], - ..ResolveOptions::default() - }); - let resolution = resolver.resolve(&f, "#/a").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("#").join("a.js"))); -} diff --git a/src/tests/browser_field.rs b/src/tests/browser_field.rs deleted file mode 100644 index c7a36e3a..00000000 --- a/src/tests/browser_field.rs +++ /dev/null @@ -1,232 +0,0 @@ -//! - -use crate::{AliasValue, ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -async fn ignore() { - let f = super::fixture().join("browser-module"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![ - vec!["browser".into()], - vec!["innerBrowser1".into()], - vec!["innerBrowser2".into()], - vec![], - ], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let data = [ - (f.clone(), "./lib/ignore", f.join("lib/ignore.js")), - (f.clone(), "./lib/ignore.js", f.join("lib/ignore.js")), - (f.join("lib"), "./ignore", f.join("lib/ignore.js")), - (f.join("lib"), "./ignore.js", f.join("lib/ignore.js")), - ]; - - for (path, request, expected) in data { - let resolution = resolver.resolve(&path, request).await; - let expected = ResolveError::Ignored(expected); - assert_eq!(resolution, Err(expected), "{path:?} {request}"); - } -} - -#[tokio::test] -async fn shared_resolvers() { - let f = super::fixture().join("browser-module"); - - let resolver1 = Resolver::new(ResolveOptions { - alias_fields: vec![vec![ - "innerBrowser1".into(), - "field".into(), - "browser".into(), - ]], - ..ResolveOptions::default() - }); - let resolved_path = resolver1 - .resolve(&f, "./lib/main1.js") - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(f.join("lib/main.js"))); - - let resolver2 = resolver1.clone_with_options(ResolveOptions { - alias_fields: vec![vec!["innerBrowser2".into(), "browser".into()]], - ..ResolveOptions::default() - }); - let resolved_path = resolver2 - .resolve(&f, "./lib/main2.js") - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(f.join("./lib/replaced.js"))); -} - -#[tokio::test] -async fn replace_file() { - let f = super::fixture().join("browser-module"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![ - vec!["browser".into()], - vec!["innerBrowser1".into(), "field2".into(), "browser".into()], // not presented - vec!["innerBrowser1".into(), "field".into(), "browser".into()], - vec!["innerBrowser2".into(), "browser".into()], - ], - // Not part of enhanced-resolve. Added to make sure no interaction between these two fields. - main_fields: vec!["browser".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let data = [ - ("should replace a file 1", f.clone(), "./lib/replaced", f.join("lib/browser.js")), - ("should replace a file 2", f.clone(), "./lib/replaced.js", f.join("lib/browser.js")), - ("should replace a file 3", f.join("lib"), "./replaced", f.join("lib/browser.js")), - ("should replace a file 4", f.join("lib"), "./replaced.js", f.join("lib/browser.js")), - ("should replace a module with a file 1", f.clone(), "module-a", f.join("browser/module-a.js")), - ("should replace a module with a file 2", f.join("lib"), "module-a", f.join("browser/module-a.js")), - ("should replace a module with a module 1", f.clone(), "module-b", f.join("node_modules/module-c.js")), - ("should replace a module with a module 2", f.join("lib"), "module-b", f.join("node_modules/module-c.js")), - ("should resolve in nested property 1", f.clone(), "./lib/main1.js", f.join("lib/main.js")), - ("should resolve in nested property 2", f.clone(), "./lib/main2.js", f.join("lib/browser.js")), - ("should check only alias field properties", f.clone(), "./toString", f.join("lib/toString.js")), - // not part of enhanced-resolve - ("recursion", f.clone(), "module-c", f.join("node_modules/module-c.js")), - ("resolve self 1", f.clone(), "./lib/main.js", f.join("lib/main.js")), - ("resolve self 2", f.clone(), "./main.js", f.join("lib/main.js")), - ]; - - for (comment, path, request, expected) in data { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn recurse_fail() { - let f = super::fixture(); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let data = [ - ("recurse non existent", f.clone(), "./lib/non-existent.js", ResolveError::NotFound("./lib/non-existent.js".into())), - ("path partial match 1", f.clone(), "./xyz.js", ResolveError::NotFound("./xyz.js".into())), - ("path partial match 2", f, "./lib/xyz.js", ResolveError::NotFound("./lib/xyz.js".into())), - ]; - - for (comment, path, request, expected) in data { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Err(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn broken() { - let f = super::fixture(); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let data = [ - // The browser field string value should be ignored - (f.clone(), "browser-module-broken", Ok(f.join("node_modules/browser-module-broken/main.js"))), - (f.join("browser-module"), "./number", Err(ResolveError::NotFound("./number".into()))), - ]; - - for (path, request, expected) in data { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, expected, "{path:?} {request}"); - } -} - -#[tokio::test] -async fn crypto_js() { - let f = super::fixture(); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - fallback: vec![( - "crypto".into(), - vec![AliasValue::from( - f.join("lib.js").to_str().expect("path should be UTF-8"), - )], - )], - ..ResolveOptions::default() - }); - - let resolved_path = resolver - .resolve(f.join("crypto-js"), "crypto") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Err(ResolveError::Ignored(f.join("crypto-js"))) - ); -} - -// https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/test/cases/resolving/browser-field/index.js#L40-L43 -#[tokio::test] -async fn recursive() { - let f = super::fixture().join("browser-module"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - ..ResolveOptions::default() - }); - - let data = [ - ( - "should handle recursive file 1", - f.clone(), - "recursive-file/a", - ), - ( - "should handle recursive file 2", - f.clone(), - "recursive-file/b", - ), - ( - "should handle recursive file 3", - f.clone(), - "recursive-file/c", - ), - ("should handle recursive file 4", f, "recursive-file/d"), - ]; - - for (comment, path, request) in data { - let resolved_path = resolver.resolve(&path, request).await; - assert_eq!( - resolved_path, - Err(ResolveError::Recursion), - "{comment} {path:?} {request}" - ); - } -} - -#[tokio::test] -async fn with_query() { - let f = super::fixture().join("browser-module"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "./foo").await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(f.join("lib").join("browser.js?query"))); -} diff --git a/src/tests/builtins.rs b/src/tests/builtins.rs deleted file mode 100644 index 439b5e10..00000000 --- a/src/tests/builtins.rs +++ /dev/null @@ -1,124 +0,0 @@ -use std::path::Path; - -use crate::{ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -async fn builtins_off() { - let f = Path::new("/"); - let resolver = Resolver::default(); - let resolved_path = resolver.resolve(f, "zlib").await.map(|r| r.full_path()); - assert_eq!(resolved_path, Err(ResolveError::NotFound("zlib".into()))); -} - -#[tokio::test] -async fn builtins() { - let f = Path::new("/"); - - let resolver = Resolver::new(ResolveOptions::default().with_builtin_modules(true)); - - let pass = [ - "_http_agent", - "_http_client", - "_http_common", - "_http_incoming", - "_http_outgoing", - "_http_server", - "_stream_duplex", - "_stream_passthrough", - "_stream_readable", - "_stream_transform", - "_stream_wrap", - "_stream_writable", - "_tls_common", - "_tls_wrap", - "assert", - "assert/strict", - "async_hooks", - "buffer", - "child_process", - "cluster", - "console", - "constants", - "crypto", - "dgram", - "diagnostics_channel", - "dns", - "dns/promises", - "domain", - "events", - "fs", - "fs/promises", - "http", - "http2", - "https", - "inspector", - "module", - "net", - "os", - "path", - "path/posix", - "path/win32", - "perf_hooks", - "process", - "punycode", - "querystring", - "readline", - "repl", - "stream", - "stream/consumers", - "stream/promises", - "stream/web", - "string_decoder", - "sys", - "timers", - "timers/promises", - "tls", - "trace_events", - "tty", - "url", - "util", - "util/types", - "v8", - "vm", - "worker_threads", - "zlib", - ]; - - for request in pass { - let prefixed_request = format!("node:{request}"); - for request in [prefixed_request.clone(), request.to_string()] { - let resolved_path = resolver.resolve(f, &request).await.map(|r| r.full_path()); - let err = ResolveError::Builtin(prefixed_request.clone()); - assert_eq!(resolved_path, Err(err), "{request}"); - } - } -} - -#[tokio::test] -async fn fail() { - let f = Path::new("/"); - let resolver = Resolver::new(ResolveOptions::default().with_builtin_modules(true)); - let request = "xxx"; - let resolved_path = resolver.resolve(f, request).await; - let err = ResolveError::NotFound(request.to_string()); - assert_eq!(resolved_path, Err(err), "{request}"); -} - -#[tokio::test] -async fn imports() { - let f = super::fixture().join("builtins"); - let resolver = Resolver::new(ResolveOptions { - builtin_modules: true, - condition_names: vec!["node".into()], - ..ResolveOptions::default() - }); - - for request in ["#fs", "#http"] { - let resolved_path = resolver - .resolve(f.clone(), request) - .await - .map(|r| r.full_path()); - let err = ResolveError::Builtin(format!("node:{}", request.trim_start_matches('#'))); - assert_eq!(resolved_path, Err(err)); - } -} diff --git a/src/tests/dependencies.rs b/src/tests/dependencies.rs deleted file mode 100644 index be9fe04f..00000000 --- a/src/tests/dependencies.rs +++ /dev/null @@ -1,174 +0,0 @@ -//! https://github.com/webpack/enhanced-resolve/blob/main/test/dependencies.test.js - -// Warm-cache calls must report the same missing_dependencies as the cold path so that -// webpack/rspack watchers can track non-existent node_modules dirs across multiple resolves. -#[cfg(not(target_os = "windows"))] -mod warm_cache_missing_dependencies { - use std::path::PathBuf; - - use super::super::memory_fs::MemoryFS; - use crate::{ResolveContext, ResolveOptions, ResolverGeneric}; - - fn file_system() -> MemoryFS { - MemoryFS::new(&[ - ("/a/b/c/some.js", ""), // makes /a/b/c and /a/b real dirs; neither has node_modules - ("/a/node_modules/module/index.js", ""), - ]) - } - - #[tokio::test] - async fn node_modules_missing_deps_same_on_warm_cache() { - let resolver = ResolverGeneric::::new_with_file_system( - file_system(), - ResolveOptions { - extensions: vec![".js".into()], - ..ResolveOptions::default() - }, - ); - - let path = PathBuf::from("/a/b/c"); - - let mut ctx_cold = ResolveContext::default(); - let cold = resolver - .resolve_with_context(path.clone(), "module", &mut ctx_cold) - .await; - - let mut ctx_warm = ResolveContext::default(); - let warm = resolver - .resolve_with_context(path.clone(), "module", &mut ctx_warm) - .await; - - assert_eq!(cold.map(|r| r.full_path()), warm.map(|r| r.full_path())); - - assert_eq!( - ctx_cold.missing_dependencies, ctx_warm.missing_dependencies, - "cold: {:?}\nwarm: {:?}", - ctx_cold.missing_dependencies, ctx_warm.missing_dependencies, - ); - - // enhanced-resolve lists traversed-but-absent node_modules dirs in missingDependencies - for dir in ["/a/b/c/node_modules", "/a/b/node_modules"] { - assert!(ctx_warm - .missing_dependencies - .contains(&PathBuf::from(dir).into())); - } - } -} - -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -mod windows { - use std::path::PathBuf; - - use rustc_hash::FxHashSet; - - use super::super::memory_fs::MemoryFS; - use crate::{ResolveContext, ResolveOptions, ResolverGeneric, ResolverPath}; - - fn file_system() -> MemoryFS { - MemoryFS::new(&[ - ("/a/b/node_modules/some-module/index.js", ""), - ( - "/a/node_modules/module/package.json", - r#"{"main":"entry.js"}"#, - ), - ("/a/node_modules/module/file.js", r#"{"main":"entry.js"}"#), - ("/modules/other-module/file.js", ""), - ]) - } - - #[tokio::test] - async fn test() { - let file_system = file_system(); - - let resolver = ResolverGeneric::::new_with_file_system( - file_system, - ResolveOptions { - extensions: vec![".json".into(), ".js".into()], - modules: vec!["/modules".into(), "node_modules".into()], - ..ResolveOptions::default() - }, - ); - - let data = [ - ( - "middle module request", - "/a/b/c", - "module/file", - "/a/node_modules/module/file.js", - // These dependencies are different from enhanced-resolve due to different code path to - // querying the file system - vec![ - // found package.json - "/a/node_modules/module/package.json", - // symlink checks - "/a/node_modules/module/file.js", - // "/a/node_modules/module", - // "/a/node_modules", - // "/a", - // "/", - ], - vec![ - // missing package.jsons - // "/a/b/c/package.json", - "/a/b/package.json", - "/a/package.json", - "/package.json", - // missing modules directories - "/a/b/c", - // "/a/b/c/node_modules", - // missing single file modules - "/modules/module", - "/a/b/node_modules/module", - // missing files with alternative extensions - "/a/node_modules/module/file", - "/a/node_modules/module/file.json", - ], - ), - ( - "fast found module", - "/a/b/c", - "other-module/file.js", - "/modules/other-module/file.js", - // These dependencies are different from enhanced-resolve due to different code path to - // querying the file system - vec![ - // symlink checks - "/modules/other-module/file.js", - // "/modules/other-module", - // "/modules", - // "/", - ], - vec![ - // missing package.jsons - // "/a/b/c/package.json", - "/a/b/c", - "/a/b/package.json", - "/a/package.json", - "/package.json", - "/modules/other-module/package.json", - "/modules/package.json", - ], - ), - ]; - - for (name, context, request, result, file_dependencies, missing_dependencies) in data { - let mut ctx = ResolveContext::default(); - let path = PathBuf::from(context); - let resolved = resolver - .resolve_with_context(path, request, &mut ctx) - .await - .map(|r| r.full_path()); - assert_eq!(resolved, Ok(PathBuf::from(result))); - let file_dependencies: FxHashSet = file_dependencies - .iter() - .map(|p| ResolverPath::from(PathBuf::from(p))) - .collect(); - let missing_dependencies: FxHashSet = missing_dependencies - .iter() - .map(|p| ResolverPath::from(PathBuf::from(p))) - .collect(); - assert_eq!(ctx.file_dependencies, file_dependencies, "{name}"); - assert_eq!(ctx.missing_dependencies, missing_dependencies, "{name}"); - } - } -} diff --git a/src/tests/exports_field.rs b/src/tests/exports_field.rs deleted file mode 100644 index 2267f0c0..00000000 --- a/src/tests/exports_field.rs +++ /dev/null @@ -1,2635 +0,0 @@ -//! https://github.com/webpack/enhanced-resolve/blob/main/test/exportsField.test.js -//! -//! The huge exports field test cases are at the bottom of this file. - -use camino::Utf8Path; -use simd_json::json; - -use crate::{package_json, Ctx, PathUtil, ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -async fn test_simple() { - let f = super::fixture().join("exports-field"); - let f2 = super::fixture().join("exports-field2"); - let f4 = super::fixture().join("exports-field-error"); - let f5 = super::fixture().join("imports-exports-wildcard"); - let f6 = super::fixture().join("export-query"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - fully_specified: true, - condition_names: vec!["webpack".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("resolve root using exports field, not a main field", f.clone(), "exports-field", f.join("node_modules/exports-field/x.js")), - ("resolver should respect condition names", f.clone(), "exports-field/dist/main.js", f.join("node_modules/exports-field/lib/lib2/main.js")), - // enhanced_resolve behaves differently to node.js. enhanced_resolve fallbacks when an - // array item is unresolved, where as node.js fallbacks when an array has an - // InvalidPackageTarget error. - // ("resolver should respect fallback", f2.clone(), "exports-field/dist/browser.js", f2.join("node_modules/exports-field/lib/browser.js")), - // The following two tests require fallback from array values, the path is changed here to - // only test query and fragment. - ("resolver should respect query parameters #1", f2.clone(), "exports-field/dist/main.js?foo", f2.join("node_modules/exports-field/lib/lib2/main.js?foo")), - ("resolver should respect fragment parameters #1", f2.clone(), "exports-field/dist/main.js#foo", f2.join("node_modules/exports-field/lib/lib2/main.js#foo")), - ("relative path should work, if relative path as request is used", f.clone(), "./node_modules/exports-field/lib/main.js", f.join("node_modules/exports-field/lib/main.js")), - ("self-resolving root", f.clone(), "@exports-field/core", f.join("a.js")), - ("should resolve with wildcard pattern #1", f5.clone(), "m/features/f.js", f5.join("node_modules/m/src/features/f.js")), - ("should resolve with wildcard pattern #2", f5.clone(), "m/features/y/y.js", f5.join("node_modules/m/src/features/y/y.js")), - ("should resolve with wildcard pattern #3", f5.clone(), "m/features-no-ext/y/y.js", f5.join("node_modules/m/src/features/y/y.js")), - ("should resolve with wildcard pattern #4", f5.clone(), "m/middle/nested/f.js", f5.join("node_modules/m/src/middle/nested/f.js")), - ("should resolve with wildcard pattern #5", f5.clone(), "m/middle-1/nested/f.js", f5.join("node_modules/m/src/middle-1/nested/f.js")), - ("should resolve with wildcard pattern #6", f5.clone(), "m/middle-2/nested/f.js", f5.join("node_modules/m/src/middle-2/nested/f.js")), - ("should resolve with wildcard pattern #7", f5.clone(), "m/middle-3/nested/f", f5.join("node_modules/m/src/middle-3/nested/f/nested/f.js")), - ("should resolve with wildcard pattern #8", f5.clone(), "m/middle-4/f/nested", f5.join("node_modules/m/src/middle-4/f/f.js")), - ("should resolve with wildcard pattern #9", f5.clone(), "m/middle-5/f$/$", f5.join("node_modules/m/src/middle-5/f$/$.js")), - ("should resolve with query string #10", f6.clone(), "export-query/add", f6.join("add.js?query1?query2")), - // Sadly we can not use real `minus.js?query` and `equal.js?query` file due to Windows: invalid path - ("should resolve with query string #10", f6.clone(), "export-query/minus", f6.join("minus.js?query?extra")), - ("should resolve with query string #10", f6.clone(), "export-query/equal", f6.join("equal.js?query")), - ]; - - // Not needed or snapshot: - // * should log the correct info - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } - - let p = f.join("node_modules/exports-field/package.json"); - let p2 = f2.join("node_modules/exports-field/package.json"); - let p4 = f4.join("node_modules/exports-field/package.json"); - let p5 = f5.join("node_modules/m/package.json"); - - #[rustfmt::skip] - let fail = [ - // ("throw error if extension not provided", f2.clone(), "exports-field/dist/main", ResolveError::NotFound(f2.join("node_modules/exports-field/lib/lib2/main"))), - ("resolver should respect query parameters #2. Direct matching", f2.clone(), "exports-field?foo", ResolveError::PackagePathNotExported("./?foo".into(), p2.clone())), - ("resolver should respect fragment parameters #2. Direct matching", f2, "exports-field#foo", ResolveError::PackagePathNotExported("./#foo".into(), p2)), - ("relative path should not work with exports field", f.clone(), "./node_modules/exports-field/dist/main.js", ResolveError::NotFound("./node_modules/exports-field/dist/main.js".into())), - ("backtracking should not work for request", f.clone(), "exports-field/dist/../../../a.js", ResolveError::InvalidPackageTarget("./lib/../../../a.js".to_string(), "./dist/".to_string(), p.clone())), - ("backtracking should not work for exports field target", f.clone(), "exports-field/dist/a.js", ResolveError::InvalidPackageTarget("./../../a.js".to_string(), "./dist/a.js".to_string(), p.clone())), - ("not exported error", f.clone(), "exports-field/anything/else", ResolveError::PackagePathNotExported("./anything/else".to_string(), p.clone())), - ("request ending with slash #1", f.clone(), "exports-field/", ResolveError::PackagePathNotExported("./".to_string(), p.clone())), - ("request ending with slash #2", f.clone(), "exports-field/dist/", ResolveError::PackagePathNotExported("./dist/".to_string(), p.clone())), - ("request ending with slash #3", f.clone(), "exports-field/lib/", ResolveError::PackagePathNotExported("./lib/".to_string(), p)), - ("should throw error if target is invalid", f4, "exports-field", ResolveError::InvalidPackageTarget("./a/../b/../../pack1/index.js".to_string(), ".".to_string(), p4)), - ("throw error if exports field is invalid", f.clone(), "invalid-exports-field", ResolveError::InvalidPackageConfig(f.join("node_modules/invalid-exports-field/package.json"))), - ("should throw error if target is 'null'", f5, "m/features/internal/file.js", ResolveError::PackagePathNotExported("./features/internal/file.js".to_string(), p5)), - ]; - - for (comment, path, request, error) in fail { - let resolution = resolver.resolve(&path, request).await; - assert_eq!(resolution, Err(error), "{comment} {path:?} {request}"); - } -} - -// resolve using exports field, not a browser field #1 -#[tokio::test] -async fn exports_not_browser_field1() { - let f = super::fixture().join("exports-field"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - condition_names: vec!["webpack".into()], - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - - let resolved_path = resolver - .resolve(&f, "exports-field/dist/main.js") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f.join("node_modules/exports-field/lib/lib2/main.js")) - ); -} - -// resolve using exports field and a browser alias field #2 -#[tokio::test] -async fn exports_not_browser_field2() { - let f2 = super::fixture().join("exports-field2"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - extensions: vec![".js".into()], - condition_names: vec!["node".into()], - ..ResolveOptions::default() - }); - - let resolved_path = resolver - .resolve(&f2, "exports-field/dist/main.js") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f2.join("node_modules/exports-field/lib/browser.js")) - ); -} - -// should resolve extension without fullySpecified -#[tokio::test] -async fn extension_without_fully_specified() { - let f2 = super::fixture().join("exports-field2"); - - let commonjs_resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - condition_names: vec!["webpack".into()], - ..ResolveOptions::default() - }); - - let resolved_path = commonjs_resolver - .resolve(&f2, "exports-field/dist/main") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f2.join("node_modules/exports-field/lib/lib2/main.js")) - ); -} - -#[tokio::test] -async fn field_name_path() { - let f2 = super::fixture().join("exports-field2"); - let f3 = super::fixture().join("exports-field3"); - - // field name path #1 #2 #3 - let exports_fields = [ - vec![vec!["exportsField".into(), "exports".into()]], - vec![ - vec!["exportsField".into(), "exports".into()], - vec!["exports".into()], - ], - vec![ - vec!["exports".into()], - vec!["exportsField".into(), "exports".into()], - ], - ]; - - for exports_fields in exports_fields { - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - exports_fields, - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - let resolved_path = resolver - .resolve(&f3, "exports-field") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f3.join("node_modules/exports-field/main.js")) - ); - } - - // field name path #4 - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - exports_fields: vec![vec!["exports".into()]], - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - let resolved_path = resolver - .resolve(&f2, "exports-field") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f2.join("node_modules/exports-field/index.js")) - ); - - // field name path #5 - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - exports_fields: vec![ - vec!["ex".into()], - vec!["exports_field".into(), "exports".into()], - ], - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - let resolved_path = resolver - .resolve(&f3, "exports-field") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f3.join("node_modules/exports-field/index")) - ); - - // non-compliant export targeting a directory - let resolver = Resolver::new(ResolveOptions { - exports_fields: vec![vec!["broken".into()]], - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - let resolved_path = resolver - .resolve(&f3, "exports-field") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f3.join("node_modules/exports-field/src/index.js")) - ); -} - -#[tokio::test] -async fn shared_resolvers() { - let f3 = super::fixture().join("exports-field3"); - - let resolver1 = Resolver::new(ResolveOptions { - exports_fields: vec![vec!["exportsField".into(), "exports".into()]], - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - let resolved_path = resolver1 - .resolve(&f3, "exports-field") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f3.join("node_modules/exports-field/main.js")) - ); - - let resolver2 = resolver1.clone_with_options(ResolveOptions { - exports_fields: vec![vec!["ex".into()]], - extensions: vec![".js".into()], - ..ResolveOptions::default() - }); - let resolved_path = resolver2 - .resolve(&f3, "exports-field") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f3.join("node_modules/exports-field/index")) - ); -} - -#[tokio::test] -async fn extension_alias_1_2() { - let f = super::fixture().join("exports-field-and-extension-alias"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])], - fully_specified: true, - condition_names: vec!["webpack".into(), "default".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should resolve with the `extensionAlias` option", f.clone(), "@org/pkg/string.js", f.join("node_modules/@org/pkg/dist/string.js")), - ("should resolve with the `extensionAlias` option #2", f.clone(), "pkg/string.js", f.join("node_modules/pkg/dist/string.js")), - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn extension_alias_3() { - let f = super::fixture().join("exports-field-and-extension-alias"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - extension_alias: vec![( - ".js".into(), - vec![ - ".foo".into(), - ".baz".into(), - ".baz".into(), - ".ts".into(), - ".js".into(), - ], - )], - fully_specified: true, - condition_names: vec!["webpack".into(), "default".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should resolve with the `extensionAlias` option #3", f.clone(), "pkg/string.js", f.join("node_modules/pkg/dist/string.js")), - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn extension_alias_throw_error() { - let f = super::fixture().join("exports-field-and-extension-alias"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - extension_alias: vec![(".js".into(), vec![".ts".into()])], - fully_specified: true, - condition_names: vec!["webpack".into(), "default".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let fail = [ - // enhanced-resolve has two test cases that are exactly the same here - // https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/test/exportsField.test.js#L2976-L3024 - ("should throw error with the `extensionAlias` option", f.clone(), "pkg/string.js", ResolveError::ExtensionAlias("string.js".into(), "string.ts".into(), f.join("node_modules/pkg/dist"))), - // TODO: The error is PackagePathNotExported in enhanced-resolve - // ("should throw error with the `extensionAlias` option", f.clone(), "pkg/string.js", ResolveError::PackagePathNotExported("node_modules/pkg/dist/string.ts".to_string())), - ]; - - for (comment, path, request, error) in fail { - let resolution = resolver.resolve(&path, request).await; - assert_eq!(resolution, Err(error), "{comment} {path:?} {request}"); - } -} - -// Small script for generating the test cases from enhanced-resolve -// for (c of testCases) { -// console.log("TestCase {") -// console.log(`name: ${JSON.stringify(c.name)},`) -// if (c.expect instanceof Error) { -// console.log(`expect: None,`) -// } else { -// console.log(`expect: Some(vec!${JSON.stringify(c.expect)}),`) -// } -// console.log(`exports_field: exports_field(json!(${JSON.stringify(c.suite[0], null, 2)})),`) -// console.log(`request: "${c.suite[1]}",`) -// console.log(`condition_names: vec!${JSON.stringify(c.suite[2])},`) -// console.log("},") -//} -struct TestCase { - name: &'static str, - expect: Option>, - exports_field: package_json::JSONValue<'static>, - request: &'static str, - condition_names: Vec<&'static str>, -} - -#[allow(clippy::needless_pass_by_value)] -fn exports_field(value: simd_json::value::OwnedValue) -> package_json::JSONValue<'static> { - value.into() -} - -#[tokio::test] -async fn test_cases() { - let test_cases = [ - TestCase { - name: "sample #1", - expect: Some(vec!["./dist/test/file.js"]), - exports_field: exports_field(json!({ - "./foo/": { - "import": [ - "./dist/", - "./src/" - ], - "webpack": "./wp/" - }, - ".": "./main.js" - })), - request: "./foo/test/file.js", - condition_names: vec!["import", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "sample #1", - expect: Some(vec!["./src/test/file.js"]), - exports_field: exports_field(json!({ - "./foo/": { - "import": [ - "./src/" - ], - "webpack": "./wp/" - }, - ".": "./main.js" - })), - request: "./foo/test/file.js", - condition_names: vec!["import", "webpack"], - }, - TestCase { - name: "sample #1 (wildcard)", - expect: Some(vec!["./dist/test/file.js"]), - exports_field: exports_field(json!({ - "./foo/*": { - "import": [ - "./dist/*", - "./src/*" - ], - "webpack": "./wp/*" - }, - ".": "./main.js" - })), - request: "./foo/test/file.js", - condition_names: vec!["import", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "sample #1 (wildcard)", - expect: Some(vec!["./src/test/file.js"]), - exports_field: exports_field(json!({ - "./foo/*": { - "import": [ - "./src/*" - ], - "webpack": "./wp/*" - }, - ".": "./main.js" - })), - request: "./foo/test/file.js", - condition_names: vec!["import", "webpack"], - }, - TestCase { - name: "sample #2", - expect: Some(vec!["./data/timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./timezones/": "./data/timezones/" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #2 (wildcard)", - expect: Some(vec!["./data/timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./timezones/*": "./data/timezones/*" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #3", - expect: Some(vec!["./data/timezones/timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./": "./data/timezones/" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #3 (wildcard)", - expect: Some(vec!["./data/timezones/timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./*": "./data/timezones/*.mjs" - })), - request: "./timezones/pdt", - condition_names: vec![], - }, - TestCase { - name: "sample #4", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./lib/": { - "browser": [ - "./browser/" - ] - }, - "./dist/index.js": { - "node": "./index.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "sample #4 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./lib/*": { - "browser": [ - "./browser/*" - ] - }, - "./dist/index.js": { - "node": "./index.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "sample #5", - expect: Some(vec!["./browser/index.js"]), - exports_field: exports_field(json!({ - "./lib/": { - "browser": [ - "./browser/" - ] - }, - "./dist/index.js": { - "node": "./index.js", - "default": "./browser/index.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "sample #5 (wildcard)", - expect: Some(vec!["./browser/index.js"]), - exports_field: exports_field(json!({ - "./lib/*": { - "browser": [ - "./browser/*" - ] - }, - "./dist/index.js": { - "node": "./index.js", - "default": "./browser/index.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "sample #6", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./dist/a": "./dist/index.js" - })), - request: "./dist/aaa", - condition_names: vec![], - }, - TestCase { - name: "sample #7", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./dist/a/a/": "./dist/index.js" - })), - request: "./dist/a/a", - condition_names: vec![], - }, - TestCase { - name: "sample #7 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./dist/a/a/*": "./dist/index.js" - })), - request: "./dist/a/a", - condition_names: vec![], - }, - TestCase { - name: "sample #8", - expect: Some(vec![]), - exports_field: exports_field(json!({ - ".": "./index.js" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #9", - expect: Some(vec!["./main.js"]), - exports_field: exports_field(json!({ - "./index.js": "./main.js" - })), - request: "./index.js", - condition_names: vec![], - }, - TestCase { - name: "sample #10", - expect: Some(vec!["./ok.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./#foo", - condition_names: vec![], - }, - TestCase { - name: "sample #11", - expect: Some(vec!["./ok.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./bar#foo", - condition_names: vec![], - }, - TestCase { - name: "sample #12", - expect: Some(vec!["./ok.js#abc"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./#zapp/ok.js#abc", - condition_names: vec![], - }, - TestCase { - name: "sample #12", - expect: Some(vec!["./ok.js#abc"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./#zapp/ok.js#abc", - condition_names: vec![], - }, - TestCase { - name: "sample #13", - expect: Some(vec!["./ok.js?abc"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./#zapp/ok.js?abc", - condition_names: vec![], - }, - TestCase { - name: "sample #14", - expect: Some(vec!["./🎉.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./#zapp/🎉.js", - condition_names: vec![], - }, - TestCase { - name: "sample #15", - expect: Some(vec!["./%F0%9F%8E%89.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./#zapp/%F0%9F%8E%89.js", - condition_names: vec![], - }, - TestCase { - name: "sample #16", - expect: Some(vec!["./ok.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./🎉", - condition_names: vec![], - }, - TestCase { - name: "sample #17", - expect: Some(vec!["./other.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./%F0%9F%8E%89", - condition_names: vec![], - }, - TestCase { - name: "sample #18", - expect: Some(vec!["./ok.js"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./module", - condition_names: vec![], - }, - TestCase { - name: "sample #19", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./module#foo", - condition_names: vec![], - }, - TestCase { - name: "sample #20", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./zzz*" - })), - request: "./module?foo", - condition_names: vec![], - }, - TestCase { - name: "sample #21", - expect: Some(vec!["./zizizi"]), - exports_field: exports_field(json!({ - "./#foo": "./ok.js", - "./module": "./ok.js", - "./🎉": "./ok.js", - "./%F0%9F%8E%89": "./other.js", - "./bar#foo": "./ok.js", - "./#zapp/": "./", - "./#zipp*": "./z*z*z*" - })), - request: "./#zippi", - condition_names: vec![], - }, - TestCase { - name: "sample #22", - expect: Some(vec!["./d?e?f"]), - exports_field: exports_field(json!({ - "./a?b?c/": "./" - })), - request: "./a?b?c/d?e?f", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #1", - expect: Some(vec!["./dist/index.js"]), - exports_field: exports_field(json!({ - ".": "./dist/index.js" - })), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #2", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./": "./", - "./*": "./*", - "./dist/index.js": "./dist/index.js" - })), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #3", - expect: Some(vec!["./dist/a.js"]), - exports_field: exports_field(json!({ - "./dist/": "./dist/", - "./dist/*": "./dist/*", - "./dist*": "./dist*", - "./dist/index.js": "./dist/a.js" - })), - request: "./dist/index.js", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #4", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "./": { - "browser": [ - "./browser/" - ] - }, - "./*": { - "browser": [ - "./browser/*" - ] - }, - "./dist/index.js": { - "browser": "./index.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #5", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./": { - "browser": [ - "./browser/" - ] - }, - "./*": { - "browser": [ - "./browser/*" - ] - }, - "./dist/index.js": { - "node": "./node.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #6", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - ".": { - "browser": "./index.js", - "node": "./src/node/index.js", - "default": "./src/index.js" - } - })), - request: ".", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #7", - expect: Some(vec!["./src/index.js"]), // `enhanced_resolve` is `None` - exports_field: exports_field(json!({ - ".": { - "default": "./src/index.js", - "browser": "./index.js", - "node": "./src/node/index.js" - } - })), - request: ".", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #8", - expect: Some(vec!["./src/index.js"]), - exports_field: exports_field(json!({ - ".": { - "browser": "./index.js", - "node": "./src/node/index.js", - "default": "./src/index.js" - } - })), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #9", - expect: Some(vec!["./index"]), - exports_field: exports_field(json!({ - ".": "./index" - })), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #10", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "./index": "./index.js" - })), - request: "./index", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #11", - expect: Some(vec!["./foo.js"]), - exports_field: exports_field(json!({ - "./": "./", - "./*": "./*", - "./dist/index.js": "./dist/index.js" - })), - request: "./foo.js", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #12", - expect: Some(vec!["./foo/bar/baz.js"]), - exports_field: exports_field(json!({ - "./": "./", - "./*": "./*", - "./dist/index.js": "./dist/index.js" - })), - request: "./foo/bar/baz.js", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #13", - expect: Some(vec!["./foo/bar/baz.js"]), - exports_field: exports_field(json!({ - "./": "./", - "./dist/index.js": "./dist/index.js" - })), - request: "./foo/bar/baz.js", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #14", - expect: Some(vec!["./foo/bar/baz.js"]), - exports_field: exports_field(json!({ - "./*": "./*", - "./dist/index.js": "./dist/index.js" - })), - request: "./foo/bar/baz.js", - condition_names: vec![], - }, - TestCase { - name: "Direct and conditional mapping #1", - expect: Some(vec![]), - exports_field: exports_field(json!({ - ".": [{ - "browser": "./browser.js" - }, { - "require": "./require.js" - }, { - "import": "./import.mjs" - }] - })), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "Direct and conditional mapping #2", - expect: Some(vec!["./import.mjs"]), - exports_field: exports_field(json!({ - ".": [{ - "browser": "./browser.js" - }, { - "require": "./require.js" - }, { - "import": "./import.mjs" - }] - })), - request: ".", - condition_names: vec!["import"], - }, - TestCase { - name: "Direct and conditional mapping #3", - expect: Some(vec!["./require.js"]), - exports_field: exports_field(json!({ - ".": [ - { - "browser": "./browser.js" - }, - { - "require": "./require.js" - }, - { - "import": "./import.mjs" - } - ] - })), - request: ".", - condition_names: vec!["import", "require"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "Direct and conditional mapping #3", - expect: Some(vec!["./import.mjs"]), - exports_field: exports_field(json!({ - ".": [{ - "browser": "./browser.js" - }, { - "import": "./import.mjs" - }] - })), - request: ".", - condition_names: vec!["import", "require"], - }, - TestCase { - name: "Direct and conditional mapping #4", - expect: Some(vec!["./require.js"]), - exports_field: exports_field(json!({ - ".": [{ - "browser": "./browser.js" - }, { - "require": [ - "./require.js" - ] - }, { - "import": [ - "./import.mjs", - "./import.js" - ] - }] - })), - request: ".", - condition_names: vec!["import", "require"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "Direct and conditional mapping #4", - expect: Some(vec!["./import.mjs"]), - exports_field: exports_field(json!({ - ".": [ - { - "browser": "./browser.js" - }, - { - "import": [ - "./import.mjs", - "./import.js" - ] - } - ] - })), - request: ".", - condition_names: vec!["import", "require"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "Direct and conditional mapping #4", - expect: Some(vec!["./import.js"]), - exports_field: exports_field(json!({ - ".": [ - { - "browser": "./browser.js" - }, - { - "import": [ - "./import.js" - ] - } - ] - })), - request: ".", - condition_names: vec!["import", "require"], - }, - TestCase { - name: "mapping to a folder root #1", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./timezones": "./data/timezones/" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #2", - expect: None, - exports_field: exports_field(json!({ - "./timezones/": "./data/timezones" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #3", - expect: Some(vec!["./data/timezones/pdt/index.mjs"]), - exports_field: exports_field(json!({ - "./timezones/pdt/": "./data/timezones/pdt/" - })), - request: "./timezones/pdt/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #3 (wildcard)", - expect: Some(vec!["./data/timezones/pdt/index.mjs"]), - exports_field: exports_field(json!({ - "./timezones/pdt/*": "./data/timezones/pdt/*" - })), - request: "./timezones/pdt/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #4", - expect: Some(vec!["./timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./": "./timezones/" - })), - request: "./pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #4 (wildcard)", - expect: Some(vec!["./timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./*": "./timezones/*" - })), - request: "./pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #5", - expect: Some(vec!["./timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./": "./" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #5 (wildcard)", - expect: Some(vec!["./timezones/pdt.mjs"]), - exports_field: exports_field(json!({ - "./*": "./*" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #6", - expect: None, - exports_field: exports_field(json!({ - "./": "." - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #6 (wildcard)", - expect: None, - exports_field: exports_field(json!({ - "./*": "." - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #7", - expect: Some(vec![]), - exports_field: exports_field(json!({ - ".": "./" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #7 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - ".": "./*" - })), - request: "./timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #1", - expect: Some(vec!["./lib/index.mjs"]), - exports_field: exports_field(json!({ - "./": "./", - "./dist/": "./lib/" - })), - request: "./dist/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #1 (wildcard)", - expect: Some(vec!["./lib/index.mjs"]), - exports_field: exports_field(json!({ - "./*": "./*", - "./dist/*": "./lib/*" - })), - request: "./dist/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #2", - expect: Some(vec!["./dist/utils/index.js"]), - exports_field: exports_field(json!({ - "./dist/utils/": "./dist/utils/", - "./dist/": "./lib/" - })), - request: "./dist/utils/index.js", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #2 (wildcard)", - expect: Some(vec!["./dist/utils/index.js"]), - exports_field: exports_field(json!({ - "./dist/utils/*": "./dist/utils/*", - "./dist/*": "./lib/*" - })), - request: "./dist/utils/index.js", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #3", - expect: Some(vec!["./dist/utils/index.js"]), - exports_field: exports_field(json!({ - "./dist/utils/index.js": "./dist/utils/index.js", - "./dist/utils/": "./dist/utils/index.mjs", - "./dist/": "./lib/" - })), - request: "./dist/utils/index.js", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #3 (wildcard)", - expect: Some(vec!["./dist/utils/index.js"]), - exports_field: exports_field(json!({ - "./dist/utils/index.js": "./dist/utils/index.js", - "./dist/utils/*": "./dist/utils/index.mjs", - "./dist/*": "./lib/*" - })), - request: "./dist/utils/index.js", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #4", - expect: Some(vec!["./lib/index.mjs"]), - exports_field: exports_field(json!({ - "./": { - "browser": "./browser/" - }, - "./dist/": "./lib/" - })), - request: "./dist/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "the longest matching path prefix is prioritized #4 (wildcard)", - expect: Some(vec!["./lib/index.mjs"]), - exports_field: exports_field(json!({ - "./*": { - "browser": "./browser/*" - }, - "./dist/*": "./lib/*" - })), - request: "./dist/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "conditional mapping folder #1", - // `lodash/` does not start with './' so fallbacks to util - expect: Some(vec!["./utils/index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": [ - "lodash/", - "./utils/" - ], - "node": [ - "./utils-node/" - ] - } - })), - request: "./utils/index.js", - condition_names: vec!["browser"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "conditional mapping folder #1", - expect: Some(vec!["./utils/index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": [ - "./utils/" - ], - "node": [ - "./utils-node/" - ] - } - })), - request: "./utils/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "conditional mapping folder #1 (wildcard)", - // `lodash/` does not start with './' so fallbacks to util - expect: Some(vec!["./utils/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": [ - "lodash/*", - "./utils/*" - ], - "node": [ - "./utils-node/*" - ] - } - })), - request: "./utils/index.js", - condition_names: vec!["browser"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "conditional mapping folder #1 (wildcard)", - expect: Some(vec!["./utils/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": [ - "./utils/*" - ], - "node": [ - "./utils-node/*" - ] - } - })), - request: "./utils/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "conditional mapping folder #2", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/": { - "webpack": "./wpk/", - "browser": [ - "lodash/", - "./utils/" - ], - "node": [ - "./node/" - ] - } - })), - request: "./utils/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "conditional mapping folder #2 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/*": { - "webpack": "./wpk/*", - "browser": [ - "lodash/*", - "./utils/*" - ], - "node": [ - "./node/*" - ] - } - })), - request: "./utils/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "conditional mapping folder #3", - expect: Some(vec!["./wpk/index.mjs"]), - exports_field: exports_field(json!({ - "./utils/": { - "webpack": "./wpk/", - "browser": [ - "lodash/", - "./utils/" - ], - "node": [ - "./utils/" - ] - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser", "webpack"], - }, - TestCase { - name: "conditional mapping folder #3 (wildcard)", - expect: Some(vec!["./wpk/index.mjs"]), - exports_field: exports_field(json!({ - "./utils/*": { - "webpack": "./wpk/*", - "browser": [ - "lodash/*", - "./utils/*" - ], - "node": [ - "./utils/*" - ] - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser", "webpack"], - }, - TestCase { - name: "incorrect exports field #1", - expect: None, - exports_field: exports_field(json!({ - "/utils/": "./a/" - })), - request: "./utils/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #2", - expect: None, - exports_field: exports_field(json!({ - "./utils/": "/a/" - })), - request: "./utils/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #3", - expect: None, - exports_field: exports_field(json!({ - "/utils/": { - "browser": "./a/", - "default": "./b/" - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect exports field #4", - expect: None, - exports_field: exports_field(json!({ - "./utils/": { - "browser": "/a/", - "default": "/b/" - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect exports field #4 (wildcard)", - expect: None, - exports_field: exports_field(json!({ - "./utils/*": { - "browser": "/a/", - "default": "/b/" - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect exports field #5", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/index": "./a/index.js" - })), - request: "./utils/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #6", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/index.mjs": "./a/index.js" - })), - request: "./utils/index", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #7", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/index": { - "browser": "./a/index.js", - "default": "./b/index.js" - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect exports field #8", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/index.mjs": { - "browser": "./a/index.js", - "default": "./b/index.js" - } - })), - request: "./utils/index", - condition_names: vec!["browser"], - }, - // Requests that are not `./` does not apply to `package_exports_resolve` - // TestCase { - // name: "incorrect request #1", - // expect: None, - // exports_field: exports_field(json!({ - // "./utils/": "./a/" - // })), - // request: "/utils/index.mjs", - // condition_names: vec![], - // }, - // TestCase { - // name: "incorrect request #2", - // expect: None, - // exports_field: exports_field(json!({ - // "./utils/": { - // "browser": "./a/", - // "default": "./b/" - // } - // })), - // request: "/utils/index.mjs", - // condition_names: vec!["browser"], - // }, - // TestCase { - // name: "incorrect request #3", - // expect: None, - // exports_field: exports_field(json!({ - // "./utils/": { - // "browser": "./a/", - // "default": "./b/" - // } - // })), - // request: "../utils/index.mjs", - // condition_names: vec!["browser"], - // }, - // TestCase { - // name: "incorrect request #4", - // expect: None, - // exports_field: exports_field(json!({ - // "./utils/": { - // "browser": "./a/", - // "default": "./b/" - // } - // })), - // request: "/utils/index.mjs/", - // condition_names: vec!["browser"], - // }, - TestCase { - name: "backtracking package base #1", - expect: Some(vec!["./dist/index"]), - exports_field: exports_field(json!({ - "./../../utils/": "./dist/" - })), - request: "./../../utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #1 (wildcard)", - expect: Some(vec!["./dist/index"]), - exports_field: exports_field(json!({ - "./../../utils/*": "./dist/*" - })), - request: "./../../utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #2", - expect: None, - exports_field: exports_field(json!({ - "../../utils/": "./dist/" - })), - request: "../../utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #2 (wildcard)", - expect: None, - exports_field: exports_field(json!({ - "../../utils/*": "./dist/*" - })), - request: "../../utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #3", - expect: None, - exports_field: exports_field(json!({ - "./utils/": "../src/" - })), - request: "./utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #3 (wildcard)", - expect: None, - exports_field: exports_field(json!({ - "./utils/*": "../src/*" - })), - request: "./utils/index", - condition_names: vec![], - }, - // enhanced-resolve does not handle backtracking here - // TestCase { - // name: "backtracking package base #4", - // expect: Some(vec!["./../src/index"]), - // exports_field: exports_field(json!({ - // "./utils/": "./../src/" - // })), - // request: "./utils/index", - // condition_names: vec![], - // }, - // TestCase { - // name: "backtracking package base #4 (wildcard)", - // expect: Some(vec!["./../src/index"]), - // exports_field: exports_field(json!({ - // "./utils/*": "./../src/*" - // })), - // request: "./utils/index", - // condition_names: vec![], - // }, - // TestCase { - // name: "backtracking package base #5", - // expect: Some(vec!["./src/../index.js"]), - // exports_field: exports_field(json!({ - // "./utils/index": "./src/../index.js" - // })), - // request: "./utils/index", - // condition_names: vec![], - // }, - TestCase { - name: "backtracking package base #6", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/../utils/index": "./src/../index.js" - })), - request: "./utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #7", - expect: None, - exports_field: exports_field(json!({ - "./utils/": { - "browser": "../this/" - } - })), - request: "./utils/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking package base #7", - expect: None, - exports_field: exports_field(json!({ - "./utils/*": { - "browser": "../this/*" - } - })), - request: "./utils/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking package base #8", - // We throw "InvalidPackageTarget" - // expect: Some(vec!["./utils/../index"]), - expect: None, - exports_field: exports_field(json!({ - "./utils/": { - "browser": "./utils/../" - } - })), - request: "./utils/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking package base #8 (wildcard)", - // We throw "InvalidPackageTarget" - // expect: Some(vec!["./utils/../index"]), - expect: None, - exports_field: exports_field(json!({ - "./utils/*": { - "browser": "./utils/../*" - } - })), - request: "./utils/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking package base #9", - expect: Some(vec!["./dist/index"]), - exports_field: exports_field(json!({ - "./": "./src/../../", - "./dist/": "./dist/" - })), - request: "./dist/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking package base #9 (wildcard)", - expect: Some(vec!["./dist/index"]), - exports_field: exports_field(json!({ - "./*": "./src/../../*", - "./dist/*": "./dist/*" - })), - request: "./dist/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking target folder #1", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./dist/timezone/../../index"]), - exports_field: exports_field(json!({ - "./utils/": "./dist/" - })), - request: "./utils/timezone/../../index", - condition_names: vec![], - }, - TestCase { - name: "backtracking target folder #1 (wildcard)", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./dist/timezone/../../index"]), - exports_field: exports_field(json!({ - "./utils/*": "./dist/*" - })), - request: "./utils/timezone/../../index", - condition_names: vec![], - }, - TestCase { - name: "backtracking target folder #2", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./dist/timezone/../index"]), - exports_field: exports_field(json!({ - "./utils/": "./dist/" - })), - request: "./utils/timezone/../index", - condition_names: vec![], - }, - TestCase { - name: "backtracking target folder #2 (wildcard)", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./dist/timezone/../index"]), - exports_field: exports_field(json!({ - "./utils/*": "./dist/*" - })), - request: "./utils/timezone/../index", - condition_names: vec![], - }, - TestCase { - name: "backtracking target folder #3", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./dist/target/../../index"]), - exports_field: exports_field(json!({ - "./utils/": "./dist/target/" - })), - request: "./utils/../../index", - condition_names: vec![], - }, - TestCase { - name: "backtracking target folder #3 (wildcard)", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./dist/target/../../index"]), - exports_field: exports_field(json!({ - "./utils/*": "./dist/target/*" - })), - request: "./utils/../../index", - condition_names: vec![], - }, - // enhanced-resolve does not handle `node_modules` in target - TestCase { - name: "nested node_modules path #1", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./node_modules/lodash/dist/index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": "./node_modules/" - } - })), - request: "./utils/lodash/dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested node_modules path #1 (wildcard)", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./node_modules/lodash/dist/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": "./node_modules/*" - } - })), - request: "./utils/lodash/dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested node_modules path #2", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./utils/../node_modules/lodash/dist/index.js"]), - exports_field: exports_field(json!({ - "./utils/": "./utils/../node_modules/" - })), - request: "./utils/lodash/dist/index.js", - condition_names: vec![], - }, - TestCase { - name: "nested node_modules path #2 (wildcard)", - // We return InvalidPackageTarget - expect: None, - // expect: Some(vec!["./utils/../node_modules/lodash/dist/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": "./utils/../node_modules/*" - })), - request: "./utils/lodash/dist/index.js", - condition_names: vec![], - }, - TestCase { - name: "nested mapping #1", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": "./", - "default": { - "node": "./node/" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested mapping #1 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": "./*", - "default": { - "node": "./node/*" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested mapping #2", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "nested mapping #2", - expect: Some(vec!["./node/index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "webpack"], - }, - TestCase { - name: "nested mapping #2 (wildcard)", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./*", - "./node/*" - ], - "default": { - "node": "./node/*" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "nested mapping #2 (wildcard)", - expect: Some(vec!["./node/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./node/*" - ], - "default": { - "node": "./node/*" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "webpack"], - }, - TestCase { - name: "nested mapping #3", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["webpack"], - }, - TestCase { - name: "nested mapping #3 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./*", - "./node/*" - ], - "default": { - "node": "./node/*" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["webpack"], - }, - TestCase { - name: "nested mapping #4", - expect: Some(vec!["./node/index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["node", "browser"], - }, - TestCase { - name: "nested mapping #4 (wildcard)", - expect: Some(vec!["./node/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./*", - "./node/*" - ], - "default": { - "node": "./node/*" - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["node", "browser"], - }, - TestCase { - name: "nested mapping #5", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": { - "webpack": [ - "./wpck/" - ] - } - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "node"], - }, - TestCase { - name: "nested mapping #5 (wildcard)", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./*", - "./node/*" - ], - "default": { - "node": { - "webpack": [ - "./wpck/*" - ] - } - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "node"], - }, - TestCase { - name: "nested mapping #6", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": { - "webpack": [ - "./wpck/" - ] - } - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "node", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "nested mapping #6", - expect: Some(vec!["./node/index.js"]), - exports_field: exports_field(json!({ - "./utils/": { - "browser": { - "webpack": [ - "./node/" - ], - "default": { - "node": { - "webpack": [ - "./wpck/" - ] - } - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "node", "webpack"], - }, - TestCase { - name: "nested mapping #6 (wildcard)", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./*", - "./node/*" - ], - "default": { - "node": { - "webpack": [ - "./wpck/*" - ] - } - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "node", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "nested mapping #6 (wildcard)", - expect: Some(vec!["./node/index.js"]), - exports_field: exports_field(json!({ - "./utils/*": { - "browser": { - "webpack": [ - "./node/*" - ], - "default": { - "node": { - "webpack": [ - "./wpck/*" - ] - } - } - } - } - })), - request: "./utils/index.js", - condition_names: vec!["browser", "node", "webpack"], - }, - TestCase { - name: "nested mapping #7", - expect: Some(vec!["./y.js"]), - exports_field: exports_field(json!({ - "./a.js": { - "abc": { - "def": "./x.js" - }, - "ghi": "./y.js" - } - })), - request: "./a.js", - condition_names: vec!["abc", "ghi"], - }, - TestCase { - name: "nested mapping #8", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "./a.js": { - "abc": { - "def": "./x.js", - "default": [] - }, - "ghi": "./y.js" - } - })), - request: "./a.js", - condition_names: vec!["abc", "ghi"], - }, - TestCase { - name: "syntax sugar #1", - expect: Some(vec!["./main.js"]), - exports_field: exports_field(json!("./main.js")), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "syntax sugar #2", - expect: Some(vec![]), - exports_field: exports_field(json!("./main.js")), - request: "./lib.js", - condition_names: vec![], - }, - TestCase { - name: "syntax sugar #3", - expect: Some(vec!["./a.js"]), - exports_field: exports_field(json!(["./a.js", "./b.js"])), - request: ".", - condition_names: vec![], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "syntax sugar #3", - expect: Some(vec!["./b.js"]), - exports_field: exports_field(json!(["./b.js"])), - request: ".", - condition_names: vec![], - }, - TestCase { - name: "syntax sugar #4", - expect: Some(vec![]), - exports_field: exports_field(json!(["./a.js", "./b.js"])), - request: "./lib.js", - condition_names: vec![], - }, - TestCase { - name: "syntax sugar #5", - expect: Some(vec!["./index.js"]), - exports_field: exports_field(json!({ - "browser": { - "default": "./index.js" - } - })), - request: ".", - condition_names: vec!["browser"], - }, - TestCase { - name: "syntax sugar #6", - expect: Some(vec![]), - exports_field: exports_field(json!({ - "browser": { - "default": "./index.js" - } - })), - request: "./lib.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "syntax sugar #7", - expect: None, - exports_field: exports_field(json!({ - "./node": "./node.js", - "browser": { - "default": "./index.js" - } - })), - request: ".", - condition_names: vec!["browser"], - }, - TestCase { - name: "syntax sugar #8", - expect: None, - exports_field: exports_field(json!({ - "browser": { - "default": "./index.js" - }, - "./node": "./node.js" - })), - request: ".", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard longest #1", - expect: Some(vec!["./abc/d"]), - exports_field: exports_field(json!({ - "./ab*": "./ab/*", - "./abc*": "./abc/*", - "./a*": "./a/*" - })), - request: "./abcd", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard longest #2", - expect: Some(vec!["./abc/d/e"]), - exports_field: exports_field(json!({ - "./ab*": "./ab/*", - "./abc*": "./abc/*", - "./a*": "./a/*" - })), - request: "./abcd/e", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard longest #3", - expect: Some(vec!["./abc/d"]), - exports_field: exports_field(json!({ - "./x/ab*": "./ab/*", - "./x/abc*": "./abc/*", - "./x/a*": "./a/*" - })), - request: "./x/abcd", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard longest #4", - expect: Some(vec!["./abc/d/e"]), - exports_field: exports_field(json!({ - "./x/ab*": "./ab/*", - "./x/abc*": "./abc/*", - "./x/a*": "./a/*" - })), - request: "./x/abcd/e", - condition_names: vec!["browser"], - }, - TestCase { - name: "path tree edge case #1", - expect: Some(vec!["./A/b/d.js"]), - exports_field: exports_field(json!({ - "./a/": "./A/", - "./a/b/c": "./c.js" - })), - request: "./a/b/d.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #1 (wildcard)", - expect: Some(vec!["./A/b/d.js"]), - exports_field: exports_field(json!({ - "./a/*": "./A/*", - "./a/b/c": "./c.js" - })), - request: "./a/b/d.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #2", - expect: Some(vec!["./A/c.js"]), - exports_field: exports_field(json!({ - "./a/": "./A/", - "./a/b": "./b.js" - })), - request: "./a/c.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #2 (wildcard)", - expect: Some(vec!["./A/c.js"]), - exports_field: exports_field(json!({ - "./a/*": "./A/*", - "./a/b": "./b.js" - })), - request: "./a/c.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #3", - expect: Some(vec!["./A/b/d/c.js"]), - exports_field: exports_field(json!({ - "./a/": "./A/", - "./a/b/c/d": "./c.js" - })), - request: "./a/b/d/c.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #3 (wildcard)", - expect: Some(vec!["./A/b/d/c.js"]), - exports_field: exports_field(json!({ - "./a/*": "./A/*", - "./a/b/c/d": "./c.js" - })), - request: "./a/b/d/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #1", - expect: Some(vec!["./A/b.js"]), - exports_field: exports_field(json!({ - "./a/*.js": "./A/*.js" - })), - request: "./a/b.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #2", - expect: Some(vec!["./A/b/c.js"]), - exports_field: exports_field(json!({ - "./a/*.js": "./A/*.js" - })), - request: "./a/b/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #3", - expect: Some(vec!["./A/b/c.js"]), - exports_field: exports_field(json!({ - "./a/*/c.js": "./A/*/c.js" - })), - request: "./a/b/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #4", - expect: Some(vec!["./A/b/b.js"]), - exports_field: exports_field(json!({ - "./a/*/c.js": "./A/*/*.js" - })), - request: "./a/b/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #5", - expect: Some(vec!["./browser/index.js"]), - exports_field: exports_field(json!({ - "./lib/*": { - "browser": [ - "./browser/*" - ] - }, - "./dist/*.js": { - "node": "./*.js", - "default": "./browser/*.js" - } - })), - request: "./dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard pattern #5", - expect: Some(vec!["./browser/index.js"]), - exports_field: exports_field(json!({ - "./lib/*": { - "browser": [ - "./browser/*" - ] - }, - "./dist/*.js": { - "node": "./*.js", - "default": "./browser/*.js" - } - })), - request: "./lib/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard pattern #6", - expect: Some(vec!["./browser/foo/bar.js"]), - exports_field: exports_field(json!({ - "./lib/*/bar.js": { - "browser": [ - "./browser/*/bar.js" - ] - }, - "./dist/*/bar.js": { - "node": "./*.js", - "default": "./browser/*.js" - } - })), - request: "./lib/foo/bar.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard pattern #6", - expect: Some(vec!["./browser/foo.js"]), - exports_field: exports_field(json!({ - "./lib/*/bar.js": { - "browser": [ - "./browser/*/bar.js" - ] - }, - "./dist/*/bar.js": { - "node": "./*.js", - "default": "./browser/*.js" - } - })), - request: "./dist/foo/bar.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "wildcard pattern #7", - expect: Some(vec!["./browser/foo/default.js"]), - exports_field: exports_field(json!({ - "./lib/*/bar.js": { - "browser": [ - "./browser/*/bar.js" - ] - }, - "./dist/*/bar.js": { - "node": "./*.js", - "default": "./browser/*/default.js" - } - })), - request: "./dist/foo/bar.js", - condition_names: vec!["default"], - }, - TestCase { - name: "wildcard pattern #8", - expect: Some(vec!["./A/b/b/b.js"]), - exports_field: exports_field(json!({ - "./a/*/c.js": "./A/*/*/*.js" - })), - request: "./a/b/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #9", - expect: Some(vec!["./A/b/b/b.js"]), - exports_field: exports_field(json!({ - "./a/*/c.js": [ - "./A/*/*/*.js", - "./B/*/*/*.js" - ] - })), - request: "./a/b/c.js", - condition_names: vec![], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "wildcard pattern #9", - expect: Some(vec!["./B/b/b/b.js"]), - exports_field: exports_field(json!({ - "./a/*/c.js": [ - "./B/*/*/*.js" - ] - })), - request: "./a/b/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #10", - expect: Some(vec!["./A/b/b/b.js"]), - exports_field: exports_field(json!({ - "./a/foo-*/c.js": "./A/*/*/*.js" - })), - request: "./a/foo-b/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #11", - expect: Some(vec!["./A/b/b/b.js"]), - exports_field: exports_field(json!({ - "./a/*-foo/c.js": "./A/*/*/*.js" - })), - request: "./a/b-foo/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #12", - expect: Some(vec!["./A/b/b/b.js"]), - exports_field: exports_field(json!({ - "./a/foo-*-foo/c.js": "./A/*/*/*.js" - })), - request: "./a/foo-b-foo/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #13", - expect: Some(vec!["./A/b/c/d.js"]), - exports_field: exports_field(json!({ - "./a/foo-*-foo/c.js": "./A/b/c/d.js" - })), - request: "./a/foo-b-foo/c.js", - condition_names: vec![], - }, - TestCase { - name: "wildcard pattern #14", - expect: Some(vec!["./A/b/c/*.js"]), - exports_field: exports_field(json!({ - "./a/foo-foo/c.js": "./A/b/c/*.js" - })), - request: "./a/foo-foo/c.js", - condition_names: vec![], - }, - ]; - - for case in test_cases { - let resolved = Resolver::new(ResolveOptions { - condition_names: case - .condition_names - .iter() - .map(ToString::to_string) - .collect::>(), - ..ResolveOptions::default() - }) - .package_exports_resolve( - "".into(), - case.request, - &case.exports_field, - &mut Ctx::default(), - ) - .await - .map(|p| p.map(|p| p.to_path_buf())); - if let Some(expect) = case.expect { - if expect.is_empty() { - assert!( - matches!(resolved, Err(ResolveError::PackagePathNotExported(_, _))), - "{} {:?}", - &case.name, - &resolved - ); - } else { - for expect in expect { - assert_eq!( - resolved, - Ok(Some(Utf8Path::new(expect).normalize())), - "{}", - &case.name - ); - } - } - } else { - assert!(resolved.is_err(), "{} {resolved:?}", &case.name); - } - } -} diff --git a/src/tests/extension_alias.rs b/src/tests/extension_alias.rs deleted file mode 100644 index 64cf8ff0..00000000 --- a/src/tests/extension_alias.rs +++ /dev/null @@ -1,67 +0,0 @@ -//! - -use crate::{ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -async fn extension_alias() { - let f = super::fixture().join("extension-alias"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - main_files: vec!["index.js".into()], - extension_alias: vec![ - (".js".into(), vec![".ts".into(), ".js".into()]), - (".mjs".into(), vec![".mts".into()]), - ], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should alias fully specified file", f.clone(), "./index.js", f.join("index.ts")), - ("should alias fully specified file when there are two alternatives", f.clone(), "./dir/index.js", f.join("dir/index.ts")), - ("should also allow the second alternative", f.clone(), "./dir2/index.js", f.join("dir2/index.js")), - ("should support alias option without an array", f.clone(), "./dir2/index.mjs", f.join("dir2/index.mts")), - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } - - // should not allow to fallback to the original extension or add extensions - let resolution = resolver.resolve(&f, "./index.mjs").await.unwrap_err(); - let expected = ResolveError::ExtensionAlias("index.mjs".into(), "index.mts".into(), f); - assert_eq!(resolution, expected); -} - -// should not apply extension alias to extensions or mainFiles field -#[tokio::test] -async fn not_apply_to_extension_nor_main_files() { - let f = super::fixture().join("extension-alias"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - main_files: vec!["index.js".into()], - extension_alias: vec![(".js".into(), vec![])], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("directory", f.clone(), "./dir2", "dir2/index.js"), - ("file", f.clone(), "./dir2/index", "dir2/index.js"), - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - let expected = f.join(expected); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} diff --git a/src/tests/extensions.rs b/src/tests/extensions.rs deleted file mode 100644 index 66e971ed..00000000 --- a/src/tests/extensions.rs +++ /dev/null @@ -1,154 +0,0 @@ -//! - -use rustc_hash::FxHashSet; - -use crate::{ - EnforceExtension, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver, - ResolverPath, -}; - -#[tokio::test] -async fn extensions() { - let f = super::fixture().join("extensions"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".ts".into(), ".js".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should resolve according to order of provided extensions", "./foo", "foo.ts"), - ("should resolve according to order of provided extensions (dir index)", "./dir", "dir/index.ts"), - ("should resolve according to main field in module root", ".", "index.js"), - // This is a core module - // ("should resolve single file module before directory", "module", "node_modules/module.js"), - ("should resolve trailing slash directory before single file", "module/", "node_modules/module/index.ts"), - ]; - - for (comment, request, expected_path) in pass { - let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); - let expected = f.join(expected_path); - assert_eq!( - resolved_path, - Ok(expected), - "{comment} {request} {expected_path}" - ); - } - - #[rustfmt::skip] - let fail = [ - ("not resolve to file when request has a trailing slash (relative)", "./foo.js/", "./foo.js/".into()) - ]; - - for (comment, request, expected_error) in fail { - let resolution = resolver.resolve(&f, request).await; - let error = ResolveError::NotFound(expected_error); - assert_eq!(resolution, Err(error), "{comment} {request} {resolution:?}"); - } -} - -// should default enforceExtension to true when extensions includes an empty string -#[tokio::test] -async fn default_enforce_extension() { - let f = super::fixture().join("extensions"); - - let mut ctx = ResolveContext::default(); - let resolved = Resolver::new(ResolveOptions { - extensions: vec![".ts".into(), String::new(), ".js".into()], - ..ResolveOptions::default() - }) - .resolve_with_context(&f, "./foo", &mut ctx) - .await; - - assert_eq!( - resolved.map(Resolution::into_path_buf), - Ok(f.join("foo.ts")) - ); - assert_eq!( - ctx.file_dependencies, - FxHashSet::from_iter([ - ResolverPath::from(f.join("foo.ts")), - ResolverPath::from(f.join("package.json")), - ]) - ); - assert!(ctx.missing_dependencies.is_empty()); -} - -// should respect enforceExtension when extensions includes an empty string -#[tokio::test] -async fn respect_enforce_extension() { - let f = super::fixture().join("extensions"); - - let mut ctx = ResolveContext::default(); - let resolved = Resolver::new(ResolveOptions { - enforce_extension: EnforceExtension::Disabled, - extensions: vec![".ts".into(), String::new(), ".js".into()], - ..ResolveOptions::default() - }) - .resolve_with_context(&f, "./foo", &mut ctx) - .await; - - assert_eq!( - resolved.map(Resolution::into_path_buf), - Ok(f.join("foo.ts")) - ); - assert_eq!( - ctx.file_dependencies, - FxHashSet::from_iter([ - ResolverPath::from(f.join("foo.ts")), - ResolverPath::from(f.join("package.json")), - ]) - ); - assert_eq!( - ctx.missing_dependencies, - FxHashSet::from_iter([ResolverPath::from(f.join("foo"))]) - ); -} - -#[tokio::test] -async fn multi_dot_extension() { - let f = super::fixture().join("extensions"); - - let resolver = Resolver::new(ResolveOptions { - // Test for `.d.ts`, not part of enhanced-resolve. - extensions: vec![".a.b.c".into(), ".d.ts".into(), ".ts".into(), ".js".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should resolve according to order of provided extensions", "./foo", "foo.ts"), - ("should resolve file with extension", "./app.module", "app.module.js") - ]; - - for (comment, request, expected_path) in pass { - let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); - let expected = f.join(expected_path); - assert_eq!( - resolved_path, - Ok(expected), - "{comment} {request} {expected_path}" - ); - } - - #[rustfmt::skip] - let fail = [ - ("not resolve to file", "./index.", "./index.".into()) - ]; - - for (comment, request, expected_error) in fail { - let resolution = resolver.resolve(&f, request).await; - let error = ResolveError::NotFound(expected_error); - assert_eq!(resolution, Err(error), "{comment} {request} {resolution:?}"); - } -} - -#[test] -#[should_panic = "All extensions must start with a leading dot"] -fn without_leading_dot() { - Resolver::new(ResolveOptions { - extensions: vec!["ts".into(), "js".into()], - ..ResolveOptions::default() - }); -} diff --git a/src/tests/fallback.rs b/src/tests/fallback.rs deleted file mode 100644 index 86abef68..00000000 --- a/src/tests/fallback.rs +++ /dev/null @@ -1,111 +0,0 @@ -//! https://github.com/webpack/enhanced-resolve/blob/main/test/fallback.test.js - -#[tokio::test] -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -async fn fallback() { - use std::path::{Path, PathBuf}; - - use super::memory_fs::MemoryFS; - use crate::{AliasValue, ResolveError, ResolveOptions, ResolverGeneric}; - - let f = Path::new("/"); - - let file_system = MemoryFS::new(&[ - ("/a/index", ""), - ("/a/dir/index", ""), - ("/recursive/index", ""), - ("/recursive/dir/index", ""), - ("/recursive/dir/file", ""), - ("/recursive/dir/dir/index", ""), - ("/b/index", ""), - ("/b/dir/index", ""), - ("/c/index", ""), - ("/c/dir/index", ""), - ("/d/index.js", ""), - ("/d/dir/.empty", ""), - ("/e/index", ""), - ("/e/anotherDir/index", ""), - ("/e/dir/file", ""), - ]); - - let resolver = ResolverGeneric::::new_with_file_system( - file_system, - ResolveOptions { - fallback: vec![ - ("aliasA".into(), vec![AliasValue::Path("a".into())]), - ("b$".into(), vec![AliasValue::Path("a/index".into())]), - ("c$".into(), vec![AliasValue::Path("/a/index".into())]), - ( - "multiAlias".into(), - vec![ - AliasValue::Path("b".into()), - AliasValue::Path("c".into()), - AliasValue::Path("d".into()), - AliasValue::Path("e".into()), - AliasValue::Path("a".into()), - ], - ), - ( - "recursive".into(), - vec![AliasValue::Path("recursive/dir".into())], - ), - ("/d/dir".into(), vec![AliasValue::Path("/c/dir".into())]), - ( - "/d/index.js".into(), - vec![AliasValue::Path("/c/index".into())], - ), - ("ignored".into(), vec![AliasValue::Ignore]), - ("node:path".into(), vec![AliasValue::Ignore]), - ], - modules: vec!["/".into()], - ..ResolveOptions::default() - }, - ); - - #[rustfmt::skip] - let pass = [ - ("should resolve a not aliased module 1", "a", "/a/index"), - ("should resolve a not aliased module 2", "a/index", "/a/index"), - ("should resolve a not aliased module 3", "a/dir", "/a/dir/index"), - ("should resolve a not aliased module 4", "a/dir/index", "/a/dir/index"), - ("should resolve an fallback module 1", "aliasA", "/a/index"), - ("should resolve an fallback module 2", "aliasA/index", "/a/index"), - ("should resolve an fallback module 3", "aliasA/dir", "/a/dir/index"), - ("should resolve an fallback module 4", "aliasA/dir/index", "/a/dir/index"), - ("should resolve a recursive aliased module 1", "recursive", "/recursive/index"), - ("should resolve a recursive aliased module 2", "recursive/index", "/recursive/index"), - ("should resolve a recursive aliased module 3", "recursive/dir", "/recursive/dir/index"), - ("should resolve a recursive aliased module 4", "recursive/dir/index", "/recursive/dir/index"), - ("should resolve a recursive aliased module 5", "recursive/file", "/recursive/dir/file"), - ("should resolve a file aliased module with a query 1", "b?query", "/b/index?query"), - ("should resolve a file aliased module with a query 2", "c?query", "/c/index?query"), - ("should resolve a path in a file aliased module 1", "b/index", "/b/index"), - ("should resolve a path in a file aliased module 2", "b/dir", "/b/dir/index"), - ("should resolve a path in a file aliased module 3", "b/dir/index", "/b/dir/index"), - ("should resolve a path in a file aliased module 4", "c/index", "/c/index"), - ("should resolve a path in a file aliased module 5", "c/dir", "/c/dir/index"), - ("should resolve a path in a file aliased module 6", "c/dir/index", "/c/dir/index"), - ("should resolve a file in multiple aliased dirs 1", "multiAlias/dir/file", "/e/dir/file"), - ("should resolve a file in multiple aliased dirs 2", "multiAlias/anotherDir", "/e/anotherDir/index"), - ]; - - for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(f, request).await.map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(PathBuf::from(expected)), - "{comment} {request}" - ); - } - - #[rustfmt::skip] - let ignore = [ - ("should resolve an ignore module", "ignored", ResolveError::Ignored(f.join("ignored"))), - ("should resolve node: builtin module", "node:path", ResolveError::Ignored(PathBuf::from("/node:path"))), - ]; - - for (comment, request, expected) in ignore { - let resolution = resolver.resolve(f, request).await; - assert_eq!(resolution, Err(expected), "{comment} {request}"); - } -} diff --git a/src/tests/full_specified.rs b/src/tests/full_specified.rs deleted file mode 100644 index cac3fa40..00000000 --- a/src/tests/full_specified.rs +++ /dev/null @@ -1,155 +0,0 @@ -//! https://github.com/webpack/enhanced-resolve/blob/main/test/fullSpecified.test.js - -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -mod windows { - use std::path::PathBuf; - - use super::super::memory_fs::MemoryFS; - use crate::{AliasValue, ResolveOptions, ResolverGeneric}; - - fn file_system() -> MemoryFS { - MemoryFS::new(&[ - ("/a/node_modules/package1/index.js", ""), - ("/a/node_modules/package1/file.js", ""), - ("/a/node_modules/package2/package.json", r#"{"main":"a"}"#), - ("/a/node_modules/package2/a.js", ""), - ("/a/node_modules/package3/package.json", r#"{"main":"dir"}"#), - ("/a/node_modules/package3/dir/index.js", ""), - ( - "/a/node_modules/package4/package.json", - r#"{"browser":{"./a.js":"./b"}}"#, - ), - ("/a/node_modules/package4/a.js", ""), - ("/a/node_modules/package4/b.js", ""), - ("/a/abc.js", ""), - ("/a/dir/index.js", ""), - ("/a/index.js", ""), - ]) - } - - #[tokio::test] - async fn test() { - let file_system = file_system(); - - let resolver = ResolverGeneric::::new_with_file_system( - file_system, - ResolveOptions { - alias: vec![ - ("alias1".into(), vec![AliasValue::from("/a/abc")]), - ("alias2".into(), vec![AliasValue::from("/a")]), - ], - alias_fields: vec![vec!["browser".into()]], - fully_specified: true, - ..ResolveOptions::default() - }, - ); - - let failing_resolves = [ - ("no extensions", "./abc"), - ("no extensions (absolute)", "/a/abc"), - ("no extensions in packages", "package1/file"), - ("no directories", "."), - ("no directories 2", "./"), - ("no directories in packages", "package3/dir"), - ("no extensions in packages 2", "package3/a"), - ]; - - for (comment, request) in failing_resolves { - let resolution = resolver.resolve("/a", request).await; - assert!(resolution.is_err(), "{comment} {request}"); - } - - let successful_resolves = [ - ("fully relative", "./abc.js", "/a/abc.js"), - ("fully absolute", "/a/abc.js", "/a/abc.js"), - ( - "fully relative in package", - "package1/file.js", - "/a/node_modules/package1/file.js", - ), - ( - "extensions in mainFiles", - "package1", - "/a/node_modules/package1/index.js", - ), - ( - "extensions in mainFields", - "package2", - "/a/node_modules/package2/a.js", - ), - ("extensions in alias", "alias1", "/a/abc.js"), - ("directories in alias", "alias2", "/a/index.js"), - ( - "directories in packages", - "package3", - "/a/node_modules/package3/dir/index.js", - ), - ( - "extensions in aliasFields", - "package4/a.js", - "/a/node_modules/package4/b.js", - ), - ]; - - for (comment, request, expected) in successful_resolves { - let resolution = resolver.resolve("/a", request).await.map(|r| r.full_path()); - assert_eq!( - resolution, - Ok(PathBuf::from(expected)), - "{comment} {request}" - ); - } - } - - #[tokio::test] - #[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. - async fn resolve_to_context() { - let file_system = file_system(); - - let resolver = ResolverGeneric::::new_with_file_system( - file_system, - ResolveOptions { - alias: vec![ - ("alias1".into(), vec![AliasValue::from("/a/abc")]), - ("alias2".into(), vec![AliasValue::from("/a")]), - ], - alias_fields: vec![vec!["browser".into()]], - fully_specified: true, - resolve_to_context: true, - ..ResolveOptions::default() - }, - ); - - let successful_resolves = [ - ("current folder", ".", "/a"), - ("current folder 2", "./", "/a"), - ("relative directory", "./dir", "/a/dir"), - ("relative directory 2", "./dir/", "/a/dir"), - ( - "relative directory with query and fragment", - "./dir?123#456", - "/a/dir?123#456", - ), - ( - "relative directory with query and fragment 2", - "./dir/?123#456", - "/a/dir?123#456", - ), - ("absolute directory", "/a/dir", "/a/dir"), - ( - "directory in package", - "package3/dir", - "/a/node_modules/package3/dir", - ), - ]; - - for (comment, request, expected) in successful_resolves { - let resolution = resolver.resolve("/a", request).await.map(|r| r.full_path()); - assert_eq!( - resolution, - Ok(PathBuf::from(expected)), - "{comment} {request}" - ); - } - } -} diff --git a/src/tests/imports_field.rs b/src/tests/imports_field.rs deleted file mode 100644 index cfafde66..00000000 --- a/src/tests/imports_field.rs +++ /dev/null @@ -1,1343 +0,0 @@ -//! https://github.com/webpack/enhanced-resolve/blob/main/test/importsField.test.js -//! -//! The huge imports field test cases are at the bottom of this file. - -use camino::Utf8Path; -use simd_json::{json, prelude::*}; - -use crate::{package_json::JSONValue, Ctx, PathUtil, ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -async fn test_simple() { - let f = super::fixture().join("imports-field"); - let f2 = super::fixture().join("imports-exports-wildcard/node_modules/m/"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - main_files: vec!["index.js".into()], - condition_names: vec!["webpack".into()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should resolve using imports field instead of self-referencing", f.clone(), "#imports-field", f.join("b.js")), - ("should resolve using imports field instead of self-referencing for a subpath", f.join("dir"), "#imports-field", f.join("b.js")), - ("should resolve package #1", f.clone(), "#a/dist/main.js", f.join("node_modules/a/lib/lib2/main.js")), - ("should resolve package #3", f.clone(), "#ccc/index.js", f.join("node_modules/c/index.js")), - ("should resolve package #4", f.clone(), "#c", f.join("node_modules/c/index.js")), - ("should resolve with wildcard pattern", f2.clone(), "#internal/i.js", f2.join("src/internal/i.js")), - // https://github.com/web-infra-dev/rspack/issues/13508 - // https://github.com/nodejs/node/pull/60864 - ("should resolve #/ wildcard imports", f.clone(), "#/foo", f.join("src/foo.js")), - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } - - // Note added: - // * should resolve absolute path as an imports field target - // * should log the correct info - - #[rustfmt::skip] - let fail = [ - ("should disallow resolve out of package scope", f.clone(), "#b", ResolveError::InvalidPackageTarget("../b.js".to_string(), "#b".to_string(), f.join("package.json"))), - ("should resolve package #2", f.clone(), "#a", ResolveError::PackageImportNotDefined("#a".to_string(), f.join("package.json"))), - ]; - - for (comment, path, request, error) in fail { - let resolution = resolver.resolve(&path, request).await; - assert_eq!(resolution, Err(error), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn shared_resolvers() { - let f = super::fixture().join("imports-field"); - - // field name #1 - let resolver1 = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - main_files: vec!["index.js".into()], - imports_fields: vec![vec!["imports".into()]], - condition_names: vec!["webpack".into()], - ..ResolveOptions::default() - }); - - let resolved_path = resolver1 - .resolve(&f, "#imports-field") - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(f.join("b.js"))); - - // field name #2 - let resolver2 = resolver1.clone_with_options(ResolveOptions { - imports_fields: vec![vec!["other".into(), "imports".into()]], - ..ResolveOptions::default() - }); - - let resolved_path = resolver2.resolve(&f, "#b").await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(f.join("a.js"))); -} - -// Small script for generating the test cases from enhanced_resolve -// for (c of testCases) { -// console.log("TestCase {") -// console.log(`name: ${JSON.stringify(c.name)},`) -// if (c.expect instanceof Error) { -// console.log(`expect: None,`) -// } else { -// console.log(`expect: Some(vec!${JSON.stringify(c.expect)}),`) -// } -// console.log(`imports_field: imports_field(json!(${JSON.stringify(c.suite[0], null, 2)})),`) -// console.log(`request: "${c.suite[1]}",`) -// console.log(`condition_names: vec!${JSON.stringify(c.suite[2])},`) -// console.log("},") -// } - -struct TestCase { - name: &'static str, - expect: Option>, - imports_field: JSONValue<'static>, - request: &'static str, - condition_names: Vec<&'static str>, -} - -#[allow(clippy::needless_pass_by_value)] -fn imports_field(value: simd_json::value::OwnedValue) -> JSONValue<'static> { - value.into() -} - -#[tokio::test] -async fn test_cases() { - let test_cases = [ - TestCase { - name: "sample #1", - expect: Some(vec!["./dist/test/file.js"]), - imports_field: imports_field(json!({ - "#abc/": { - "import": [ - "./dist/", - "./src/" - ], - "webpack": "./wp/" - }, - "#abc": "./main.js" - })), - request: "#abc/test/file.js", - condition_names: vec!["import", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "sample #1", - expect: Some(vec!["./src/test/file.js"]), - imports_field: imports_field(json!({ - "#abc/": { - "import": [ - "./src/" - ], - "webpack": "./wp/" - }, - "#abc": "./main.js" - })), - request: "#abc/test/file.js", - condition_names: vec!["import", "webpack"], - }, - TestCase { - name: "sample #2", - expect: Some(vec!["./data/timezones/pdt.mjs"]), - imports_field: imports_field(json!({ - "#1/timezones/": "./data/timezones/" - })), - request: "#1/timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #3", - expect: Some(vec!["./data/timezones/timezones/pdt.mjs"]), - imports_field: imports_field(json!({ - "#aaa/": "./data/timezones/", - "#a/": "./data/timezones/" - })), - request: "#a/timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #4", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/lib/": { - "browser": [ - "./browser/" - ] - }, - "#a/dist/index.js": { - "node": "./index.js" - } - })), - request: "#a/dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "sample #5", - expect: Some(vec!["./browser/index.js"]), - imports_field: imports_field(json!({ - "#a/lib/": { - "browser": [ - "./browser/" - ] - }, - "#a/dist/index.js": { - "node": "./index.js", - "default": "./browser/index.js" - } - })), - request: "#a/dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "sample #6", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/dist/a": "./dist/index.js" - })), - request: "#a/dist/aaa", - condition_names: vec![], - }, - TestCase { - name: "sample #7", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/a/a/": "./dist/index.js" - })), - request: "#a/a/a", - condition_names: vec![], - }, - TestCase { - name: "sample #8", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a": "./index.js" - })), - request: "#a/timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "sample #9", - expect: Some(vec!["./main.js"]), - imports_field: imports_field(json!({ - "#a/index.js": "./main.js" - })), - request: "#a/index.js", - condition_names: vec![], - }, - TestCase { - name: "sample #10", - expect: Some(vec!["./ok.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/#foo", - condition_names: vec![], - }, - TestCase { - name: "sample #11", - expect: Some(vec!["./ok.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/bar#foo", - condition_names: vec![], - }, - TestCase { - name: "sample #12", - expect: Some(vec!["./ok.js#abc"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/#zapp/ok.js#abc", - condition_names: vec![], - }, - TestCase { - name: "sample #13", - expect: Some(vec!["./ok.js?abc"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/#zapp/ok.js?abc", - condition_names: vec![], - }, - TestCase { - name: "sample #14", - expect: Some(vec!["./🎉.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/#zapp/🎉.js", - condition_names: vec![], - }, - TestCase { - name: "sample #15", - expect: Some(vec!["./%F0%9F%8E%89.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/#zapp/%F0%9F%8E%89.js", - condition_names: vec![], - }, - TestCase { - name: "sample #16", - expect: Some(vec!["./ok.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/🎉", - condition_names: vec![], - }, - TestCase { - name: "sample #17", - expect: Some(vec!["./other.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/%F0%9F%8E%89", - condition_names: vec![], - }, - TestCase { - name: "sample #18", - expect: Some(vec!["./ok.js"]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/module", - condition_names: vec![], - }, - TestCase { - name: "sample #19", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/module#foo", - condition_names: vec![], - }, - TestCase { - name: "sample #20", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/#foo": "./ok.js", - "#a/module": "./ok.js", - "#a/🎉": "./ok.js", - "#a/%F0%9F%8E%89": "./other.js", - "#a/bar#foo": "./ok.js", - "#a/#zapp/": "./" - })), - request: "#a/module?foo", - condition_names: vec![], - }, - TestCase { - name: "sample #21", - expect: Some(vec!["./d?e?f"]), - imports_field: imports_field(json!({ - "#a/a?b?c/": "./" - })), - request: "#a/a?b?c/d?e?f", - condition_names: vec![], - }, - TestCase { - name: "sample #22", - // We throw InvalidPackageTarget - expect: None, - // expect: Some(vec!["/user/a/index"]), - imports_field: imports_field(json!({ - "#a/": "/user/a/" - })), - request: "#a/index", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #1", - expect: Some(vec!["./A/b/d.js"]), - imports_field: imports_field(json!({ - "#a/": "./A/", - "#a/b/c": "./c.js" - })), - request: "#a/b/d.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #2", - expect: Some(vec!["./A/c.js"]), - imports_field: imports_field(json!({ - "#a/": "./A/", - "#a/b": "./b.js" - })), - request: "#a/c.js", - condition_names: vec![], - }, - TestCase { - name: "path tree edge case #3", - expect: Some(vec!["./A/b/c/d.js"]), - imports_field: imports_field(json!({ - "#a/": "./A/", - "#a/b/c/d": "./c.js" - })), - request: "#a/b/c/d.js", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #1", - expect: Some(vec!["./dist/index.js"]), - imports_field: imports_field(json!({ - "#a": "./dist/index.js" - })), - request: "#a", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #2", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": "./" - })), - request: "#a", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #3", - expect: Some(vec!["./dist/a.js"]), - imports_field: imports_field(json!({ - "#a/": "./dist/", - "#a/index.js": "./dist/a.js" - })), - request: "#a/index.js", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #4", - expect: Some(vec!["./index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": [ - "./browser/" - ] - }, - "#a/index.js": { - "browser": "./index.js" - } - })), - request: "#a/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #5", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": [ - "./browser/" - ] - }, - "#a/index.js": { - "node": "./node.js" - } - })), - request: "#a/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #6", - expect: Some(vec!["./index.js"]), - imports_field: imports_field(json!({ - "#a": { - "browser": "./index.js", - "node": "./src/node/index.js", - "default": "./src/index.js" - } - })), - request: "#a", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #7", - expect: Some(vec!["./src/index.js"]), // `enhanced_resolve` is `None` - imports_field: imports_field(json!({ - "#a": { - "default": "./src/index.js", - "browser": "./index.js", - "node": "./src/node/index.js" - } - })), - request: "#a", - condition_names: vec!["browser"], - }, - TestCase { - name: "Direct mapping #8", - expect: Some(vec!["./src/index.js"]), - imports_field: imports_field(json!({ - "#a": { - "browser": "./index.js", - "node": "./src/node/index.js", - "default": "./src/index.js" - } - })), - request: "#a", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #9", - expect: Some(vec!["./index"]), - imports_field: imports_field(json!({ - "#a": "./index" - })), - request: "#a", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #10", - expect: Some(vec!["./index.js"]), - imports_field: imports_field(json!({ - "#a/index": "./index.js" - })), - request: "#a/index", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #11", - // We throw InvalidPackageTarget - // expect: Some(vec!["b"]), - expect: None, - imports_field: imports_field(json!({ - "#a": "b" - })), - request: "#a", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #12", - // We throw InvalidPackageTarget - // expect: Some(vec!["b/index"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": "b/" - })), - request: "#a/index", - condition_names: vec![], - }, - TestCase { - name: "Direct mapping #13", - // We throw InvalidPackageTarget - // expect: Some(vec!["b#anotherhashishere"]), - expect: None, - imports_field: imports_field(json!({ - "#a?q=a#hashishere": "b#anotherhashishere" - })), - request: "#a?q=a#hashishere", - condition_names: vec![], - }, - TestCase { - name: "Direct and conditional mapping #1", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "require": "./require.js" - }, - { - "import": "./import.mjs" - } - ] - })), - request: "#a", - condition_names: vec![], - }, - TestCase { - name: "Direct and conditional mapping #2", - expect: Some(vec!["./import.mjs"]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "require": "./require.js" - }, - { - "import": "./import.mjs" - } - ] - })), - request: "#a", - condition_names: vec!["import"], - }, - TestCase { - name: "Direct and conditional mapping #3", - expect: Some(vec!["./require.js"]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "require": "./require.js" - }, - { - "import": "./import.mjs" - } - ] - })), - request: "#a", - condition_names: vec!["import", "require"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "Direct and conditional mapping #3", - expect: Some(vec!["./import.mjs"]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "import": "./import.mjs" - } - ] - })), - request: "#a", - condition_names: vec!["import", "require"], - }, - TestCase { - name: "Direct and conditional mapping #4", - expect: Some(vec!["./require.js"]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "require": [ - "./require.js" - ] - }, - { - "import": [ - "./import.mjs", - "#b/import.js" - ] - } - ] - })), - request: "#a", - condition_names: vec!["import", "require"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "Direct and conditional mapping #4", - expect: Some(vec!["./import.mjs"]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "import": [ - "./import.mjs", - "#b/import.js" - ] - } - ] - })), - request: "#a", - condition_names: vec!["import", "require"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "Direct and conditional mapping #4", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a": [ - { - "browser": "./browser.js" - }, - { - "import": [ - "#b/import.js" - ] - } - ] - })), - request: "#a", - condition_names: vec!["import", "require"], - }, - TestCase { - name: "mapping to a folder root #1", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#timezones": "./data/timezones/" - })), - request: "#timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #2", - expect: None, - imports_field: imports_field(json!({ - "#timezones/": "./data/timezones" - })), - request: "#timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #3", - expect: Some(vec!["./data/timezones/pdt/index.mjs"]), - imports_field: imports_field(json!({ - "#timezones/pdt/": "./data/timezones/pdt/" - })), - request: "#timezones/pdt/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #4", - expect: Some(vec!["./timezones/pdt.mjs"]), - imports_field: imports_field(json!({ - "#a/": "./timezones/" - })), - request: "#a/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #5", - expect: Some(vec!["./timezones/pdt.mjs"]), - imports_field: imports_field(json!({ - "#a/": "./" - })), - request: "#a/timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #6", - expect: None, - imports_field: imports_field(json!({ - "#a/": "." - })), - request: "#a/timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "mapping to a folder root #7", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a": "./" - })), - request: "#a/timezones/pdt.mjs", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #1", - expect: Some(vec!["./lib/index.mjs"]), - imports_field: imports_field(json!({ - "#a/": "./", - "#a/dist/": "./lib/" - })), - request: "#a/dist/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #2", - expect: Some(vec!["./dist/utils/index.js"]), - imports_field: imports_field(json!({ - "#a/dist/utils/": "./dist/utils/", - "#a/dist/": "./lib/" - })), - request: "#a/dist/utils/index.js", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #3", - expect: Some(vec!["./dist/utils/index.js"]), - imports_field: imports_field(json!({ - "#a/dist/utils/index.js": "./dist/utils/index.js", - "#a/dist/utils/": "./dist/utils/index.mjs", - "#a/dist/": "./lib/" - })), - request: "#a/dist/utils/index.js", - condition_names: vec![], - }, - TestCase { - name: "the longest matching path prefix is prioritized #4", - expect: Some(vec!["./lib/index.mjs"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": "./browser/" - }, - "#a/dist/": "./lib/" - })), - request: "#a/dist/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "conditional mapping folder #1", - // This behaves differently from enhanced_resolve, because `lodash/` is an an InvalidPackageConfig - // expect: Some(vec!["lodash/index.js"]), - expect: Some(vec!["./utils/index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": [ - "lodash/", - "./utils/" - ], - "node": [ - "./utils-node/" - ] - } - })), - request: "#a/index.js", - condition_names: vec!["browser"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "conditional mapping folder #1", - expect: Some(vec!["./utils/index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": [ - "./utils/" - ], - "node": [ - "./utils-node/" - ] - } - })), - request: "#a/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "conditional mapping folder #2", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "webpack": "./wpk/", - "browser": [ - "lodash/", - "./utils/" - ], - "node": [ - "./node/" - ] - } - })), - request: "#a/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "conditional mapping folder #3", - expect: Some(vec!["./wpk/index.mjs"]), - imports_field: imports_field(json!({ - "#a/": { - "webpack": "./wpk/", - "browser": [ - "lodash/", - "./utils/" - ], - "node": [ - "./utils/" - ] - } - })), - request: "#a/index.mjs", - condition_names: vec!["browser", "webpack"], - }, - TestCase { - name: "incorrect exports field #1", - // We throw `PackageImportNotDefined` - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "/utils/": "./a/" - })), - request: "#a/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #2", - // We throw `PackageImportNotDefined` - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "/utils/": { - "browser": "./a/", - "default": "./b/" - } - })), - request: "#a/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect exports field #3", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/index": "./a/index.js" - })), - request: "#a/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #4", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/index.mjs": "./a/index.js" - })), - request: "#a/index", - condition_names: vec![], - }, - TestCase { - name: "incorrect exports field #5", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/index": { - "browser": "./a/index.js", - "default": "./b/index.js" - } - })), - request: "#a/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect exports field #6", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/index.mjs": { - "browser": "./a/index.js", - "default": "./b/index.js" - } - })), - request: "#a/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect request #1", - // We don't throw in `package_imports_exports_resolve` - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": "./a/" - })), - request: "/utils/index.mjs", - condition_names: vec![], - }, - TestCase { - name: "incorrect request #2", - // We don't throw in `package_imports_exports_resolve` - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": "./a/", - "default": "./b/" - } - })), - request: "./utils/index.mjs", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect request #3", - // We don't throw in `package_imports_exports_resolve`, it's thrown in `package_imports_resolve` - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": "./a/", - "default": "./b/" - } - })), - request: "#", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect request #4", - // We don't throw in `package_imports_exports_resolve`, it's thrown in `package_imports_resolve` - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": "./a/", - "default": "./b/" - } - })), - request: "#/", - condition_names: vec!["browser"], - }, - TestCase { - name: "incorrect request #5", - // expect: None, - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": "./a/", - "default": "./b/" - } - })), - request: "#a/", - condition_names: vec!["browser"], - }, - TestCase { - name: "backtracking package base #1", - // expect: Some(vec!["./dist/index"]), - expect: Some(vec!["dist/index"]), - imports_field: imports_field(json!({ - "#a/../../utils/": "./dist/" - })), - request: "#a/../../utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #2", - // We throw InvalidPackageTarget - // expect: Some(vec!["./dist/../../utils/index"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": "./dist/" - })), - request: "#a/../../utils/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #3", - // We throw InvalidPackageTarget - // expect: Some(vec!["../src/index"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": "../src/" - })), - request: "#a/index", - condition_names: vec![], - }, - TestCase { - name: "backtracking package base #4", - // We throw InvalidPackageTarget - // expect: Some(vec!["./utils/../../../index"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": { - "browser": "./utils/../../../" - } - })), - request: "#a/index", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested node_modules path #1", - // expect: Some(vec!["moment/node_modules/lodash/dist/index.js"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": { - "browser": "moment/node_modules/" - } - })), - request: "#a/lodash/dist/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested node_modules path #2", - // We throw InvalidPackageTarget - // expect: Some(vec!["../node_modules/lodash/dist/index.js"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": "../node_modules/" - })), - request: "#a/lodash/dist/index.js", - condition_names: vec![], - }, - TestCase { - name: "nested mapping #1", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": "./", - "default": { - "node": "./node/" - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["browser"], - }, - TestCase { - name: "nested mapping #2", - expect: Some(vec!["./index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["browser", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "nested mapping #2", - expect: Some(vec!["./node/index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["browser", "webpack"], - }, - TestCase { - name: "nested mapping #3", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": "./node/" - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["webpack"], - }, - TestCase { - name: "nested mapping #4", - // We throw NotFound - // expect: Some(vec!["moment/node/index.js"]), - expect: None, - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": "moment/node/" - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["node", "browser"], - }, - TestCase { - name: "nested mapping #5", - expect: Some(vec![]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": { - "webpack": [ - "./wpck/" - ] - } - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["browser", "node"], - }, - TestCase { - name: "nested mapping #6", - expect: Some(vec!["./index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./", - "./node/" - ], - "default": { - "node": { - "webpack": [ - "./wpck/" - ] - } - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["browser", "node", "webpack"], - }, - // Duplicated due to not supporting returning an array - TestCase { - name: "nested mapping #6", - expect: Some(vec!["./node/index.js"]), - imports_field: imports_field(json!({ - "#a/": { - "browser": { - "webpack": [ - "./node/" - ], - "default": { - "node": { - "webpack": [ - "./wpck/" - ] - } - } - } - } - })), - request: "#a/index.js", - condition_names: vec!["browser", "node", "webpack"], - }, - TestCase { - name: "nested mapping #7", - expect: Some(vec!["./y.js"]), - imports_field: imports_field(json!({ - "#a": { - "abc": { - "def": "./x.js" - }, - "ghi": "./y.js" - } - })), - request: "#a", - condition_names: vec!["abc", "ghi"], - }, - TestCase { - name: "nested mapping #8", - // We throw PackageImportNotDefined - // expect: Some(vec![]), - expect: None, - imports_field: imports_field(json!({ - "#a": { - "abc": { - "def": "./x.js", - "default": [] - }, - "ghi": "./y.js" - } - })), - request: "#a", - condition_names: vec!["abc", "ghi"], - }, - ]; - - for case in test_cases { - let resolved = Resolver::default() - .package_imports_exports_resolve( - case.request, - case.imports_field.as_object().unwrap(), - "".into(), - true, - &case - .condition_names - .iter() - .map(ToString::to_string) - .collect::>(), - &mut Ctx::default(), - ) - .await - .map(|p| p.map(|p| p.to_path_buf())); - if let Some(expect) = case.expect { - if expect.is_empty() { - assert!( - matches!(resolved, Ok(None)), - "{} {:?}", - &case.name, - &resolved - ); - } else { - for expect in expect { - assert_eq!( - resolved, - Ok(Some(Utf8Path::new(expect).normalize())), - "{}", - &case.name - ); - } - } - } else { - assert!(resolved.is_err(), "{} {resolved:?}", &case.name); - } - } -} diff --git a/src/tests/incorrect_description_file.rs b/src/tests/incorrect_description_file.rs deleted file mode 100644 index a21ae525..00000000 --- a/src/tests/incorrect_description_file.rs +++ /dev/null @@ -1,83 +0,0 @@ -//! - -use rustc_hash::FxHashSet; - -use crate::{ - JSONError, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver, ResolverPath, -}; - -// should not resolve main in incorrect description file #1 -#[tokio::test] -async fn incorrect_description_file_1() { - let f = super::fixture().join("incorrect-package"); - let mut ctx = ResolveContext::default(); - let resolution = Resolver::default() - .resolve_with_context(f.join("pack1"), ".", &mut ctx) - .await; - let _error = ResolveError::JSON(JSONError { - path: f.join("pack1/package.json"), - message: String::from("EOF while parsing a value at line 3 column 0"), - line: 3, - column: 0, - content: None, - }); - - assert!(matches!(resolution, Err(ResolveError::JSON(_)))); - assert_eq!( - ctx.file_dependencies, - FxHashSet::from_iter([ - ResolverPath::from(f.join("pack1")), - ResolverPath::from(f.join("pack1/package.json")), - ]) - ); - assert!(!ctx.missing_dependencies.is_empty()); -} - -// should not resolve main in incorrect description file #2 -#[tokio::test] -async fn incorrect_description_file_2() { - let f = super::fixture().join("incorrect-package"); - let resolution = Resolver::default().resolve(f.join("pack2"), ".").await; - let _error = ResolveError::JSON(JSONError { - path: f.join("pack2/package.json"), - message: String::from("EOF while parsing a value at line 1 column 0"), - line: 1, - column: 0, - content: Some("".to_string()), - }); - assert!(matches!(resolution, Err(ResolveError::JSON(_)))); -} - -// should not resolve main in incorrect description file #3 -#[tokio::test] -async fn incorrect_description_file_3() { - let f = super::fixture().join("incorrect-package"); - let resolution = Resolver::default().resolve(f.join("pack2"), ".").await; - assert!(resolution.is_err()); -} - -// `enhanced_resolve` does not have this test case -#[tokio::test] -async fn no_description_file() { - let f = super::fixture_root().join("enhanced_resolve"); - - // has description file - let resolver = Resolver::default(); - assert_eq!( - resolver - .resolve(&f, ".") - .await - .map(Resolution::into_path_buf), - Ok(f.join("lib/index.js")) - ); - - // without description file - let resolver = Resolver::new(ResolveOptions { - description_files: vec![], - ..ResolveOptions::default() - }); - assert_eq!( - resolver.resolve(&f, ".").await, - Err(ResolveError::NotFound(".".into())) - ); -} diff --git a/src/tests/main_field.rs b/src/tests/main_field.rs deleted file mode 100644 index 58b401f4..00000000 --- a/src/tests/main_field.rs +++ /dev/null @@ -1,44 +0,0 @@ -//! Not part of enhanced_resolve's test suite - -use crate::{ResolveOptions, Resolver}; - -#[tokio::test] -async fn test() { - let f = super::fixture().join("restrictions"); - - let resolver1 = Resolver::new(ResolveOptions { - main_fields: vec!["style".into()], - ..ResolveOptions::default() - }); - - let resolution = resolver1.resolve(&f, "pck2").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck2/index.css"))); - - let resolver2 = resolver1.clone_with_options(ResolveOptions { - main_fields: vec!["module".into(), "main".into()], - ..ResolveOptions::default() - }); - - let resolution = resolver2.resolve(&f, "pck2").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck2/module.js"))); -} - -#[tokio::test] -async fn test_fallback() { - let f = super::fixture_root().join("invalid"); - - let resolver1 = Resolver::new(ResolveOptions { - main_fields: vec!["module".into(), "main".into()], - extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])], - ..ResolveOptions::default() - }); - - let resolution = resolver1 - .resolve(&f, "main_field_fallback") - .await - .map(|r| r.full_path()); - assert_eq!( - resolution, - Ok(f.join("node_modules/main_field_fallback/exist.js")) - ); -} diff --git a/src/tests/memory_fs.rs b/src/tests/memory_fs.rs deleted file mode 100644 index 7e10f0b0..00000000 --- a/src/tests/memory_fs.rs +++ /dev/null @@ -1,84 +0,0 @@ -use std::{ - io, - path::{Path, PathBuf}, -}; - -use crate::{FileMetadata, FileSystem}; - -fn path_to_str(path: &Path) -> &str { - path.to_str().expect("path should be UTF-8") -} - -#[derive(Default)] -pub struct MemoryFS { - fs: vfs::MemoryFS, -} - -impl MemoryFS { - /// # Panics - /// - /// * Fails to create directory - /// * Fails to write file - #[allow(dead_code)] - pub fn new(data: &[(&'static str, &'static str)]) -> Self { - let mut fs = Self { - fs: vfs::MemoryFS::default(), - }; - for (path, content) in data { - fs.add_file(Path::new(path), content); - } - fs - } - - #[allow(dead_code)] - pub fn add_file(&mut self, path: &Path, content: &str) { - use vfs::FileSystem; - let fs = &mut self.fs; - // Create all parent directories - for path in path.ancestors().collect::>().iter().rev() { - let path = path_to_str(path); - if !fs.exists(path).unwrap() { - fs.create_dir(path).unwrap(); - } - } - // Create file - let mut file = fs.create_file(path_to_str(path)).unwrap(); - file.write_all(content.as_bytes()).unwrap(); - } -} -#[async_trait::async_trait] -impl FileSystem for MemoryFS { - async fn read_to_string(&self, path: &Path) -> io::Result { - use vfs::FileSystem; - let mut file = self - .fs - .open_file(path_to_str(path)) - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; - let mut buffer = String::new(); - file.read_to_string(&mut buffer).unwrap(); - Ok(buffer) - } - async fn read(&self, path: &Path) -> io::Result> { - let buf = self.read_to_string(path).await?; - Ok(buf.into_bytes()) - } - - async fn metadata(&self, path: &Path) -> io::Result { - use vfs::FileSystem; - let metadata = self - .fs - .metadata(path_to_str(path)) - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; - let is_file = metadata.file_type == vfs::VfsFileType::File; - let is_dir = metadata.file_type == vfs::VfsFileType::Directory; - Ok(FileMetadata::new(is_file, is_dir, false)) - } - - async fn symlink_metadata(&self, path: &Path) -> io::Result { - self.metadata(path).await - } - - async fn canonicalize(&self, _path: &Path) -> io::Result { - Err(io::Error::new(io::ErrorKind::NotFound, "not a symlink")) - } -} diff --git a/src/tests/missing.rs b/src/tests/missing.rs deleted file mode 100644 index c41e644e..00000000 --- a/src/tests/missing.rs +++ /dev/null @@ -1,122 +0,0 @@ -//! https://github.com/webpack/enhanced-resolve/blob/main/test/missing.test.js - -use normalize_path::NormalizePath; - -use crate::{AliasValue, ResolveContext, ResolveOptions, Resolver, ResolverPath}; - -#[tokio::test] -async fn test() { - let f = super::fixture(); - - let data = [ - ( - "./missing-file", - vec![ - f.join("missing-file"), - f.join("missing-file.js"), - f.join("missing-file.node"), - ], - ), - ( - "missing-module", - vec![ - f.join("node_modules/missing-module"), - f.parent().unwrap().join("node_modules"), // enhanced-resolve is "node_modules/missing-module" - ], - ), - ( - "missing-module/missing-file", - vec![ - f.join("node_modules/missing-module"), - // f.parent().unwrap().join("node_modules/missing-module"), // we don't report this - ], - ), - ( - "m1/missing-file", - vec![ - f.join("node_modules/m1/missing-file"), - f.join("node_modules/m1/missing-file.js"), - f.join("node_modules/m1/missing-file.node"), - // f.parent().unwrap().join("node_modules/m1"), // we don't report this - ], - ), - ( - "m1/", - vec![ - f.join("node_modules/m1/index"), - f.join("node_modules/m1/index.js"), - f.join("node_modules/m1/index.json"), - f.join("node_modules/m1/index.node"), - ], - ), - ("m1/a", vec![f.join("node_modules/m1/a")]), - ]; - - let resolver = Resolver::default(); - - for (specifier, missing_dependencies) in data { - let mut ctx = ResolveContext::default(); - let _ = resolver.resolve_with_context(&f, specifier, &mut ctx).await; - - for path in ctx.file_dependencies { - assert_eq!(path.as_path(), path.normalize(), "{path:?}"); - } - - for path in missing_dependencies { - assert_eq!(path, path.normalize(), "{path:?}"); - assert!( - ctx - .missing_dependencies - .contains(&ResolverPath::from(&path)), - "{specifier}: {path:?} not in {:?}", - &ctx.missing_dependencies - ); - } - } -} - -#[tokio::test] -async fn alias_and_extensions() { - let f = super::fixture(); - - let resolver = Resolver::new(ResolveOptions { - alias: vec![ - ( - "@scope-js/package-name/dir$".into(), - vec![AliasValue::Path( - f.join("foo/index.js") - .to_str() - .expect("path should be UTF-8") - .to_string(), - )], - ), - ( - "react-dom".into(), - vec![AliasValue::Path( - f.join("foo/index.js") - .to_str() - .expect("path should be UTF-8") - .to_string(), - )], - ), - ], - extensions: vec![".server.ts".into()], - - ..ResolveOptions::default() - }); - - let mut ctx = ResolveContext::default(); - let _ = resolver.resolve_with_context(&f, "@scope-js/package-name/dir/router", &mut ctx); - let _ = resolver.resolve_with_context(&f, "react-dom/client", &mut ctx); - - for path in ctx.file_dependencies { - assert_eq!(path.as_path(), path.normalize(), "{path:?}"); - } - - for path in ctx.missing_dependencies { - assert_eq!(path.as_path(), path.normalize(), "{path:?}"); - if let Some(path) = path.parent() { - assert!(!path.is_file(), "{path:?} must not be a file"); - } - } -} diff --git a/src/tests/mod.rs b/src/tests/mod.rs deleted file mode 100644 index 2ccfd495..00000000 --- a/src/tests/mod.rs +++ /dev/null @@ -1,60 +0,0 @@ -mod alias; -mod browser_field; -mod builtins; -mod dependencies; -mod exports_field; -mod extension_alias; -mod extensions; -mod fallback; -mod full_specified; -mod imports_field; -mod incorrect_description_file; -mod main_field; -mod memory_fs; -mod missing; -#[cfg(not(target_os = "windows"))] -mod node_path; -mod package_json; -#[cfg(feature = "yarn_pnp")] -mod pnp; -mod resolve; -mod restrictions; -mod roots; -mod scoped_packages; -mod simple; -mod symlink; -mod tsconfig_paths; -mod tsconfig_project_references; -#[cfg(windows)] -mod windows; - -use std::{env, path::PathBuf, sync::Arc, thread}; - -use crate::Resolver; - -pub fn fixture_root() -> PathBuf { - env::current_dir().unwrap().join("fixtures") -} - -pub fn fixture() -> PathBuf { - fixture_root() - .join("enhanced_resolve") - .join("test") - .join("fixtures") -} - -#[tokio::test] -async fn threaded_environment() { - let cwd = env::current_dir().unwrap(); - let resolver = Arc::new(Resolver::default()); - for _ in 0..2 { - _ = thread::spawn({ - let cwd = cwd.clone(); - let resolver = Arc::clone(&resolver); - move || { - _ = resolver.resolve(cwd, "."); - } - }) - .join(); - } -} diff --git a/src/tests/node_path.rs b/src/tests/node_path.rs deleted file mode 100644 index d3c3b0ac..00000000 --- a/src/tests/node_path.rs +++ /dev/null @@ -1,229 +0,0 @@ -use std::path::{Path, PathBuf}; - -use super::memory_fs::MemoryFS; -use crate::{ResolveOptions, ResolverGeneric}; - -fn new_resolver( - node_path_dirs: Vec, - data: &[(&'static str, &'static str)], -) -> ResolverGeneric { - ResolverGeneric::::new_with_file_system( - MemoryFS::new(data), - ResolveOptions { - node_path: true, - ..ResolveOptions::default() - }, - ) - .with_node_path_dirs(node_path_dirs) -} - -#[cfg(not(target_os = "windows"))] -mod posix { - use super::*; - - #[tokio::test] - async fn basic() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[ - ("/global/lib/foo/package.json", r#"{"main":"index.js"}"#), - ("/global/lib/foo/index.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project/src"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/foo/index.js")) - ); - } - - #[tokio::test] - async fn node_modules_takes_priority_over_node_path() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[ - ( - "/project/node_modules/foo/package.json", - r#"{"main":"index.js"}"#, - ), - ("/project/node_modules/foo/index.js", ""), - ("/global/lib/foo/package.json", r#"{"main":"index.js"}"#), - ("/global/lib/foo/index.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project/src"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/project/node_modules/foo/index.js")), - ); - } - - #[tokio::test] - async fn multiple_node_path_dirs() { - let resolver = new_resolver( - vec![PathBuf::from("/first/lib"), PathBuf::from("/second/lib")], - &[ - ("/first/lib/foo/package.json", r#"{"main":"index.js"}"#), - ("/first/lib/foo/index.js", ""), - ("/second/lib/bar/package.json", r#"{"main":"index.js"}"#), - ("/second/lib/bar/index.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/first/lib/foo/index.js")) - ); - - let result = resolver.resolve(Path::new("/project"), "bar").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/second/lib/bar/index.js")) - ); - } - - #[tokio::test] - async fn first_node_path_dir_takes_priority() { - let resolver = new_resolver( - vec![PathBuf::from("/first/lib"), PathBuf::from("/second/lib")], - &[ - ("/first/lib/foo/package.json", r#"{"main":"a.js"}"#), - ("/first/lib/foo/a.js", ""), - ("/second/lib/foo/package.json", r#"{"main":"b.js"}"#), - ("/second/lib/foo/b.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/first/lib/foo/a.js")) - ); - } - - #[tokio::test] - async fn nonexistent_node_path_dir_skipped() { - let resolver = new_resolver( - vec![PathBuf::from("/nonexistent"), PathBuf::from("/global/lib")], - &[ - ("/global/lib/foo/package.json", r#"{"main":"index.js"}"#), - ("/global/lib/foo/index.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/foo/index.js")) - ); - } - - #[tokio::test] - async fn scoped_package() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[ - ( - "/global/lib/@scope/pkg/package.json", - r#"{"main":"index.js"}"#, - ), - ("/global/lib/@scope/pkg/index.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project"), "@scope/pkg").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/@scope/pkg/index.js")) - ); - } - - #[tokio::test] - async fn subpath_import() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[ - ("/global/lib/foo/package.json", r#"{"main":"index.js"}"#), - ("/global/lib/foo/index.js", ""), - ("/global/lib/foo/lib/utils.js", ""), - ], - ); - let result = resolver - .resolve(Path::new("/project"), "foo/lib/utils") - .await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/foo/lib/utils.js")) - ); - } - - #[tokio::test] - async fn disabled_node_path() { - let resolver = ResolverGeneric::::new_with_file_system( - MemoryFS::new(&[ - ("/global/lib/foo/package.json", r#"{"main":"index.js"}"#), - ("/global/lib/foo/index.js", ""), - ]), - ResolveOptions { - node_path: false, - ..ResolveOptions::default() - }, - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert!(result.is_err()); - } - - #[tokio::test] - async fn not_found_in_node_path() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[ - ("/global/lib/bar/package.json", r#"{"main":"index.js"}"#), - ("/global/lib/bar/index.js", ""), - ], - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert!(result.is_err()); - } - - #[tokio::test] - async fn file_without_package_json() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[("/global/lib/foo.js", "")], - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/foo.js")) - ); - } - - #[tokio::test] - async fn resolve_with_extensions() { - let resolver = ResolverGeneric::::new_with_file_system( - MemoryFS::new(&[("/global/lib/foo.json", "{}")]), - ResolveOptions { - node_path: true, - extensions: vec![".js".into(), ".json".into()], - ..ResolveOptions::default() - }, - ) - .with_node_path_dirs(vec![PathBuf::from("/global/lib")]); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/foo.json")) - ); - } - - #[tokio::test] - async fn index_file_resolution() { - let resolver = new_resolver( - vec![PathBuf::from("/global/lib")], - &[("/global/lib/foo/index.js", "")], - ); - let result = resolver.resolve(Path::new("/project"), "foo").await; - assert_eq!( - result.map(|r| r.full_path()), - Ok(PathBuf::from("/global/lib/foo/index.js")) - ); - } -} diff --git a/src/tests/package_json.rs b/src/tests/package_json.rs deleted file mode 100644 index 59f83b5e..00000000 --- a/src/tests/package_json.rs +++ /dev/null @@ -1,67 +0,0 @@ -#[cfg(test)] -mod tests { - use std::path::PathBuf; - - use crate::{package_json::ParseError, PackageJson}; - - #[tokio::test] - async fn test_json_with_bom() { - let mock_path = PathBuf::from("package.json"); - let json_with_bom = b"\xEF\xBB\xBF{\"name\": \"example-package\"}".to_vec(); - - let result = PackageJson::parse(mock_path.clone(), mock_path.clone(), json_with_bom).err(); - - assert_eq!( - result, - Some(ParseError { - message: "BOM character found".to_string(), - index: 0 - }) - ); - } - - #[tokio::test] - async fn test_normal_json() { - let mock_path = PathBuf::from("package.json"); - let json_with_bom = r##"{"name": "example-package"}"##.as_bytes().to_vec(); - - let parsed = PackageJson::parse(mock_path.clone(), mock_path.clone(), json_with_bom).unwrap(); - - assert_eq!(parsed.name.unwrap(), "example-package"); - } - - #[tokio::test] - async fn test_broken_json() { - let mock_path = PathBuf::from("package.json"); - let json_with_bom = r##"{"broken":"string"##.as_bytes().to_vec(); - - let parsed_err = PackageJson::parse(mock_path.clone(), mock_path.clone(), json_with_bom).err(); - - assert_eq!( - parsed_err, - Some(ParseError { - message: "syntax".to_string(), - // SIMD error message does not provide the accurate index - index: 0 - }) - ); - } - - #[tokio::test] - async fn test_empty_string() { - let mock_path = PathBuf::from("package.json"); - let json_with_bom = " ".as_bytes().to_vec(); - - let parse_error = PackageJson::parse(mock_path.clone(), mock_path.clone(), json_with_bom) - .err() - .unwrap(); - - assert_eq!( - parse_error, - ParseError { - message: "eof".to_string(), - index: 0, - } - ); - } -} diff --git a/src/tests/pnp.rs b/src/tests/pnp.rs deleted file mode 100644 index 3d55ee16..00000000 --- a/src/tests/pnp.rs +++ /dev/null @@ -1,322 +0,0 @@ -//! Not part of enhanced_resolve's test suite -//! -//! enhanced_resolve's test -//! cannot be ported over because it uses mocks on `pnpApi` provided by the runtime. - -use camino::Utf8Path; - -use crate::{ - path::PathUtil, ResolveContext, ResolveError::NotFound, ResolveOptions, Resolver, ResolverPath, -}; - -#[tokio::test] -async fn pnp1() { - let fixture = super::fixture_root().join("pnp"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }); - - assert_eq!( - resolver - .resolve(&fixture, "is-even") - .await - .map(|r| r.full_path()), - Ok(fixture.join( - ".yarn/cache/is-even-npm-1.0.0-9f726520dc-2728cc2f39.zip/node_modules/is-even/index.js" - )) - ); - - assert_eq!( - resolver - .resolve(&fixture, "lodash.zip") - .await - .map(|r| r.full_path()), - Ok(fixture.join( - ".yarn/cache/lodash.zip-npm-4.2.0-5299417ec8-e596da80a6.zip/node_modules/lodash.zip/index.js" - )) - ); - - assert_eq!( - resolver - .resolve( - fixture - .join(".yarn/cache/is-even-npm-1.0.0-9f726520dc-2728cc2f39.zip/node_modules/is-even"), - "is-odd" - ) - .await - .map(|r| r.full_path()), - Ok( - fixture.join( - ".yarn/cache/is-odd-npm-0.1.2-9d980a9da8-7dc6c6fd00.zip/node_modules/is-odd/index.js" - ) - ), - ); - - assert_eq!( - resolver - .resolve(&fixture, "is-odd") - .await - .map(|r| r.full_path()), - Ok( - fixture.join( - ".yarn/cache/is-odd-npm-3.0.1-93c3c3f41b-89ee2e353c.zip/node_modules/is-odd/index.js" - ) - ), - ); - - assert_eq!( - resolver.resolve(&fixture, "preact").await.map(|r| r.full_path()), - Ok(fixture.join( - ".yarn/cache/preact-npm-10.25.4-2dd2c0aa44-33a009d614.zip/node_modules/preact/dist/preact.mjs" - )), - ); - - assert_eq!( - resolver.resolve(&fixture, "preact/devtools").await.map(|r| r.full_path()), - Ok(fixture.join( - ".yarn/cache/preact-npm-10.25.4-2dd2c0aa44-33a009d614.zip/node_modules/preact/devtools/dist/devtools.mjs" - )), - ); -} - -#[tokio::test] -async fn pnp_file_dependencies() { - let fixture = super::fixture_root().join("pnp"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }); - - let mut ctx = ResolveContext::default(); - let result = resolver - .resolve_with_context(&fixture, "is-even", &mut ctx) - .await; - assert!(result.is_ok()); - assert!( - ctx - .file_dependencies - .contains(&ResolverPath::from(fixture.join(".pnp.cjs"))), - ".pnp.cjs should be in file_dependencies, got: {:?}", - ctx.file_dependencies - ); -} - -// https://github.com/webpack/enhanced-resolve/blob/main/lib/PnpPlugin.js#L118 -// `fullySpecified` should be disabled for bare specifiers without subpath, -// so that the `main` field value (e.g. "index" without extension) can be resolved. -#[tokio::test] -async fn pnp_bare_specifier_fully_specified() { - let fixture = super::fixture_root().join("pnp"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - condition_names: vec!["node".into(), "import".into()], - fully_specified: true, - ..ResolveOptions::default() - }); - - // `extend` has "main": "index" (no extension) and no "exports" field. - assert!( - resolver - .resolve(&fixture, "extend") - .await.is_ok(), - "should resolve successfully without fully specified check for bare specifier with main field without extension" - ); -} - -#[tokio::test] -async fn pnp_resolve_description_file() { - let fixture = super::fixture_root().join("pnp"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }); - - let full_path = fixture - .join( - ".yarn/cache/preact-npm-10.25.4-2dd2c0aa44-33a009d614.zip/node_modules/preact/dist/preact.js", - ) - .to_str() - .expect("path should be UTF-8") - .to_string(); - - let r = resolver.resolve(&fixture, &full_path).await.unwrap(); - - assert_eq!( - r.package_json - .unwrap() - .path - .to_str() - .expect("path should be UTF-8") - .to_string(), - Utf8Path::from_path(&fixture) - .expect("path should be UTF-8") - .join(".yarn/cache/preact-npm-10.25.4-2dd2c0aa44-33a009d614.zip/node_modules/preact") - .join("package.json") - .normalize() - .to_string() - ); -} - -#[tokio::test] -async fn resolve_in_pnp_linked_folder() { - let fixture = super::fixture_root().join("pnp"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }); - - assert_eq!( - resolver - .resolve(&fixture, "lib/lib.js") - .await - .map(|r| r.full_path()), - Ok(fixture.join("shared/lib.js")) - ); -} - -#[tokio::test] -async fn resolve_pnp_pkg_should_failed_while_disable_pnp_mode() { - let fixture = super::fixture_root().join("pnp"); - - let resolver = Resolver::new(ResolveOptions { - enable_pnp: false, - ..ResolveOptions::default() - }); - - assert_eq!( - resolver - .resolve(&fixture, "is-even") - .await - .map(|r| r.full_path()), - Err(NotFound("is-even".to_string())) - ); -} - -#[cfg(target_os = "windows")] -#[tokio::test] -async fn resolve_pnp_with_global_cache_enabled_windows() { - let fixture = super::fixture_root().join("pnp-global-cache-enabled"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - enable_pnp: true, - ..ResolveOptions::default() - }); - - let resolved = resolver - .resolve(&fixture, "path-to-regexp") - .await - .map(|r| r.full_path()) - .unwrap(); - - let module_root = resolved.parent().unwrap(); - let module_root_str = module_root - .to_str() - .expect("path should be UTF-8") - .replace('\\', "/"); - assert!( - module_root_str.contains("/Yarn/Berry/cache/path-to-regexp"), - "Expected global cache path, got: {module_root_str}" - ); - - let resolved_from_cache = resolver - .resolve(module_root, "./index.js") - .await - .map(|r| { - r.full_path() - .to_str() - .expect("path should be UTF-8") - .replace('\\', "/") - .to_string() - }) - .unwrap(); - assert!( - resolved_from_cache.contains("/Yarn/Berry/cache/path-to-regexp"), - "Expected global cache path, got: {resolved_from_cache}" - ); -} - -#[cfg(not(target_os = "windows"))] -#[tokio::test] -async fn resolve_pnp_with_global_cache_enabled_unix() { - let fixture = super::fixture_root().join("pnp-global-cache-enabled"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - enable_pnp: true, - ..ResolveOptions::default() - }); - - let resolved = resolver - .resolve(&fixture, "path-to-regexp") - .await - .map(|r| r.full_path()) - .unwrap(); - - let module_root = resolved.parent().unwrap(); - let module_root_str = module_root.to_str().expect("path should be UTF-8"); - assert!( - module_root_str.contains("/.yarn/berry/cache/path-to-regexp"), - "Expected global cache path, got: {module_root_str}" - ); - - let resolved_from_cache = resolver - .resolve(module_root, "./index.js") - .await - .map(|r| r.full_path()) - .unwrap(); - let resolved_str = resolved_from_cache.to_str().expect("path should be UTF-8"); - assert!( - resolved_str.contains("/.yarn/berry/cache/path-to-regexp"), - "Expected global cache path, got: {resolved_str}" - ); -} - -#[tokio::test] -async fn resolve_pnp_transitive_dep_from_global_cache() { - let fixture = super::fixture_root().join("pnp-global-cache-enabled"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - enable_pnp: true, - ..ResolveOptions::default() - }); - - let path_to_regexp = resolver - .resolve(&fixture, "path-to-regexp") - .await - .map(|r| r.full_path()) - .unwrap(); - - let module_root = path_to_regexp.parent().unwrap(); - - let isarray = resolver - .resolve(module_root, "isarray") - .await - .map(|r| { - r.full_path() - .to_str() - .expect("path should be UTF-8") - .replace('\\', "/") - .to_lowercase() - .to_string() - }) - .unwrap(); - - assert!( - isarray.contains( - "yarn/berry/cache/isarray-npm-0.0.1-92e37e0a70-10c0.zip/node_modules/isarray/index.js" - ), - "Expected isarray in global cache, got: {isarray}" - ); -} diff --git a/src/tests/resolve.rs b/src/tests/resolve.rs deleted file mode 100644 index 1113da43..00000000 --- a/src/tests/resolve.rs +++ /dev/null @@ -1,143 +0,0 @@ -//! - -use crate::{ResolveError, ResolveOptions, Resolver}; - -#[tokio::test] -async fn resolve() { - let f = super::fixture(); - - let resolver = Resolver::default(); - - let main1_js_path = f - .join("main1.js") - .to_str() - .expect("path should be UTF-8") - .to_string(); - - #[rustfmt::skip] - let pass = [ - ("absolute path", f.clone(), main1_js_path.as_str(), f.join("main1.js")), - ("file with .js", f.clone(), "./main1.js", f.join("main1.js")), - ("file without extension", f.clone(), "./main1", f.join("main1.js")), - ("another file with .js", f.clone(), "./a.js", f.join("a.js")), - ("another file without extension", f.clone(), "./a", f.join("a.js")), - ("file in module with .js", f.clone(), "m1/a.js", f.join("node_modules/m1/a.js")), - ("file in module without extension", f.clone(), "m1/a", f.join("node_modules/m1/a.js")), - ("another file in module without extension", f.clone(), "complexm/step1", f.join("node_modules/complexm/step1.js")), - ("from submodule to file in sibling module", f.join("node_modules/complexm"), "m2/b.js", f.join("node_modules/m2/b.js")), - ("from nested directory to overwritten file in module", f.join("multiple_modules"), "m1/a.js", f.join("multiple_modules/node_modules/m1/a.js")), - ("from nested directory to not overwritten file in module", f.join("multiple_modules"), "m1/b.js", f.join("node_modules/m1/b.js")), - ("file with query", f.clone(), "./main1.js?query", f.join("main1.js?query")), - ("file with fragment", f.clone(), "./main1.js#fragment", f.join("main1.js#fragment")), - ("file with fragment and query", f.clone(), "./main1.js#fragment?query", f.join("main1.js#fragment?query")), - ("file with query and fragment", f.clone(), "./main1.js?#fragment", f.join("main1.js?#fragment")), - - ("file with query (unicode)", f.clone(), "./测试.js?query", f.join("测试.js?query")), - ("file with fragment (unicode)", f.clone(), "./测试.js#fragment", f.join("测试.js#fragment")), - ("file with fragment and query (unicode)", f.clone(), "./测试.js#fragment?query", f.join("测试.js#fragment?query")), - ("file with query and fragment (unicode)", f.clone(), "./测试.js?#fragment", f.join("测试.js?#fragment")), - - ("file in module with query", f.clone(), "m1/a?query", f.join("node_modules/m1/a.js?query")), - ("file in module with fragment", f.clone(), "m1/a#fragment", f.join("node_modules/m1/a.js#fragment")), - ("file in module with fragment and query", f.clone(), "m1/a#fragment?query", f.join("node_modules/m1/a.js#fragment?query")), - ("file in module with query and fragment", f.clone(), "m1/a?#fragment", f.join("node_modules/m1/a.js?#fragment")), - ("file in module with query and fragment", f.clone(), "m1/a?#fragment", f.join("node_modules/m1/a.js?#fragment")), - ("differ between directory and file, resolve file", f.clone(), "./dirOrFile", f.join("dirOrFile.js")), - ("differ between directory and file, resolve directory", f.clone(), "./dirOrFile/", f.join("dirOrFile/index.js")), - ("find node_modules outside of node_modules", f.join("browser-module/node_modules"), "m1/a", f.join("node_modules/m1/a.js")), - ("don't crash on main field pointing to self", f.clone(), "./main-field-self", f.join("./main-field-self/index.js")), - ("don't crash on main field pointing to self (2)", f.clone(), "./main-field-self2", f.join("./main-field-self2/index.js")), - // enhanced-resolve has `#` prepended with a `\0`, they are removed from the - // following 3 expected test results. - // See https://github.com/webpack/enhanced-resolve#escaping - ("handle fragment edge case (no fragment)", f.clone(), "./no#fragment/#/#", f.join("no#fragment/#/#.js")), - ("handle fragment edge case (fragment)", f.clone(), "./no#fragment/#/", f.join("no.js#fragment/#/")), - ("handle fragment escaping", f.clone(), "./no\0#fragment/\0#/\0##fragment", f.join("no#fragment/#/#.js#fragment")), - - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn issue238_resolve() { - let f = super::fixture().join("issue-238"); - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into(), ".jsx".into(), ".ts".into(), ".tsx".into()], - modules: vec![ - "src/a".into(), - "src/b".into(), - "src/common".into(), - "node_modules".into(), - ], - ..ResolveOptions::default() - }); - let resolved_path = resolver - .resolve(f.join("src/common"), "config/myObjectFile") - .await - .map(|r| r.full_path()); - assert_eq!( - resolved_path, - Ok(f.join("src/common/config/myObjectFile.js")), - ); -} - -#[tokio::test] -async fn prefer_relative() { - let f = super::fixture(); - - let resolver = Resolver::new(ResolveOptions { - prefer_relative: true, - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should correctly resolve with preferRelative 1", "main1.js", f.join("main1.js")), - ("should correctly resolve with preferRelative 2", "m1/a.js", f.join("node_modules/m1/a.js")), - ]; - - for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); - } -} - -#[tokio::test] -async fn resolve_to_context() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - resolve_to_context: true, - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let data = [ - ("context for fixtures", f.clone(), "./", f.clone()), - ("context for fixtures/lib", f.clone(), "./lib", f.join("lib")), - ("context for fixtures with ..", f.clone(), "./lib/../../fixtures/./lib/..", f.clone()), - ("context for fixtures with query", f.clone(), "./?query", f.clone().with_file_name("fixtures?query")), - ]; - - for (comment, path, request, expected) in data { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn resolve_hash_as_module() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions::default()); - let resolution = resolver.resolve(f, "#a").await; - assert_eq!(resolution, Err(ResolveError::NotFound("#a".into()))); -} diff --git a/src/tests/restrictions.rs b/src/tests/restrictions.rs deleted file mode 100644 index eb980767..00000000 --- a/src/tests/restrictions.rs +++ /dev/null @@ -1,411 +0,0 @@ -//! - -use std::sync::Arc; - -use regex::Regex; - -use crate::{ResolveError, ResolveOptions, Resolver, Restriction}; - -#[tokio::test] -async fn should_respect_regexp_restriction() { - let f = super::fixture().join("restrictions"); - - let re = Regex::new(r"\.(sass|scss|css)$").unwrap(); - let resolver1 = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - restrictions: vec![Restriction::Fn(Arc::new(move |path| { - path.as_os_str().to_str().map_or(false, |s| re.is_match(s)) - }))], - ..ResolveOptions::default() - }); - - let resolution = resolver1.resolve(&f, "pck1").await.map(|r| r.full_path()); - assert_eq!(resolution, Err(ResolveError::NotFound("pck1".to_string()))); -} - -#[tokio::test] -async fn should_try_to_find_alternative_1() { - let f = super::fixture().join("restrictions"); - - let re = Regex::new(r"\.(sass|scss|css)$").unwrap(); - let resolver1 = Resolver::new(ResolveOptions { - extensions: vec![".js".into(), ".css".into()], - main_files: vec!["index".into()], - restrictions: vec![Restriction::Fn(Arc::new(move |path| { - path.as_os_str().to_str().map_or(false, |s| re.is_match(s)) - }))], - ..ResolveOptions::default() - }); - - let resolution = resolver1.resolve(&f, "pck1").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck1/index.css"))); -} - -#[tokio::test] -async fn should_respect_string_restriction() { - let fixture = super::fixture(); - let f = fixture.join("restrictions"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - restrictions: vec![Restriction::Path(f.clone())], - ..ResolveOptions::default() - }); - - let resolution = resolver.resolve(&f, "pck2").await; - assert_eq!(resolution, Err(ResolveError::NotFound("pck2".to_string()))); -} - -#[tokio::test] -async fn should_allow_descendant_of_string_restriction() { - let f = super::fixture().join("restrictions"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - restrictions: vec![Restriction::Path(f.clone())], - ..ResolveOptions::default() - }); - - let resolution = resolver.resolve(&f, "pck1").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck1/index.js"))); -} - -#[tokio::test] -async fn should_reject_sibling_sharing_textual_prefix() { - let f = super::fixture().join("restrictions"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - restrictions: vec![Restriction::Path(f.join("node_modules/pck"))], - ..ResolveOptions::default() - }); - - let resolution = resolver.resolve(&f, "pck1").await.map(|r| r.full_path()); - assert_eq!(resolution, Err(ResolveError::NotFound("pck1".to_string()))); -} - -#[tokio::test] -async fn should_try_to_find_alternative_2() { - let f = super::fixture().join("restrictions"); - - let re = Regex::new(r"\.(sass|scss|css)$").unwrap(); - let resolver1 = Resolver::new(ResolveOptions { - extensions: vec![".js".into(), ".css".into()], - main_fields: vec!["main".into(), "style".into()], - restrictions: vec![Restriction::Fn(Arc::new(move |path| { - path.as_os_str().to_str().map_or(false, |s| re.is_match(s)) - }))], - ..ResolveOptions::default() - }); - - let resolution = resolver1.resolve(&f, "pck2").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck2/index.css"))); -} - -#[tokio::test] -async fn should_try_to_find_alternative_3() { - let f = super::fixture().join("restrictions"); - - let re = Regex::new(r"\.(sass|scss|css)$").unwrap(); - let resolver1 = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - main_fields: vec!["main".into(), "module".into(), "style".into()], - restrictions: vec![Restriction::Fn(Arc::new(move |path| { - path.as_os_str().to_str().map_or(false, |s| re.is_match(s)) - }))], - ..ResolveOptions::default() - }); - - let resolution = resolver1.resolve(&f, "pck2").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck2/index.css"))); -} - -#[tokio::test] -async fn should_try_to_find_alternative_4() { - let f = super::fixture().join("restrictions"); - - let re = Regex::new(r"\.(sass|scss|css)$").unwrap(); - let resolver1 = Resolver::new(ResolveOptions { - extensions: vec![".css".into()], - main_fields: vec!["main".into()], - extension_alias: vec![(".js".into(), vec![".js".into(), ".jsx".into()])], - restrictions: vec![Restriction::Fn(Arc::new(move |path| { - path.as_os_str().to_str().map_or(false, |s| re.is_match(s)) - }))], - ..ResolveOptions::default() - }); - - let resolution = resolver1.resolve(&f, "pck2").await.map(|r| r.full_path()); - assert_eq!(resolution, Ok(f.join("node_modules/pck2/index.css"))); -} - -/// Ported from enhanced-resolve `restrictions > path boundaries` -/// -/// -/// `MemoryFS` always separates with `/`, so these run on non-Windows only. -#[cfg(not(target_os = "windows"))] -mod path_boundaries { - use std::path::PathBuf; - - use super::super::memory_fs::MemoryFS; - use crate::{ResolveOptions, ResolverGeneric, Restriction}; - - async fn resolves(restriction: &str, context: &str, request: &str, file: &'static str) -> bool { - let resolver = ResolverGeneric::::new_with_file_system( - MemoryFS::new(&[(file, "")]), - ResolveOptions { - extensions: vec![".js".into()], - restrictions: vec![Restriction::Path(PathBuf::from(restriction))], - ..ResolveOptions::default() - }, - ); - resolver.resolve(context, request).await.is_ok() - } - - #[tokio::test] - async fn file_inside_a_restriction() { - assert!(resolves("/a/b/c", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - } - - #[tokio::test] - async fn sibling_of_a_restriction() { - assert!(!resolves("/a/b/c", "/a/b", "./c-other.js", "/a/b/c-other.js").await); - } - - #[tokio::test] - async fn sibling_of_a_restriction_separated_by_a_backslash() { - assert!(!resolves("/a/b/c", "/a/b", "./c\\sibling.js", "/a/b/c\\sibling.js").await); - } - - #[tokio::test] - async fn sibling_of_a_restriction_containing_a_backslash() { - assert!(!resolves("/a/b\\c", "/a", "./b\\c\\sibling.js", "/a/b\\c\\sibling.js").await); - } - - #[tokio::test] - async fn file_inside_a_restriction_ending_with_a_separator() { - assert!(resolves("/a/b/c/", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - } - - #[tokio::test] - async fn file_inside_the_root_restriction() { - assert!(resolves("/", "/a", "./index.js", "/a/index.js").await); - } - - #[tokio::test] - async fn file_inside_a_non_normalized_restriction() { - assert!(resolves("/a/x/../b/c", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - } - - #[tokio::test] - async fn empty_restriction_matches_every_path() { - assert!(resolves("", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - } - - #[tokio::test] - async fn relative_restriction_matches_no_absolute_path() { - assert!(!resolves(".", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - assert!(!resolves("..", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - assert!(!resolves("foo/..", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - } - - #[tokio::test] - async fn file_inside_a_restriction_differing_in_case() { - assert!(!resolves("/A/B/C", "/a/b/c", "./index.js", "/a/b/c/index.js").await); - } -} - -/// Ported from enhanced-resolve `restrictions > windows and posix semantics` -/// -/// -/// Windows path forms cannot travel through a resolver on a posix host, so the -/// check is driven directly, the way upstream drives its plugin. -#[cfg(target_os = "windows")] -mod windows_path_boundaries { - use std::path::PathBuf; - - use camino::Utf8Path; - - use crate::{ResolveOptions, Resolver, Restriction}; - - fn is_inside(restriction: &str, path: &str) -> bool { - let resolver = Resolver::new(ResolveOptions { - restrictions: vec![Restriction::Path(PathBuf::from(restriction))], - ..ResolveOptions::default() - }); - resolver.check_restrictions(Utf8Path::new(path)) - } - - #[tokio::test] - async fn path_using_slashes_under_a_backslash_restriction() { - assert!(is_inside(r"C:\a\b\c", "C:/a/b/c/index.js")); - } - - #[tokio::test] - async fn path_mixing_separators_under_a_slash_restriction() { - assert!(is_inside("C:/a/b/c", r"C:\a\b/c/index.js")); - } - - #[tokio::test] - async fn path_under_a_restriction_ending_with_a_slash() { - assert!(is_inside(r"C:\a\b\c/", r"C:\a\b\c\index.js")); - } - - #[tokio::test] - async fn the_restricted_directory_itself() { - assert!(is_inside(r"C:\a\b\c\", r"C:\a\b\c")); - } - - #[tokio::test] - async fn path_whose_drive_letter_differs_in_case() { - assert!(is_inside(r"c:\a\b\c", r"C:\a\b\c\index.js")); - } - - #[tokio::test] - async fn path_inside_a_unc_restriction() { - assert!(is_inside(r"\\server\share\a", r"\\server\share\a\index.js")); - } - - #[tokio::test] - async fn path_inside_a_dos_device_restriction() { - assert!(is_inside(r"\\?\C:\a", r"\\?\C:\a\index.js")); - } - - #[tokio::test] - async fn path_on_another_share_than_the_unc_restriction() { - assert!(!is_inside( - r"\\server\share\a", - r"\\server\other\a\index.js" - )); - } - - #[tokio::test] - async fn sibling_of_a_restriction_written_with_slashes() { - assert!(!is_inside(r"C:\a\b\c", "C:/a/b/c-other.js")); - } -} - -/// Ported from enhanced-resolve `restrictions > with symlinks` -/// (GHSA-fvr2-82rg-p3pp) -/// -/// A restriction has to hold for the path the resolver returns, not for the -/// spelling a candidate happened to have while it was being selected. -mod escaping_the_restriction { - use std::{ - fs, io, - path::{Path, PathBuf}, - }; - - use crate::{ResolveError, ResolveOptions, Resolver, Restriction}; - - fn symlink, Q: AsRef>(original: P, link: Q) -> io::Result<()> { - #[cfg(target_family = "unix")] - return std::os::unix::fs::symlink(original, link); - #[cfg(target_family = "windows")] - return std::os::windows::fs::symlink_file(original, link); - } - - /// `allowed/{link,rel-link}.js` point at `outside/secret.js`. - /// `None` when the platform refuses to create symlinks. - fn fixture(name: &str) -> Option { - let root = std::env::temp_dir().join(name); - _ = fs::remove_dir_all(&root); - fs::create_dir_all(root.join("allowed")).ok()?; - fs::create_dir_all(root.join("outside")).ok()?; - // `/var` is a symlink on macOS, so the restriction has to name the real - // directory. Windows answers with a `\\?\` path, where `join` collapses the - // `..` these tests are about and the resolver cannot take it as a specifier. - let canonical = root.canonicalize().ok()?; - let canonical = canonical.to_str()?; - let root = PathBuf::from(canonical.strip_prefix(r"\\?\").unwrap_or(canonical)); - fs::write(root.join("outside/secret.js"), "").ok()?; - fs::write(root.join("allowed/real.js"), "").ok()?; - symlink(root.join("outside/secret.js"), root.join("allowed/link.js")).ok()?; - symlink( - Path::new("../outside/secret.js"), - root.join("allowed/rel-link.js"), - ) - .ok()?; - Some(root) - } - - async fn resolve(root: &Path, specifier: &str) -> Result { - resolve_with(root, specifier, true).await - } - - async fn resolve_with( - root: &Path, - specifier: &str, - symlinks: bool, - ) -> Result { - let allowed = root.join("allowed"); - Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - restrictions: vec![Restriction::Path(allowed.clone())], - symlinks, - ..ResolveOptions::default() - }) - .resolve(&allowed, specifier) - .await - .map(|r| r.full_path()) - } - - #[tokio::test] - async fn in_root_symlink_to_an_outside_target() { - let Some(root) = fixture("rspack_resolver_restriction_symlink") else { - return; - }; - assert_eq!( - resolve(&root, "./link.js").await, - Err(ResolveError::NotFound("./link.js".to_string())) - ); - } - - #[tokio::test] - async fn in_root_relative_symlink_to_an_outside_target() { - let Some(root) = fixture("rspack_resolver_restriction_rel_symlink") else { - return; - }; - assert_eq!( - resolve(&root, "./rel-link.js").await, - Err(ResolveError::NotFound("./rel-link.js".to_string())) - ); - } - - #[tokio::test] - async fn parent_dir_traversal_in_an_absolute_specifier() { - let Some(root) = fixture("rspack_resolver_restriction_traversal") else { - return; - }; - let escaping = root.join("allowed/../outside/secret.js"); - let escaping = escaping.to_str().unwrap(); - assert_eq!( - resolve(&root, escaping).await, - Err(ResolveError::NotFound(escaping.to_string())) - ); - } - - #[tokio::test] - async fn parent_dir_traversal_without_symlink_resolution() { - let Some(root) = fixture("rspack_resolver_restriction_traversal_nosym") else { - return; - }; - let escaping = root.join("allowed/../outside/secret.js"); - let escaping = escaping.to_str().unwrap(); - assert_eq!( - resolve_with(&root, escaping, false).await, - Err(ResolveError::NotFound(escaping.to_string())) - ); - } - - #[tokio::test] - async fn real_in_root_file_still_resolves() { - let Some(root) = fixture("rspack_resolver_restriction_real") else { - return; - }; - assert_eq!( - resolve(&root, "./real.js").await, - Ok(root.join("allowed/real.js")) - ); - } -} diff --git a/src/tests/roots.rs b/src/tests/roots.rs deleted file mode 100644 index 7a062889..00000000 --- a/src/tests/roots.rs +++ /dev/null @@ -1,97 +0,0 @@ -//! - -use std::path::PathBuf; - -use crate::{AliasValue, ResolveError, ResolveOptions, Resolver}; - -fn dirname() -> PathBuf { - super::fixture_root().join("enhanced_resolve").join("test") -} - -#[tokio::test] -async fn roots() { - let f = super::fixture(); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - alias: vec![("foo".into(), vec![AliasValue::from("/fixtures")])], - roots: vec![dirname(), f.clone()], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should respect roots option", "/fixtures/b.js", f.join("b.js")), - ("should try another root option, if it exists", "/b.js", f.join("b.js")), - ("should respect extension", "/fixtures/b", f.join("b.js")), - ("should resolve in directory", "/fixtures/extensions/dir", f.join("extensions/dir/index.js")), - ("should respect aliases", "foo/b", f.join("b.js")), - ]; - - for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); - } - - #[rustfmt::skip] - let fail = [ - ("should not work with relative path", "fixtures/b.js", ResolveError::NotFound("fixtures/b.js".into())) - ]; - - for (comment, request, expected) in fail { - let resolution = resolver.resolve(&f, request).await; - assert_eq!(resolution, Err(expected), "{comment} {request}"); - } -} - -#[tokio::test] -async fn resolve_to_context() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - roots: vec![dirname(), f.clone()], - resolve_to_context: true, - ..ResolveOptions::default() - }); - let resolved_path = resolver - .resolve(&f, "/fixtures/lib") - .await - .map(|r| r.full_path()); - let expected = f.join("lib"); - assert_eq!(resolved_path, Ok(expected)); -} - -#[tokio::test] -async fn prefer_absolute() { - let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".js".into()], - alias: vec![("foo".into(), vec![AliasValue::from("/fixtures")])], - roots: vec![dirname(), f.clone()], - prefer_absolute: true, - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("should resolve an absolute path (prefer absolute)", f.join("b.js").to_str().expect("path should be UTF-8").to_string(), f.join("b.js")), - ]; - - for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(&f, &request).await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); - } -} - -#[tokio::test] -async fn roots_fall_through() { - let f = super::fixture(); - let absolute_path = f.join("roots_fall_through/index.js"); - let specifier = absolute_path.to_str().expect("path should be UTF-8"); - let resolution = Resolver::new(ResolveOptions::default().with_root(&f)) - .resolve(&f, &specifier) - .await; - assert_eq!( - resolution.map(super::super::resolution::Resolution::into_path_buf), - Ok(absolute_path) - ); -} diff --git a/src/tests/scoped_packages.rs b/src/tests/scoped_packages.rs deleted file mode 100644 index 699f34ff..00000000 --- a/src/tests/scoped_packages.rs +++ /dev/null @@ -1,25 +0,0 @@ -//! - -use crate::{ResolveOptions, Resolver}; - -#[tokio::test] -async fn scoped_packages() { - let f = super::fixture().join("scoped"); - - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - ("main field should work", f.clone(), "@scope/pack1", f.join("./node_modules/@scope/pack1/main.js")), - ("browser field should work", f.clone(), "@scope/pack2", f.join("./node_modules/@scope/pack2/main.js")), - ("folder request should work", f.clone(), "@scope/pack2/lib", f.join("./node_modules/@scope/pack2/lib/index.js")) - ]; - - for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} diff --git a/src/tests/simple.rs b/src/tests/simple.rs deleted file mode 100644 index 902cba8a..00000000 --- a/src/tests/simple.rs +++ /dev/null @@ -1,106 +0,0 @@ -//! - -use std::env; - -use crate::Resolver; - -#[tokio::test] -async fn resolve_abs_main() { - let resolver = Resolver::default(); - let dirname = env::current_dir().unwrap().join("fixtures"); - let f = dirname.join("invalid/main.js"); - // a's main field id `/dist/index.js` - let resolution = resolver.resolve(&f, "a").await.unwrap(); - - assert_eq!( - resolution.path(), - dirname.join("invalid/node_modules/a/dist/index.js") - ); -} - -#[tokio::test] -async fn simple() { - // mimic `enhanced-resolve/test/simple.test.js` - let dirname = env::current_dir().unwrap().join("fixtures"); - let f = dirname.join("enhanced_resolve/test"); - - let resolver = Resolver::default(); - - let data = [ - ("direct", f.clone(), "../lib/index"), - ("as directory", f, ".."), - ("as module", dirname.clone(), "./enhanced_resolve"), - ]; - - for (comment, path, request) in data { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - let expected = dirname.join("enhanced_resolve/lib/index.js"); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn dashed_name() { - let f = super::fixture(); - - let resolver = Resolver::default(); - - let data = [ - (f.clone(), "dash", f.join("node_modules/dash/index.js")), - ( - f.clone(), - "dash-name", - f.join("node_modules/dash-name/index.js"), - ), - ( - f.join("node_modules/dash"), - "dash", - f.join("node_modules/dash/index.js"), - ), - ( - f.join("node_modules/dash"), - "dash-name", - f.join("node_modules/dash-name/index.js"), - ), - ( - f.join("node_modules/dash-name"), - "dash", - f.join("node_modules/dash/index.js"), - ), - ( - f.join("node_modules/dash-name"), - "dash-name", - f.join("node_modules/dash-name/index.js"), - ), - ]; - - for (path, request, expected) in data { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{path:?} {request}"); - } -} - -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -mod windows { - use super::super::memory_fs::MemoryFS; - use crate::ResolveOptions; - - #[tokio::test] - async fn no_package() { - use std::path::Path; - - use crate::ResolverGeneric; - let f = Path::new("/"); - let file_system = MemoryFS::new(&[]); - let resolver = - ResolverGeneric::::new_with_file_system(file_system, ResolveOptions::default()); - let resolved_path = resolver.resolve(f, "package").await; - assert!(resolved_path.is_err()); - } -} diff --git a/src/tests/symlink.rs b/src/tests/symlink.rs deleted file mode 100644 index 949c3677..00000000 --- a/src/tests/symlink.rs +++ /dev/null @@ -1,183 +0,0 @@ -use std::{fs, io, path::Path}; - -use crate::{ResolveOptions, Resolver, ResolverPath}; - -#[derive(Debug, Clone, Copy)] -enum FileType { - File, - Dir, -} - -#[allow(unused_variables)] -fn symlink, Q: AsRef>( - original: P, - link: Q, - file_type: FileType, -) -> io::Result<()> { - #[cfg(target_family = "unix")] - { - std::os::unix::fs::symlink(original, link) - } - - #[cfg(target_family = "windows")] - match file_type { - FileType::File => std::os::windows::fs::symlink_file(original, link), - FileType::Dir => std::os::windows::fs::symlink_dir(original, link), - } -} - -fn init(dirname: &Path, temp_path: &Path) -> io::Result<()> { - if temp_path.exists() { - _ = fs::remove_dir_all(temp_path); - } - fs::create_dir(temp_path)?; - symlink( - dirname.join("../lib/index.js"), - temp_path.join("test"), - FileType::File, - )?; - symlink( - dirname.join("../lib"), - temp_path.join("test2"), - FileType::Dir, - )?; - fs::remove_file(temp_path.join("test"))?; - fs::remove_file(temp_path.join("test2"))?; - fs::remove_dir(temp_path) -} - -fn create_symlinks(dirname: &Path, temp_path: &Path) -> io::Result<()> { - fs::create_dir(temp_path).unwrap(); - symlink( - dirname.join("../lib/index.js").canonicalize().unwrap(), - temp_path.join("index.js"), - FileType::File, - )?; - symlink( - dirname.join("../lib").canonicalize().unwrap(), - temp_path.join("lib"), - FileType::Dir, - )?; - symlink( - dirname.join("..").canonicalize().unwrap(), - temp_path.join("this"), - FileType::Dir, - )?; - symlink( - temp_path.join("this"), - temp_path.join("that"), - FileType::Dir, - )?; - symlink( - Path::new("../../lib/index.js"), - temp_path.join("node.relative.js"), - FileType::File, - )?; - symlink( - Path::new("./node.relative.js"), - temp_path.join("node.relative.sym.js"), - FileType::File, - )?; - Ok(()) -} - -fn cleanup_symlinks(temp_path: &Path) { - _ = fs::remove_dir_all(temp_path); -} - -#[tokio::test] -async fn test() -> io::Result<()> { - let root = super::fixture_root().join("enhanced_resolve"); - let dirname = root.join("test"); - let temp_path = dirname.join("temp"); - if !temp_path.exists() { - let is_admin = init(&dirname, &temp_path).is_ok(); - if !is_admin { - return Ok(()); - } - if let Err(err) = create_symlinks(&dirname, &temp_path) { - cleanup_symlinks(&temp_path); - return Err(err); - } - } - - let resolver_without_symlinks = Resolver::new(ResolveOptions { - symlinks: false, - ..ResolveOptions::default() - }); - let resolver_with_symlinks = Resolver::default(); - - #[rustfmt::skip] - let pass = [ - ("with a symlink to a file", temp_path.clone(), "./index.js"), - ("with a relative symlink to a file", temp_path.clone(), "./node.relative.js"), - ("with a relative symlink to a symlink to a file", temp_path.clone(), "./node.relative.sym.js"), - ("with a symlink to a directory 1", temp_path.clone(), "./lib/index.js"), - ("with a symlink to a directory 2", temp_path.clone(), "./this/lib/index.js"), - ("with multiple symlinks in the path 1", temp_path.clone(), "./this/test/temp/index.js"), - ("with multiple symlinks in the path 2", temp_path.clone(), "./this/test/temp/lib/index.js"), - ("with multiple symlinks in the path 3", temp_path.clone(), "./this/test/temp/this/lib/index.js"), - ("with a symlink to a directory 2 (chained)", temp_path.clone(), "./that/lib/index.js"), - ("with multiple symlinks in the path 1 (chained)", temp_path.clone(), "./that/test/temp/index.js"), - ("with multiple symlinks in the path 2 (chained)", temp_path.clone(), "./that/test/temp/lib/index.js"), - ("with multiple symlinks in the path 3 (chained)", temp_path.clone(), "./that/test/temp/that/lib/index.js"), - ("with symlinked directory as context 1", temp_path.join( "lib"), "./index.js"), - ("with symlinked directory as context 2", temp_path.join( "this"), "./lib/index.js"), - ("with symlinked directory as context and in path", temp_path.join( "this"), "./test/temp/lib/index.js"), - ("with symlinked directory in context path", temp_path.join( "this/lib"), "./index.js"), - ("with symlinked directory in context path and symlinked file", temp_path.join( "this/test"), "./temp/index.js"), - ("with symlinked directory in context path and symlinked directory", temp_path.join( "this/test"), "./temp/lib/index.js"), - ("with symlinked directory as context 2 (chained)", temp_path.join( "that"), "./lib/index.js"), - ("with symlinked directory as context and in path (chained)", temp_path.join( "that"), "./test/temp/lib/index.js"), - ("with symlinked directory in context path (chained)", temp_path.join( "that/lib"), "./index.js"), - ("with symlinked directory in context path and symlinked file (chained)", temp_path.join( "that/test"), "./temp/index.js"), - ("with symlinked directory in context path and symlinked directory (chained)", temp_path.join( "that/test"), "./temp/lib/index.js") - ]; - - for (comment, path, request) in pass { - let filename = resolver_with_symlinks - .resolve(&path, request) - .await - .map(|r| r.full_path()); - assert_eq!(filename, Ok(root.join("lib/index.js")), "{comment:?}"); - - let mut ctx = &mut Default::default(); - let resolved_path = resolver_without_symlinks - .resolve_with_context(&path, request, &mut ctx) - .await - .map(|r| r.full_path()); - assert_eq!(resolved_path, Ok(path.join(request))); - assert!( - ctx - .file_dependencies - .contains(&ResolverPath::from(resolved_path.unwrap())), - "file dependencies should contain resolved path {comment:?}" - ); - } - - Ok(()) -} - -// With `symlinks` enabled, realpath must apply `..` components after resolving -// the parent, not drop them. Unnormalized paths reach the resolver from user -// input: absolute specifiers (kept verbatim on non-Windows), exact-match alias -// values, and the `directory` argument of `resolve`. -#[tokio::test] -async fn dotdot_in_unnormalized_input() { - let root = super::fixture_root().join("enhanced_resolve"); - let expected = Ok(root.join("lib/index.js")); - let resolver = Resolver::default(); - - let specifier = root.join("test/../lib/index.js"); - let resolution = resolver - .resolve(root.join("test"), specifier.to_str().unwrap()) - .await - .map(|r| r.full_path()); - assert_eq!(resolution, expected, "absolute specifier containing `..`"); - - let resolution = resolver - .resolve(root.join("test/.."), "./lib/index.js") - .await - .map(|r| r.full_path()); - assert_eq!(resolution, expected, "directory ending in `..`"); -} diff --git a/src/tests/tsconfig_paths.rs b/src/tests/tsconfig_paths.rs deleted file mode 100644 index 3ed12521..00000000 --- a/src/tests/tsconfig_paths.rs +++ /dev/null @@ -1,609 +0,0 @@ -//! tests for tsconfig-paths -//! -//! Fixtures copied from . - -use std::path::PathBuf; - -use crate::{ - JSONError, ResolveError, ResolveOptions, Resolver, TsConfig, TsconfigOptions, TsconfigReferences, -}; - -// -#[tokio::test] -async fn tsconfig() { - let f = super::fixture_root().join("tsconfig"); - - #[rustfmt::skip] - let pass = [ - (f.clone(), None, "ts-path", f.join("foo.js")), - (f.join("nested"), None, "ts-path", f.join("nested/test.js")), - (f.join("cases/index"), None, "foo", f.join("node_modules/tsconfig-index/foo.js")), - // This requires reading package.json.tsconfig field - // (f.join("cases/field"), "foo", f.join("node_modules/tsconfig-field/foo.js")) - (f.join("cases/exports"), None, "foo", f.join("node_modules/tsconfig-exports/foo.js")), - (f.join("cases/extends-extension"), None, "foo", f.join("cases/extends-extension/foo.js")), - (f.join("cases/extends-extensionless"), None, "foo", f.join("node_modules/tsconfig-field/foo.js")), - (f.join("cases/extends-paths"), Some("src"), "@/index", f.join("cases/extends-paths/src/index.js")), - (f.join("cases/extends-multiple"), None, "foo", f.join("cases/extends-multiple/foo.js")), - ]; - - for (dir, subdir, request, expected) in pass { - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: dir.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - let path = subdir.map_or(dir.clone(), |subdir| dir.join(subdir)); - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{request} {path:?}"); - } - - #[rustfmt::skip] - let data = [ - (f.join("node_modules/tsconfig-not-used"), "ts-path", Ok(f.join("foo.js"))), - ]; - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - for (path, request, expected) in data { - let resolution = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - assert_eq!(resolution, expected, "{path:?} {request}"); - } -} - -#[tokio::test] -async fn tsconfig_fallthrough() { - let f = super::fixture_root().join("tsconfig"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "/").await; - assert_eq!(resolved_path, Err(ResolveError::NotFound("/".into()))); -} - -#[tokio::test] -async fn json_with_comments() { - let f = super::fixture_root().join("tsconfig/cases/trailing-comma"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "foo").await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(f.join("bar.js"))); -} - -#[tokio::test] -async fn broken() { - let f = super::fixture_root().join("tsconfig"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig_broken.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "/").await; - let _error = ResolveError::JSON(JSONError { - path: f.join("tsconfig_broken.json"), - message: String::from("EOF while parsing an object at line 2 column 0"), - line: 2, - column: 0, - content: Some("{\n".to_string()), - }); - assert!(matches!(resolved_path, Err(ResolveError::JSON(_)))); -} - -#[tokio::test] -async fn empty() { - let f = super::fixture_root().join("tsconfig/cases/empty"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "./index").await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(f.join("index.js"))); -} - -// -#[tokio::test] -async fn test_paths() { - let path = "/foo/tsconfig.json".into(); - let mut tsconfig_json = serde_json::json!({ - "compilerOptions": { - "paths": { - "jquery": ["node_modules/jquery/dist/jquery"], - "*": ["generated/*"], - "bar/*": ["test/*"], - "bar/baz/*": ["baz/*", "yo/*"], - "@/components/*": ["components/*"], - "url": ["node_modules/my-url"], - } - } - }) - .to_string(); - let tsconfig = TsConfig::parse(true, path, &mut tsconfig_json).unwrap(); - - let data = [ - ("jquery", vec!["/foo/node_modules/jquery/dist/jquery"]), - ("test", vec!["/foo/generated/test"]), - ("test/hello", vec!["/foo/generated/test/hello"]), - ("bar/hi", vec!["/foo/test/hi"]), - ("bar/baz/hi", vec!["/foo/baz/hi", "/foo/yo/hi"]), - ("@/components/button", vec!["/foo/components/button"]), - ("./jquery", vec![]), - ("url", vec!["/foo/node_modules/my-url"]), - ]; - - for (specifier, expected) in data { - let paths = tsconfig.resolve_path_alias(specifier); - let expected = expected.into_iter().map(PathBuf::from).collect::>(); - assert_eq!(paths, expected, "{specifier}"); - } -} - -// -#[tokio::test] -async fn test_base_url() { - let path = "/foo/tsconfig.json".into(); - let mut tsconfig_json = serde_json::json!({ - "compilerOptions": { - "baseUrl": "./src" - } - }) - .to_string(); - let tsconfig = TsConfig::parse(true, path, &mut tsconfig_json).unwrap(); - - let data = [ - ("foo", vec!["/foo/src/foo"]), - ("components/button", vec!["/foo/src/components/button"]), - ("./jquery", vec![]), - ]; - - for (specifier, expected) in data { - let paths = tsconfig.resolve_path_alias(specifier); - let expected = expected.into_iter().map(PathBuf::from).collect::>(); - assert_eq!(paths, expected, "{specifier}"); - } -} - -// -#[tokio::test] -async fn test_paths_and_base_url() { - let path = "/foo/tsconfig.json".into(); - let mut tsconfig_json = serde_json::json!({ - "compilerOptions": { - "baseUrl": "./src", - "paths": { - "*": ["generated/*"], - "bar/*": ["test/*"], - "bar/baz/*": ["baz/*", "yo/*"], - "@/components/*": ["components/*"] - } - } - }) - .to_string(); - let tsconfig = TsConfig::parse(true, path, &mut tsconfig_json).unwrap(); - - let data = [ - ("test", vec!["/foo/src/generated/test", "/foo/src/test"]), - ( - "test/hello", - vec!["/foo/src/generated/test/hello", "/foo/src/test/hello"], - ), - ("bar/hi", vec!["/foo/src/test/hi", "/foo/src/bar/hi"]), - ( - "bar/baz/hi", - vec!["/foo/src/baz/hi", "/foo/src/yo/hi", "/foo/src/bar/baz/hi"], - ), - ( - "@/components/button", - vec!["/foo/src/components/button", "/foo/src/@/components/button"], - ), - ("./jquery", vec![]), - ]; - - for (specifier, expected) in data { - let paths = tsconfig.resolve_path_alias(specifier); - let expected = expected.into_iter().map(PathBuf::from).collect::>(); - assert_eq!(paths, expected, "{specifier}"); - } -} - -// Template variable ${configDir} for substitution of config files directory path -// https://github.com/microsoft/TypeScript/pull/58042 -#[tokio::test] -async fn test_template_variable() { - let f = super::fixture_root().join("tsconfig"); - let f2 = f.join("cases").join("paths_template_variable"); - - #[rustfmt::skip] - let pass = [ - (f2.clone(), "tsconfig1.json", "foo", f2.join("foo.js")), - (f2.clone(), "tsconfig2.json", "foo", f2.join("foo.js")), - (f2.clone(), "tsconfig3.json", "foo", f2.join("foo.js")), - (f.clone(), "tsconfig_template_variable.json", "foo", f.join("foo.js")), - (f.clone(), "tsconfig_template_variable_with_base_url.json", "foo", f.join("foo.js")), - ]; - - for (dir, tsconfig, request, expected) in pass { - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: dir.join(tsconfig), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - let resolved_path = resolver.resolve(&dir, request).await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{request} {tsconfig} {dir:?}"); - } -} - -// https://github.com/webpack/enhanced-resolve/pull/579 -// https://github.com/webpack/webpack/issues/20944 -// When a tsconfig `paths` pattern (e.g. "@*") matches a request but the -// mapped target does not exist, resolution should fall through to normal -// module resolution (node_modules), matching TypeScript's native behavior. -#[tokio::test] -async fn tsconfig_paths_scoped_pkg_fallthrough() { - let f = super::fixture_root().join("tsconfig/cases/scoped-pkg-fallthrough"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".ts".into(), ".tsx".into(), ".js".into()], - main_fields: vec!["main".into()], - main_files: vec!["index".into()], - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - // "@helper" resolves via the "@*" mapping when the mapped path exists - let resolved_path = resolver.resolve(&f, "@helper").await.map(|p| p.full_path()); - assert_eq!(resolved_path, Ok(f.join("src/helper/index.ts"))); - - // "@sentry/react" falls through to node_modules when "@*" mapping does - // not resolve to an existing file. - let resolved_path = resolver - .resolve(&f, "@sentry/react") - .await - .map(|p| p.full_path()); - assert_eq!( - resolved_path, - Ok(f.join("node_modules/@sentry/react/index.js")) - ); -} - -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -mod windows_test { - use std::path::{Path, PathBuf}; - - use super::super::memory_fs::MemoryFS; - use crate::{ResolveError, ResolveOptions, ResolverGeneric, TsconfigOptions, TsconfigReferences}; - - struct OneTest { - name: &'static str, - tsconfig: String, - package_json: Option<(PathBuf, String)>, - main_fields: Option>, - existing_files: Vec<&'static str>, - requested_module: &'static str, - expected_path: &'static str, - extensions: Vec, - } - - impl Default for OneTest { - fn default() -> Self { - Self { - name: "", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/*": ["location/*"] - } - } - }) - .to_string(), - package_json: None, - main_fields: None, - existing_files: vec![], - requested_module: "", - expected_path: "", - extensions: vec![ - ".js".into(), - ".json".into(), - ".node".into(), - ".ts".into(), - ".tsx".into(), - ], - } - } - } - - impl OneTest { - fn resolver(&self, root: &Path) -> ResolverGeneric { - let mut file_system = MemoryFS::default(); - - file_system.add_file(&root.join("tsconfig.json"), &self.tsconfig); - if let Some((path, package_json)) = &self.package_json { - file_system.add_file(&root.join(path).join("package.json"), package_json); - } - for path in &self.existing_files { - file_system.add_file(Path::new(path), ""); - } - - let mut options = ResolveOptions { - extensions: self.extensions.clone(), - tsconfig: Some(TsconfigOptions { - config_file: root.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }; - if let Some(main_fields) = &self.main_fields { - options.main_fields.clone_from(main_fields); - } - - ResolverGeneric::::new_with_file_system(file_system, options) - } - } - - // Path matching tests from tsconfig-paths - // * - // * - #[tokio::test] - async fn match_path() { - let pass = [ - OneTest { - name: "should locate path that matches with star and exists", - existing_files: vec!["/root/location/mylib/index.ts"], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve to correct path when many are specified", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/*": ["foo1/*", "foo2/*", "location/*", "foo3/*"], - } - } - }) - .to_string(), - existing_files: vec!["/root/location/mylib/index.ts"], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: - "should locate path that matches with star and prioritize pattern with longest prefix", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "*": ["location/*"], - "lib/*": ["location/*"], - } - } - }) - .to_string(), - existing_files: vec![ - "/root/location/lib/mylib/index.ts", - "/root/location/mylib/index.ts", - ], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should locate path that matches with star and exists with extension", - existing_files: vec!["/root/location/mylib.myext"], - requested_module: "lib/mylib", - extensions: vec![".js".into(), ".myext".into()], - expected_path: "/root/location/mylib.myext", - ..OneTest::default() - }, - OneTest { - name: "should resolve request with extension specified", - existing_files: vec!["/root/location/test.jpg"], - requested_module: "lib/test.jpg", - expected_path: "/root/location/test.jpg", - ..OneTest::default() - }, - OneTest { - name: "should locate path that matches without star and exists", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/foo": ["location/foo"] - } - } - }) - .to_string(), - existing_files: vec!["/root/location/foo.ts"], - requested_module: "lib/foo", - expected_path: "/root/location/foo.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve to parent folder when filename is in subfolder", - existing_files: vec!["/root/location/mylib/index.ts"], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve from main field in package.json", - package_json: Some(( - PathBuf::from("/root/location/mylib"), - serde_json::json!({ - "main": "./kalle.ts" - }) - .to_string(), - )), - existing_files: vec!["/root/location/mylib/kalle.ts"], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/kalle.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve from main field in package.json (js)", - package_json: Some(( - PathBuf::from("/root/location/mylib.js"), - serde_json::json!({ - "main": "./kalle.js" - }) - .to_string(), - )), - existing_files: vec!["/root/location/mylib.js/kalle.js"], - extensions: vec![".ts".into(), ".js".into()], - requested_module: "lib/mylib.js", - expected_path: "/root/location/mylib.js/kalle.js", - ..OneTest::default() - }, - OneTest { - name: "should resolve from list of fields by priority in package.json", - main_fields: Some(vec!["missing".into(), "browser".into(), "main".into()]), - package_json: Some(( - PathBuf::from("/root/location/mylibjs"), - serde_json::json!({ - "main": "./main.js", - "browser": "./browser.js" - }) - .to_string(), - )), - existing_files: vec![ - "/root/location/mylibjs/main.js", - "/root/location/mylibjs/browser.js", - ], - extensions: vec![".ts".into(), ".js".into()], - requested_module: "lib/mylibjs", - expected_path: "/root/location/mylibjs/browser.js", - ..OneTest::default() - }, - OneTest { - name: "should ignore field mappings to missing files in package.json", - main_fields: Some(vec!["browser".into(), "main".into()]), - package_json: Some(( - PathBuf::from("/root/location/mylibjs"), - serde_json::json!({ - "main": "./kalle.js", - "browser": "./nope.js" - }) - .to_string(), - )), - existing_files: vec!["/root/location/mylibjs/kalle.js"], - extensions: vec![".ts".into(), ".js".into()], - requested_module: "lib/mylibjs", - expected_path: "/root/location/mylibjs/kalle.js", - ..OneTest::default() - }, - // Tests that are not applicable: - // name: "should resolve nested main fields" - // name: "should ignore advanced field mappings in package.json" - // name: "should resolve to with the help of baseUrl when not explicitly set" - // name: "should not resolve with the help of baseUrl when asked not to" - // name: "should resolve main file with cjs file extension" - OneTest { - name: "should resolve .ts from .js alias", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "@/*": ["src/*"] - } - } - }) - .to_string(), - existing_files: vec!["/root/src/foo.ts"], - requested_module: "@/foo", // original data was "@/foo.ts" but I don't get why it is the case? - expected_path: "/root/src/foo.ts", // original data was "/root/src/foo" - ..OneTest::default() - }, - ]; - - let root = PathBuf::from("/root"); - - for test in pass { - let resolved_path = test - .resolver(&root) - .resolve(&root, test.requested_module) - .await - .map(|f| f.full_path()); - assert_eq!( - resolved_path, - Ok(PathBuf::from(test.expected_path)), - "{}", - test.name - ); - } - - let fail = [ - OneTest { - name: "should not locate path that does not match", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/*": ["location/*"] - } - } - }) - .to_string(), - existing_files: vec!["/root/location/mylib"], - requested_module: "lib/mylibjs", - ..OneTest::default() - }, - OneTest { - name: "should not resolve typings file (index.d.ts)", - existing_files: vec!["/root/location/mylib/index.d.ts"], - requested_module: "lib/mylib", - ..OneTest::default() - }, - ]; - - for test in fail { - let resolved_path = test - .resolver(&root) - .resolve(&root, test.requested_module) - .await - .map(|f| f.full_path()); - assert_eq!( - resolved_path, - Err(ResolveError::NotFound(test.requested_module.into())), - "{}", - test.name - ); - } - } -} diff --git a/src/tests/tsconfig_project_references.rs b/src/tests/tsconfig_project_references.rs deleted file mode 100644 index 95b3c9cc..00000000 --- a/src/tests/tsconfig_project_references.rs +++ /dev/null @@ -1,298 +0,0 @@ -//! Tests for tsconfig project references - -use crate::{ - ResolveContext, ResolveError, ResolveOptions, Resolver, ResolverPath, TsconfigOptions, - TsconfigReferences, -}; - -#[tokio::test] -async fn auto() { - let f = super::fixture_root().join("tsconfig/cases/project_references"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("app"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - // Test normal paths alias - (f.join("app"), "@/index.ts", f.join("app/aliased/index.ts")), - (f.join("app"), "@/../index.ts", f.join("app/index.ts")), - // Test project reference - (f.join("project_a"), "@/index.ts", f.join("project_a/aliased/index.ts")), - (f.join("project_b/src"), "@/index.ts", f.join("project_b/src/aliased/index.ts")), - // Does not have paths alias - (f.join("project_a"), "./index.ts", f.join("project_a/index.ts")), - (f.join("project_c"), "./index.ts", f.join("project_c/index.ts")), - // Template variable - { - let dir = f.parent().unwrap().join("paths_template_variable"); - (dir.clone(), "foo", dir.join("foo.js")) - } - ]; - - for (path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{request} {path:?}"); - } -} - -#[tokio::test] -#[ignore = "temporary workaround: tsconfig and its references are no longer reported as file dependencies, \ - because a monorepo with many project references bursts memory in the consumer"] -async fn tsconfig_file_as_file_dependencies() { - let f = super::fixture_root().join("tsconfig/cases/project_references"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("app"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - let mut ctx = ResolveContext::default(); - - let resolved_path = resolver - .resolve_with_context(&f.join("project_b/src"), "@/index.ts", &mut ctx) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(f.join("project_b/src/aliased/index.ts"))); - - let expected_dependencies = [ - f.join("app/tsconfig.json"), - f.join("tsconfig.base.json"), - f.join("project_a/conf.json"), - f.join("project_b/tsconfig.json"), - f.join("project_c/tsconfig.json"), - f.parent() - .unwrap() - .join("paths_template_variable/tsconfig2.json"), - ]; - for dependency in expected_dependencies { - assert!( - ctx - .file_dependencies - .contains(&ResolverPath::from(&dependency)), - "missing tsconfig file dependency {dependency:?}: {:?}", - ctx.file_dependencies - ); - } -} - -#[tokio::test] -async fn disabled() { - let f = super::fixture_root().join("tsconfig/cases/project_references"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("app"), - references: TsconfigReferences::Disabled, - }), - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - // Test normal paths alias - (f.join("app"), "@/index.ts", Ok(f.join("app/aliased/index.ts"))), - (f.join("app"), "@/../index.ts", Ok(f.join("app/index.ts"))), - // Test project reference - (f.join("project_a"), "@/index.ts", Ok(f.join("app/aliased/index.ts"))), - (f.join("project_b/src"), "@/index.ts", Ok(f.join("app/aliased/index.ts"))), - // Does not have paths alias - (f.join("project_a"), "./index.ts", Ok(f.join("project_a/index.ts"))), - (f.join("project_c"), "./index.ts", Ok(f.join("project_c/index.ts"))), - ]; - - for (path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, expected, "{request} {path:?}"); - } -} - -#[tokio::test] -async fn manual() { - let f = super::fixture_root().join("tsconfig/cases/project_references"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("app"), - references: TsconfigReferences::Paths(vec!["../project_a/conf.json".into()]), - }), - ..ResolveOptions::default() - }); - - #[rustfmt::skip] - let pass = [ - // Test normal paths alias - (f.join("app"), "@/index.ts", Ok(f.join("app/aliased/index.ts"))), - (f.join("app"), "@/../index.ts", Ok(f.join("app/index.ts"))), - // Test project reference - (f.join("project_a"), "@/index.ts", Ok(f.join("project_a/aliased/index.ts"))), - (f.join("project_b/src"), "@/index.ts", Ok(f.join("app/aliased/index.ts"))), - // Does not have paths alias - (f.join("project_a"), "./index.ts", Ok(f.join("project_a/index.ts"))), - (f.join("project_c"), "./index.ts", Ok(f.join("project_c/index.ts"))), - ]; - - for (path, request, expected) in pass { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, expected, "{request} {path:?}"); - } -} - -#[tokio::test] -async fn self_reference() { - let f = super::fixture_root().join("tsconfig/cases/project_references"); - - #[rustfmt::skip] - let pass = [ - (f.join("app"), vec!["./tsconfig.json".into()]), - (f.join("app/tsconfig.json"), vec!["./tsconfig.json".into()]), - (f.join("app"), vec![f.join("app")]), - (f.join("app/tsconfig.json"), vec![f.join("app")]), - (f.join("app/tsconfig.json"), vec![f.join("project_b"), f.join("app")]), - ]; - - for (config_file, reference_paths) in pass { - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: config_file.clone(), - references: TsconfigReferences::Paths(reference_paths.clone()), - }), - ..ResolveOptions::default() - }); - let path = f.join("app"); - let resolved_path = resolver - .resolve(&path, "@/index.ts") - .await - .map(|f| f.full_path()); - assert_eq!( - resolved_path, - Err(ResolveError::TsconfigSelfReference( - f.join("app/tsconfig.json") - )), - "{config_file:?} {reference_paths:?}" - ); - } -} - -// Transitive project references: A → B → C. -// When the entry tsconfig (A) declares `references: [B]` and B declares -// `references: [C]`, a file inside C must resolve via C's own `paths` -// (matching tsc's "nearest tsconfig wins" behavior and webpack's -// recursive `references: "auto"` walk). -#[tokio::test] -async fn transitive_references() { - let f = super::fixture_root().join("tsconfig/cases/references-transitive"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("app"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let cases = [ - // Direct: file in app uses app's paths. - (f.join("app"), "@/index.ts", f.join("app/aliased/index.ts")), - // One level: file in project_b uses project_b's paths (baseUrl ./src). - ( - f.join("project_b/src"), - "@/index.ts", - f.join("project_b/src/aliased/index.ts"), - ), - // Two levels: file in project_c (referenced by project_b which is - // referenced by app) uses project_c's paths. - ( - f.join("project_c"), - "@/index.ts", - f.join("project_c/aliased/index.ts"), - ), - ]; - - for (path, request, expected) in cases { - let resolved_path = resolver - .resolve(&path, request) - .await - .map(|p| p.full_path()); - assert_eq!(resolved_path, Ok(expected), "{request} from {path:?}"); - } -} - -// When a project reference uses `extends` to inherit its `baseUrl`/`paths` -// from a shared base config, those fields must be merged before the -// reference is consulted for resolution. Without merging `extends` on -// referenced configs, a request from inside `project_b` would see no -// alias candidates and fail to resolve. -#[tokio::test] -async fn references_with_extends() { - let f = super::fixture_root().join("tsconfig/cases/references-extends"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("app"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - // From project_b's directory, the inherited `paths` from - // ../tsconfig.base.json must apply (baseUrl ./src). - let resolved_path = resolver - .resolve(&f.join("project_b/src"), "@/index.ts") - .await - .map(|p| p.full_path()); - assert_eq!(resolved_path, Ok(f.join("project_b/src/aliased/index.ts"))); - - // The entry tsconfig still uses its own `paths`. - let resolved_path = resolver - .resolve(&f.join("app"), "@/index.ts") - .await - .map(|p| p.full_path()); - assert_eq!(resolved_path, Ok(f.join("app/aliased/index.ts"))); -} - -// A pair of project references that form a cycle (a → b → a) must not -// cause infinite recursion / stack overflow when `references: "auto"` -// recursively walks the graph. Each project's own `paths` should still -// be honored from within its own directory. -#[tokio::test] -async fn cyclic_references() { - let f = super::fixture_root().join("tsconfig/cases/references-cycle"); - - let resolver = Resolver::new(ResolveOptions { - extensions: vec![".ts".into()], - tsconfig: Some(TsconfigOptions { - config_file: f.join("a"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver - .resolve(&f.join("a"), "@a/index") - .await - .map(|p| p.full_path()); - assert_eq!(resolved_path, Ok(f.join("a/src/index.ts"))); - - let resolved_path = resolver - .resolve(&f.join("b"), "@b/index") - .await - .map(|p| p.full_path()); - assert_eq!(resolved_path, Ok(f.join("b/src/index.ts"))); -} diff --git a/src/tests/windows.rs b/src/tests/windows.rs deleted file mode 100644 index 492545de..00000000 --- a/src/tests/windows.rs +++ /dev/null @@ -1,62 +0,0 @@ -#[cfg(test)] -mod tests { - use std::{collections::HashSet, path::Path}; - - use camino::Utf8Path; - - use crate::{path::PathUtil, tests::fixture, FileSystemOs, ResolverGeneric}; - - #[tokio::test] - async fn facts_path_compare_use_component_only() { - // So we assert the equality with path's string other than path itself. - let path_win = Path::new("d:\\test\\index.js"); - let path_posix = Path::new("d:/test/index.js"); - - assert_eq!(path_posix, path_win) - } - #[tokio::test] - async fn require_absolution_path_in_windows() { - let resolver = ResolverGeneric::::new(Default::default()); - - let file = fixture().join("foo/index.js"); - let pkg_json = fixture().join("foo/package.json"); - let file_path_string = to_string(&file); - let pkg_json_path_string = to_string(pkg_json); - - let expected_file_deps = { - let mut s = HashSet::new(); - s.insert(file_path_string.clone()); - s.insert(pkg_json_path_string.clone()); - s - }; - - // make a posix style path string e.g d:/foo/bar.js - let specifier = to_string(&file).replace("\\", "/"); - - let mut ctx = Default::default(); - let resolved = resolver - .resolve_with_context(&file, &specifier, &mut ctx) - .await - .unwrap(); - let resolved_path_string = resolved - .path() - .to_str() - .expect("path should be UTF-8") - .to_string(); - let actual_file_deps = ctx - .file_dependencies - .iter() - .map(to_string) - .collect::>(); - - assert_eq!(resolved_path_string, file_path_string); - assert_eq!(expected_file_deps, actual_file_deps); - } - - fn to_string>(p: P) -> String { - Utf8Path::from_path(p.as_ref()) - .expect("path should be UTF-8") - .normalize() - .to_string() - } -} diff --git a/src/tsconfig.rs b/src/tsconfig.rs deleted file mode 100644 index 04c4fc45..00000000 --- a/src/tsconfig.rs +++ /dev/null @@ -1,264 +0,0 @@ -use std::{hash::BuildHasherDefault, sync::Arc}; - -use camino::{Utf8Path, Utf8PathBuf}; -use indexmap::{IndexMap, IndexSet}; -use rustc_hash::FxHasher; -use serde::Deserialize; - -use crate::path::PathUtil; - -pub type CompilerOptionsPathsMap = IndexMap, BuildHasherDefault>; -pub type FileDependencies = IndexSet>; - -#[derive(Debug, Clone, Eq, PartialEq, Deserialize)] -#[serde(untagged)] -pub enum ExtendsField { - Single(String), - Multiple(Vec), -} - -const TEMPLATE_VARIABLE: &str = "${configDir}"; - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct TsConfig { - /// Whether this is the caller tsconfig. - /// Used for final template variable substitution when all configs are extended and merged. - #[serde(skip)] - root: bool, - - /// Path to `tsconfig.json`. Contains the `tsconfig.json` filename. - #[serde(skip)] - pub(crate) path: Utf8PathBuf, - - #[serde(skip)] - pub(crate) file_dependencies: FileDependencies, - - #[serde(default)] - pub extends: Option, - - #[serde(default)] - pub compiler_options: CompilerOptions, - - /// Bubbled up project references with a reference to their tsconfig. - #[serde(default)] - pub references: Vec, - - /// Flattened transitive project references in resolution order. - #[serde(skip)] - pub(crate) flattened_references: Vec>, -} - -/// Compiler Options -/// -/// -#[derive(Debug, Default, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct CompilerOptions { - base_url: Option, - - /// Path aliases - paths: Option, - - /// The actual base for where path aliases are resolved from. - #[serde(skip)] - paths_base: Utf8PathBuf, -} - -/// Project Reference -/// -/// -#[derive(Debug, Deserialize)] -pub struct ProjectReference { - /// The path property of each reference can point to a directory containing a tsconfig.json file, - /// or to the config file itself (which may have any name). - pub path: Utf8PathBuf, - - /// Reference to the resolved tsconfig - #[serde(skip)] - pub tsconfig: Option>, -} - -impl TsConfig { - #[cfg_attr(feature="enable_instrument", tracing::instrument(level=tracing::Level::DEBUG, skip_all, fields(path = path.as_str())))] - pub fn parse(root: bool, path: &Utf8Path, json: &mut str) -> Result { - _ = json_strip_comments::strip(json); - if json.trim().is_empty() { - let mut tsconfig: Self = serde_json::from_str("{}")?; - tsconfig.root = root; - tsconfig.path = path.to_path_buf(); - tsconfig.file_dependencies.insert(path.to_path_buf()); - return Ok(tsconfig); - } - let mut tsconfig: Self = serde_json::from_str(json)?; - tsconfig.root = root; - tsconfig.path = path.to_path_buf(); - tsconfig.file_dependencies.insert(path.to_path_buf()); - let directory = tsconfig.directory().to_path_buf(); - if let Some(base_url) = &tsconfig.compiler_options.base_url { - // keep the `${configDir}` template variable in the baseUrl - if !base_url.starts_with(TEMPLATE_VARIABLE) { - tsconfig.compiler_options.base_url = Some(directory.normalize_with(base_url)); - } - } - if tsconfig.compiler_options.paths.is_some() { - tsconfig.compiler_options.paths_base = tsconfig - .compiler_options - .base_url - .as_ref() - .map_or(directory, Clone::clone); - } - Ok(tsconfig) - } - - pub fn build(mut self) -> Self { - if self.root { - let dir = self.directory().to_path_buf(); - // Substitute template variable in `tsconfig.compilerOptions.paths` - if let Some(paths) = &mut self.compiler_options.paths { - for paths in paths.values_mut() { - for path in paths { - Self::substitute_template_variable(&dir, path); - } - } - } - - let mut p = self.compiler_options.paths_base.as_str().to_string(); - Self::substitute_template_variable(&dir, &mut p); - self.compiler_options.paths_base = p.into(); - - if let Some(base_url) = self.compiler_options.base_url.as_mut() { - let mut p = base_url.as_str().to_string(); - Self::substitute_template_variable(&dir, &mut p); - *base_url = p.into(); - } - } - self - } - - /// Directory to `tsconfig.json` - /// - /// # Panics - /// - /// * When the `tsconfig.json` path is misconfigured. - pub fn directory(&self) -> &Utf8Path { - debug_assert!(self.path.file_name().is_some()); - self.path.parent().unwrap() - } - - pub fn extend_tsconfig(&mut self, other_config: &Self) { - let compiler_options = &mut self.compiler_options; - if compiler_options.paths.is_none() { - compiler_options.paths_base = compiler_options.base_url.as_ref().map_or_else( - || other_config.compiler_options.paths_base.clone(), - Clone::clone, - ); - compiler_options - .paths - .clone_from(&other_config.compiler_options.paths); - } - if compiler_options.base_url.is_none() { - compiler_options - .base_url - .clone_from(&other_config.compiler_options.base_url); - } - self - .file_dependencies - .extend(other_config.file_dependencies.iter().cloned()); - } - - pub fn resolve(&self, path: &Utf8Path, specifier: &str) -> Vec { - for tsconfig in &self.flattened_references { - if path.starts_with(tsconfig.base_path()) { - return tsconfig.resolve_path_alias(specifier); - } - } - self.resolve_path_alias(specifier) - } - - // Copied from parcel - // - pub fn resolve_path_alias(&self, specifier: &str) -> Vec { - if specifier.starts_with(['/', '.']) { - return vec![]; - } - - let base_url_iter = self - .compiler_options - .base_url - .as_ref() - .map_or_else( - Vec::new, - |base_url| vec![base_url.normalize_with(specifier)], - ); - - let Some(paths_map) = &self.compiler_options.paths else { - return base_url_iter; - }; - - let paths = paths_map.get(specifier).map_or_else( - || { - let mut longest_prefix_length = 0; - let mut longest_suffix_length = 0; - let mut best_key: Option<&String> = None; - - for key in paths_map.keys() { - if let Some((prefix, suffix)) = key.split_once('*') { - if (best_key.is_none() || prefix.len() > longest_prefix_length) - && specifier.starts_with(prefix) - && specifier.ends_with(suffix) - { - longest_prefix_length = prefix.len(); - longest_suffix_length = suffix.len(); - best_key.replace(key); - } - } - } - - best_key - .and_then(|key| paths_map.get(key)) - .map_or_else(Vec::new, |paths| { - paths - .iter() - .map(|path| { - path.replace( - '*', - &specifier[longest_prefix_length..specifier.len() - longest_suffix_length], - ) - }) - .collect::>() - }) - }, - Clone::clone, - ); - - paths - .into_iter() - .map(|p| self.compiler_options.paths_base.normalize_with(p)) - .chain(base_url_iter) - .collect() - } - - fn base_path(&self) -> &Utf8Path { - self - .compiler_options - .base_url - .as_ref() - .map_or_else(|| self.directory(), |path| path.as_ref()) - } - - /// Template variable `${configDir}` for substitution of config files directory path - /// - /// NOTE: All tests cases are just a head replacement of `${configDir}`, so we are constrained as such. - /// - /// See - fn substitute_template_variable(directory: &Utf8Path, path: &mut String) { - if let Some(stripped_path) = path.strip_prefix(TEMPLATE_VARIABLE) { - if let Some(unleashed_path) = stripped_path.strip_prefix("/") { - *path = directory.join(unleashed_path).into_string(); - } else { - *path = directory.join(stripped_path).into_string(); - } - } - } -} diff --git a/tests/integration_test.rs b/tests/integration_test.rs deleted file mode 100644 index c66724f4..00000000 --- a/tests/integration_test.rs +++ /dev/null @@ -1,106 +0,0 @@ -//! Test public APIs - -use std::{env, path::PathBuf}; - -use rspack_resolver::{ - EnforceExtension, ModuleType, Resolution, ResolveContext, ResolveOptions, Resolver, -}; - -fn dir() -> PathBuf { - env::current_dir().unwrap() -} - -async fn resolve(specifier: &str) -> Resolution { - let path = dir(); - Resolver::new(ResolveOptions::default()) - .resolve(path, specifier) - .await - .unwrap() -} - -#[tokio::test] -async fn clone() { - let resolution = resolve("./tests/package.json").await; - assert_eq!(resolution.clone(), resolution); -} - -#[tokio::test] -async fn debug() { - let resolution = resolve("./tests/package.json").await; - let s = format!("{resolution:?}"); - assert!(!s.is_empty()); -} - -#[tokio::test] -async fn eq() { - let resolution = resolve("./tests/package.json").await; - assert_eq!(resolution, resolution); -} - -#[tokio::test] -async fn package_json() { - let resolution = resolve("./tests/package.json").await; - let package_json = resolution.package_json().unwrap(); - assert_eq!(package_json.name.as_ref().unwrap(), "name"); - assert_eq!(package_json.r#type, Some(ModuleType::Module)); - assert!(matches!(package_json.side_effects, Some(_))); -} - -#[cfg(feature = "package_json_raw_json_api")] -#[tokio::test] -async fn package_json_raw_json_api() { - let resolution = resolve("./tests/package.json").await; - assert!(resolution - .package_json() - .unwrap() - .raw_json() - .get("name") - .is_some_and(|name| name == "name")); -} - -#[tokio::test] -async fn clear_cache() { - let resolver = Resolver::new(ResolveOptions::default()); - resolver.clear_cache(); // exists -} - -#[tokio::test] -async fn options() { - let resolver = Resolver::new(ResolveOptions::default()); - let options = resolver.options(); - assert!(!format!("{options:?}").is_empty()); -} - -#[tokio::test] -async fn debug_resolver() { - let resolver = Resolver::new(ResolveOptions::default()); - assert!(!format!("{resolver:?}").is_empty()); -} - -#[tokio::test] -async fn dependencies() { - let path = dir(); - let mut ctx = ResolveContext::default(); - let _ = Resolver::new(ResolveOptions::default()) - .resolve_with_context(path, "./tests/package.json", &mut ctx) - .await; - assert!(!ctx.file_dependencies.is_empty()); - assert!(ctx.missing_dependencies.is_empty()); -} - -#[tokio::test] -async fn options_api() { - _ = ResolveOptions::default() - .with_builtin_modules(true) - .with_condition_names(&[]) - .with_extension(".js") - .with_force_extension(EnforceExtension::Auto) - .with_fully_specified(true) - .with_main_field("asdf") - .with_main_file("main") - .with_module("module") - .with_prefer_absolute(true) - .with_prefer_relative(true) - .with_root(PathBuf::new()) - .with_symbolic_link(true); -} diff --git a/tests/package.json b/tests/package.json deleted file mode 100644 index 3ed05299..00000000 --- a/tests/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "name", - "type": "module", - "sideEffects": false -} diff --git a/tests/resolve_test.rs b/tests/resolve_test.rs deleted file mode 100644 index 8b8bbe0d..00000000 --- a/tests/resolve_test.rs +++ /dev/null @@ -1,217 +0,0 @@ -use std::{env, path::PathBuf}; - -use rspack_resolver::{ResolveError, ResolveOptions, Resolver}; - -fn dir() -> PathBuf { - env::current_dir().unwrap() -} - -#[tokio::test] -async fn chinese() { - let dir = dir(); - let specifier = "./fixtures/misc/中文/中文.js"; - let resolution = Resolver::new(ResolveOptions::default()) - .resolve(&dir, specifier) - .await; - assert_eq!( - resolution.map(rspack_resolver::Resolution::into_path_buf), - Ok(dir.join("fixtures/misc/中文/中文.js")) - ); -} - -#[tokio::test] -async fn styled_components() { - let dir = dir(); - let path = dir.join("fixtures/pnpm"); - let module_path = dir.join("fixtures/pnpm/node_modules/styled-components"); - let specifier = "styled-components"; - - // cjs - let options = ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - symlinks: false, - ..ResolveOptions::default() - }; - let resolution = Resolver::new(options).resolve(&path, specifier).await; - assert_eq!( - resolution.map(rspack_resolver::Resolution::into_path_buf), - Ok(module_path.join("dist/styled-components.browser.cjs.js")) - ); - - // esm - let options = ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - main_fields: vec!["module".into()], - symlinks: false, - ..ResolveOptions::default() - }; - let resolution = Resolver::new(options).resolve(&path, specifier).await; - assert_eq!( - resolution.map(rspack_resolver::Resolution::into_path_buf), - Ok(module_path.join("dist/styled-components.browser.esm.js")) - ); -} - -#[tokio::test] -async fn axios() { - let dir = dir(); - let path = dir.join("fixtures/pnpm"); - let module_path = dir.join("node_modules/.pnpm/axios@1.16.0/node_modules/axios"); - let specifier = "axios"; - - // default - let options = ResolveOptions::default(); - let resolution = Resolver::new(options).resolve(&path, specifier).await; - assert_eq!( - resolution.map(rspack_resolver::Resolution::into_path_buf), - Ok(module_path.join("index.js")) - ); - - // browser - let options = ResolveOptions { - condition_names: vec!["browser".into(), "require".into()], - ..ResolveOptions::default() - }; - let resolution = Resolver::new(options).resolve(&path, specifier).await; - assert_eq!( - resolution.map(rspack_resolver::Resolution::into_path_buf), - Ok(module_path.join("dist/browser/axios.cjs")) - ); - - // cjs - let options = ResolveOptions { - condition_names: vec!["node".into(), "require".into()], - ..ResolveOptions::default() - }; - let resolution = Resolver::new(options).resolve(&path, specifier).await; - assert_eq!( - resolution.map(rspack_resolver::Resolution::into_path_buf), - Ok(module_path.join("dist/node/axios.cjs")) - ); -} - -#[tokio::test] -async fn postcss() { - let dir = dir(); - let path = dir.join("fixtures/pnpm"); - let module_path = path.join("node_modules/postcss"); - let resolver = Resolver::new(ResolveOptions { - alias_fields: vec![vec!["browser".into()]], - ..ResolveOptions::default() - }); - - // should ignore "path" - let resolution = resolver.resolve(&module_path, "path").await; - assert_eq!(resolution, Err(ResolveError::Ignored(module_path.clone()))); - - // should ignore "./lib/terminal-highlight" - let resolution = resolver - .resolve(&module_path, "./lib/terminal-highlight") - .await; - assert_eq!( - resolution, - Err(ResolveError::Ignored( - module_path.join("lib/terminal-highlight") - )) - ); -} - -#[tokio::test] -async fn ipaddr_js() { - let dir = dir(); - let path = dir.join("fixtures/pnpm"); - let module_path = - dir.join("node_modules/.pnpm/ipaddr.js@2.2.0/node_modules/ipaddr.js/lib/ipaddr.js"); - - let resolvers = [ - // with `extension_alias` - Resolver::new(ResolveOptions { - extension_alias: vec![( - ".js".into(), - vec![".js".into(), ".ts".into(), ".tsx".into()], - )], - ..ResolveOptions::default() - }), - // with `extensions` should still resolve to module main - Resolver::new(ResolveOptions { - extensions: vec![(".ts".into())], - ..ResolveOptions::default() - }), - // default - Resolver::default(), - ]; - - for resolver in resolvers { - let resolution = resolver - .resolve(&path, "ipaddr.js") - .await - .map(|r| r.full_path()); - assert_eq!(resolution, Ok(module_path.clone())); - } -} - -#[tokio::test] -async fn decimal_js() { - let dir = dir(); - let path = dir.join("fixtures/pnpm"); - let module_path = - dir.join("node_modules/.pnpm/decimal.js@10.4.3/node_modules/decimal.js/decimal.mjs"); - - let resolvers = [ - // with `extension_alias` - Resolver::new(ResolveOptions { - extension_alias: vec![( - ".js".into(), - vec![".js".into(), ".ts".into(), ".tsx".into()], - )], - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }), - // default - Resolver::new(ResolveOptions { - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }), - ]; - - for resolver in resolvers { - let resolution = resolver - .resolve(&path, "decimal.js") - .await - .map(|r| r.full_path()); - assert_eq!(resolution, Ok(module_path.clone())); - } -} - -#[tokio::test] -async fn decimal_js_from_mathjs() { - let dir = dir(); - let path = dir.join("node_modules/.pnpm/mathjs@15.2.0/node_modules/mathjs/lib/esm"); - let module_path = - dir.join("node_modules/.pnpm/decimal.js@10.4.3/node_modules/decimal.js/decimal.mjs"); - - let resolvers = [ - // with `extension_alias` - Resolver::new(ResolveOptions { - extension_alias: vec![( - ".js".into(), - vec![".js".into(), ".ts".into(), ".tsx".into()], - )], - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }), - // default - Resolver::new(ResolveOptions { - condition_names: vec!["import".into()], - ..ResolveOptions::default() - }), - ]; - - for resolver in resolvers { - let resolution = resolver - .resolve(&path, "decimal.js") - .await - .map(|r| r.full_path()); - assert_eq!(resolution, Ok(module_path.clone())); - } -}