diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..2dca7f64e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,29 @@ +# Motivation + +[Include the reason behind these changes and any relevant context.] + +# Description + +[Provide a detailled explanation of the modifications you have made. Link any related issues.] + +# Testing + +[When applicable, detail the testing you have performed to ensure that these changes function as intended. Include information about any added tests.] + +# Impact + +[Discuss the impact of your modifications on ArmoniK. This might include effects on performance, configuration, documentation, new dependencies, or changes in behaviour.] + +# Additional Information + +[Any additional information that reviewers should be aware of.] + +# Checklist + +- [ ] My code adheres to the coding and style guidelines of the project. +- [ ] I have performed a self-review of my code. +- [ ] I have commented my code, particularly in hard-to-understand areas. +- [ ] I have made corresponding changes to the documentation. +- [ ] I have thoroughly tested my modifications and added tests when necessary. +- [ ] Tests pass locally and in the CI. +- [ ] I have assessed the performance impact of my modifications. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c8b0a6d55..1c0f4f158 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,14 +13,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm i -g pnpm @antfu/ni - name: Setup Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18.x cache: pnpm @@ -37,14 +37,14 @@ jobs: timeout-minutes: 15 steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.ref }} fetch-depth: 0 submodules: true - name: Install .NET Core - uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4 + uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4 with: dotnet-version: 6.x @@ -83,7 +83,7 @@ jobs: run: working-directory: packages/python steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 @@ -132,7 +132,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.ref }} fetch-depth: 0 @@ -163,7 +163,7 @@ jobs: if: ${{ failure() && steps.check-diff.conclusion == 'failure' }} run: | git diff > patch-cpp.diff - - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 + - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a if: ${{ failure() && steps.check-diff.conclusion == 'failure' }} with: name: patch-cpp @@ -175,7 +175,7 @@ jobs: timeout-minutes: 15 steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.ref }} fetch-depth: 0 @@ -184,16 +184,53 @@ jobs: - name: Check Diff run: docker run --rm --volume "$(pwd)/Protos/V1:/workspace" --workdir /workspace bufbuild/buf:1.8.0 format -d --exit-code + format-rust: + name: Format and check Rust + strategy: + fail-fast: false + matrix: + toolchain: + - stable + - nightly + runs-on: ubuntu-latest + defaults: + run: + working-directory: packages/rust/armonik + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + with: + fetch-depth: 0 + - uses: taiki-e/install-action@v2 + with: + tool: protoc,sccache + - name: Install toolchain + if: ${{ !contains(matrix.toolchain, 'nightly') }} + uses: dtolnay/rust-toolchain@stable + with: + components: rust-src,rust-docs,rustfmt,clippy + - name: Build + run: | + cargo build --all --locked + - name: Format + run: | + cargo fmt --all --check + - name: Doc + run: | + RUSTDOCFLAGS="-Dwarnings" cargo doc + - name: Clippy + run: | + cargo clippy --all --no-deps -- -Dwarnings -Dunused-crate-dependencies + lint-js: name: Lint JS runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm install -g pnpm@9.1.4 - run: corepack enable - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 20 cache: pnpm @@ -209,14 +246,14 @@ jobs: run: working-directory: packages/web steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm i -g pnpm @antfu/ni - name: Setup Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18.x cache: pnpm @@ -240,14 +277,14 @@ jobs: run: working-directory: packages/angular steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm i -g pnpm @antfu/ni - name: Setup Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18.x cache: pnpm @@ -264,55 +301,6 @@ jobs: - name: Build run: nr build - build-test-python: - name: Build and test Python - runs-on: ubuntu-latest - defaults: - run: - working-directory: packages/python - steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 - with: - fetch-depth: 0 - - - name: pip update and add build package - run: bash proto2python.sh ~/pyvenv - - - name: Install dependencies - run: pip install "$(echo pkg/armonik*.whl)[tests]" - - - name: Install .NET Core - uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4 - with: - dotnet-version: 6.x - - - name: Start Mock server - run: | - cd ../csharp/ArmoniK.Api.Mock - nohup dotnet run > /dev/null 2>&1 & - sleep 60 - - - name: Run tests - run: python -m pytest tests --cov=armonik --cov-config=.coveragerc --cov-report=term-missing --cov-report xml:coverage.xml --cov-report html:coverage_report - - - name: Get Cover - uses: orgoro/coverage@6d7a2607343d2abeab89ef40b54ec9785134e313 - with: - coverageFile: packages/python/coverage.xml - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Archive code coverage results html - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 - with: - name: code-coverage-report-html - path: packages/python/coverage_report - - - name: Archive code coverage results xml - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 - with: - name: code-coverage-report-xml - path: packages/python/coverage.xml - build-cpp-packages: strategy: fail-fast: false @@ -322,7 +310,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.ref }} @@ -331,7 +319,7 @@ jobs: cd packages/cpp/tools/packaging ./make-${{ matrix.type }}.sh - name: Publish package as artefact - uses: actions/upload-artifact@65d862660abb392b8c4a3d1195a2108db131dd05 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a with: if-no-files-found: error path: packages/cpp/tools/packaging/*.${{ matrix.type }} @@ -345,7 +333,7 @@ jobs: working-directory: packages/java steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - name: Set up java 17 @@ -354,5 +342,9 @@ jobs: distribution: oracle java-version: 17 cache: maven + gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Build the package run: mvn clean install -DskipTests + env: + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_SIGNING_KEY_PASSWORD }} diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index d9fee907b..4208e27a9 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -21,12 +21,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - run: npm i -g pnpm @antfu/ni - name: Setup Node - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: '18' cache: pnpm @@ -37,7 +37,7 @@ jobs: # This will be used to avoid the use of the docker image to generate the documentation if the proto files have not changed - name: Cache Generated Docs from Protos id: proto-cache - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: path: .docs/content/api/*.md key: proto-v1-${{ hashFiles('Protos/V1/**.proto') }} @@ -65,12 +65,12 @@ jobs: needs: [generate-proto-docs] steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 # Restore API proto documentation - name: Cache Generated Docs from Protos id: proto-cache - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: path: .docs/content/api/*.md key: proto-v1-${{ hashFiles('Protos/V1/**.proto') }} @@ -78,7 +78,7 @@ jobs: - run: npm i -g pnpm @antfu/ni - name: Setup Node - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: '18' cache: pnpm @@ -110,4 +110,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@decdde0ac072f6dcbe43649d82d9c635fff5b4e4 # v4 + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 diff --git a/.github/workflows/publish-edge.yml b/.github/workflows/publish-edge.yml index ebbcc9ec0..78f560c6b 100644 --- a/.github/workflows/publish-edge.yml +++ b/.github/workflows/publish-edge.yml @@ -17,7 +17,7 @@ jobs: version: ${{ steps.genver.outputs.version }} steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.head_ref }} fetch-depth: 0 @@ -51,14 +51,14 @@ jobs: - packages/csharp/ArmoniK.Api.Tests steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.head_ref }} fetch-depth: 0 # Install the .NET Core workload - name: Install .NET Core - uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4 + uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4 with: dotnet-version: 6.x @@ -91,13 +91,13 @@ jobs: - packages/csharp/ArmoniK.Api.Worker/ArmoniK.Api.Worker.csproj steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.head_ref }} fetch-depth: 0 - name: Install .NET Core - uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4 + uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4 with: dotnet-version: 6.x @@ -119,14 +119,14 @@ jobs: name: Release Angular Package runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.head_ref }} fetch-depth: 0 - run: npm i -g @antfu/ni pnpm - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm @@ -158,14 +158,14 @@ jobs: name: Release Web Package runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.head_ref }} fetch-depth: 0 - run: npm i -g @antfu/ni pnpm - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm @@ -203,7 +203,7 @@ jobs: run: working-directory: packages/python steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 @@ -211,7 +211,7 @@ jobs: run: bash proto2python.sh ~/pyvenv - name: Upload as artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a with: name: python-packages path: packages/python/pkg/ @@ -235,7 +235,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.ref }} @@ -244,9 +244,37 @@ jobs: cd packages/cpp/tools/packaging ./make-${{ matrix.type }}.sh - name: Publish package as artefact - uses: actions/upload-artifact@65d862660abb392b8c4a3d1195a2108db131dd05 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a with: if-no-files-found: error path: packages/cpp/tools/packaging/*.${{ matrix.type }} name: libarmonik.${{ matrix.type }} # TODO Upload to a more permanent storage + + release-java-package: + needs: [version] + name: Release Java Package + runs-on: ubuntu-latest + defaults: + run: + working-directory: packages/java + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - name: Set up Maven Central Repository + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: temurin + server-id: central + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Publish package + run: | + mvn versions:set -DnewVersion=${{ needs.version.outputs.version }} + mvn --batch-mode deploy -DskipTests + env: + MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_SIGNING_KEY_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b41e31fb0..fd7caa496 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,14 +16,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm i -g pnpm @antfu/ni - name: Setup Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18.x cache: pnpm @@ -49,12 +49,12 @@ jobs: - packages/csharp/ArmoniK.Api.Worker/ArmoniK.Api.Worker.csproj steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - name: Install .NET Core - uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4 + uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4 with: dotnet-version: 6.x @@ -75,7 +75,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 @@ -86,7 +86,7 @@ jobs: bash proto2python.sh ~/pyvenv - name: Upload as artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a with: name: python-packages path: packages/python/pkg/ @@ -104,20 +104,20 @@ jobs: uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }} - print_hash: true - packages_dir: packages/python/pkg/ + print-hash: true + packages-dir: packages/python/pkg/ release-angular-packages: needs: [verify-versions] runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm i -g pnpm @antfu/ni - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm @@ -144,13 +144,13 @@ jobs: needs: [verify-versions] runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - run: npm i -g pnpm @antfu/ni - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm @@ -186,7 +186,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: ref: ${{ github.ref }} @@ -195,7 +195,7 @@ jobs: cd packages/cpp/tools/packaging ./make-${{ matrix.type }}.sh - name: Publish package as artefact - uses: actions/upload-artifact@65d862660abb392b8c4a3d1195a2108db131dd05 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a with: if-no-files-found: error path: packages/cpp/tools/packaging/*.${{ matrix.type }} @@ -206,16 +206,40 @@ jobs: run: | gh release upload ${{ github.ref_name }} packages/cpp/tools/packaging/*.${{ matrix.type }} - update-changelog: + release-java-package: needs: [verify-versions] runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - name: Set up Maven Central Repository + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: temurin + server-id: central + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Publish package + run: | + cd packages/java + mvn --batch-mode deploy -DskipTests + env: + MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_SIGNING_KEY_PASSWORD }} + + update-changelog: + needs: [verify-versions] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 - name: Set node - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index eb961627b..61a7e2056 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -17,12 +17,12 @@ jobs: name: Validate PR title runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@c3cd5d1ea3580753008872425915e343e351ab54 # v5 + - uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5 id: lint_pr_title env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: marocchino/sticky-pull-request-comment@efaaab3fd41a9c3de579aba759d2552635e590fd # v2 + - uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 # When the previous steps fails, the workflow would stop. By adding this # condition you can continue the execution with the populated error message. if: always() && (steps.lint_pr_title.outputs.error_message != null) @@ -41,7 +41,7 @@ jobs: # Delete a previous comment when the issue has been resolved - if: ${{ steps.lint_pr_title.outputs.error_message == null }} - uses: marocchino/sticky-pull-request-comment@efaaab3fd41a9c3de579aba759d2552635e590fd # v2 + uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 with: header: pr-title-lint-error delete: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9658ff6d7..f2e686a58 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,46 +11,98 @@ concurrency: cancel-in-progress: true jobs: - csharp: - name: Test C# + test: + name: Test API strategy: fail-fast: false matrix: - dotnet: - - version: '' - framework: net4.7 - - version: '' - framework: net4.8 - - version: 6.0 - framework: net6.0 - - version: 8.0 - framework: net8.0 - platform: + language: + - lang: C# + cmd: dotnet test -f net4.7 --logger "trx;LogFileName=test-results.trx" + dir: csharp/ArmoniK.Api.Client.Test + dotnet: '' + env: {} + - lang: C# + cmd: dotnet test -f net4.7 --logger "trx;LogFileName=test-results.trx" + dir: csharp/ArmoniK.Api.Client.Test + dotnet: '' + env: + GrpcClient__HttpMessageHandler: GrpcWebHandler + - lang: C# + cmd: dotnet test -f net4.8 --logger "trx;LogFileName=test-results.trx" + dir: csharp/ArmoniK.Api.Client.Test + dotnet: '' + env: {} + - lang: C# + cmd: dotnet test -f net4.8 --logger "trx;LogFileName=test-results.trx" + dir: csharp/ArmoniK.Api.Client.Test + dotnet: '' + env: + GrpcClient__HttpMessageHandler: GrpcWebHandler + - lang: C# + cmd: dotnet test -f net6.0 --logger "trx;LogFileName=test-results.trx" + dir: csharp/ArmoniK.Api.Client.Test + dotnet: 6.0 + env: {} + - lang: C# + cmd: dotnet test -f net8.0 --logger "trx;LogFileName=test-results.trx" + dir: csharp/ArmoniK.Api.Client.Test + dotnet: 8.0 + env: {} + - lang: C++ + cmd: ./tools/run_test.sh + dir: cpp + env: {} + - lang: Python + cmd: pytest tests --cov=armonik --cov-config=.coveragerc --cov-report=term-missing --cov-append --cov-report xml:coverage.xml --cov-report html:coverage_report + dir: python + env: {} + - lang: Rust + toolchain: stable + cmd: cargo test --locked + dir: rust/armonik + env: {} + - lang: Rust + toolchain: nightly + cmd: cargo test --locked + dir: rust/armonik + env: {} + plateform: - os: ubuntu-latest - runtime: linux-x64 + - os: windows-latest - os: windows-2019 - runtime: windows-x64 - - os: windows-2022 - runtime: windows-x64 - handler: - - '' - - GrpcWebHandler exclude: - - dotnet: - version: '' - platform: + - language: + lang: Python + plateform: + os: windows-latest + - language: + lang: C++ + plateform: + os: windows-latest + - language: + lang: C++ + plateform: + os: windows-2019 + - language: + lang: Python + plateform: + os: windows-2019 + - language: + lang: Rust + plateform: + os: windows-2019 + - language: + lang: C# + dotnet: '' + plateform: os: ubuntu-latest - - dotnet: - version: 6.0 - handler: GrpcWebHandler - - dotnet: - version: 8.0 - handler: GrpcWebHandler - runs-on: ${{ matrix.platform.os }} + runs-on: ${{ matrix.plateform.os }} + env: ${{ matrix.language.env }} steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 with: fetch-depth: 0 @@ -62,7 +114,7 @@ jobs: cd certs ../../../scripts/certs.sh - name: Install certs - if: ${{ matrix.platform.os == 'ubuntu-latest' }} + if: ${{ matrix.plateform.os == 'ubuntu-latest' }} working-directory: packages/csharp/certs run: | sudo apt install ca-certificates @@ -70,16 +122,56 @@ jobs: sudo cp server2-ca.pem /usr/local/share/ca-certificates/ca.crt sudo update-ca-certificates - name: Install certs - if: ${{ contains(matrix.platform.os, 'windows') }} + if: ${{ contains(matrix.plateform.os, 'windows') }} working-directory: packages/csharp/certs run: | certutil -addstore -f "ROOT" server2-ca.pem - name: Install .NET Core - uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4 - if: ${{ matrix.dotnet.version }} != "" + uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4 + if: ${{ matrix.language.dotnet }} != "" with: - dotnet-version: ${{ matrix.dotnet.version }} + dotnet-version: ${{ matrix.language.dotnet }} + + - name: Print language + run: | + echo "Current language: ${{ matrix.language.lang }}" + + # Prepare Python + - name: pip update and add build package + if: ${{ matrix.language.lang == 'Python' }} + working-directory: packages/python + run: bash proto2python.sh ~/pyvenv + - name: Install python dependencies + if: ${{ matrix.language.lang == 'Python' }} + working-directory: packages/python + run: | + pwd + pip install "$(echo pkg/armonik*.whl)[tests]" + + # Prepare Rust + - uses: taiki-e/install-action@v2 + if: ${{ matrix.language.lang == 'Rust' }} + with: + tool: protoc,sccache + - name: Install Rust toolchain + if: ${{ matrix.language.lang == 'Rust' }} + uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ matrix.language.toolchain }} + components: rust-src,rust-docs,rustfmt${{contains(matrix.language.toolchain, 'nightly') && ',miri' || ''}} + - name: Build Rust package + if: ${{ matrix.language.lang == 'Rust' }} + working-directory: packages/rust/armonik + run: | + cargo build --locked --tests + + # Prepare C++ + - name: Build C++ package + if: ${{ matrix.language.lang == 'C++' }} + working-directory: packages/cpp + run: | + ./tools/build_test.sh - name: Build Mock server working-directory: packages/csharp/ArmoniK.Api.Mock @@ -88,46 +180,153 @@ jobs: dotnet publish -o ../out [ -e ../out/ArmoniK.Api.Mock.exe ] || ln -s ArmoniK.Api.Mock ../out/ArmoniK.Api.Mock.exe - - name: Test + # Run tests + - name: noTLS + working-directory: packages/csharp/ + shell: bash + run: | + export Grpc__Port=5000 + export Http__Port=4999 + export Grpc__Endpoint=http://localhost:5000 + export Http__Endpoint=http://localhost:4999 + export GrpcClient__Endpoint=http://localhost:5000 + export GrpcClient__AllowUnsafeConnection=true + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' + + - name: TLS Insecure + if: ${{ contains(fromJson('["C#", "Rust"]'), matrix.language.lang) }} + working-directory: packages/csharp/ + shell: bash + run: | + export Grpc__Port=5001 + export Http__Port=5001 + export Http__Cert=certs/server1.pem + export Http__Key=certs/server1.key + export Grpc__Endpoint=https://localhost:5001 + export Http__Endpoint=https://localhost:5001 + export Grpc__AllowUnsafeConnection=true + export GrpcClient__Endpoint=https://localhost:5001 + export GrpcClient__AllowUnsafeConnection=true + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' + + - name: TLS secure working-directory: packages/csharp/ shell: bash - env: - GrpcClient__HttpMessageHandler: ${{ matrix.handler }} run: | - set +e - set -x export CertFolder="$PWD/certs" - ./out/ArmoniK.Api.Mock.exe \ - grpc:port=5000 http:port=4999 \ - & notls_pid=$! - ./out/ArmoniK.Api.Mock.exe \ - grpc:port=5001 http:port=5001 \ - http:cert="$CertFolder/server1.pem" http:key="$CertFolder/server1.key" \ - & tls_pid=$! - ./out/ArmoniK.Api.Mock.exe \ - grpc:port=5002 http:port=5002 \ - http:cert="$CertFolder/server2.pem" http:key="$CertFolder/server2.key" \ - & tlsstore_pid=$! - ./out/ArmoniK.Api.Mock.exe \ - grpc:port=5003 http:port=5003 \ - http:cert="$CertFolder/server1.pem" http:key="$CertFolder/server1.key" http:clientcert="$CertFolder/client-ca.pem" \ - & mtls_pid=$! - ./out/ArmoniK.Api.Mock.exe \ - grpc:port=5004 http:port=5004 \ - http:cert="$CertFolder/server2.pem" http:key="$CertFolder/server2.key" http:clientcert="$CertFolder/client-ca.pem" \ - & mtlsstore_pid=$! - sleep 5 - - cd ArmoniK.Api.Client.Test - dotnet test --runtime ${{ matrix.platform.runtime }} -f ${{ matrix.dotnet.framework }} --logger "trx;LogFileName=test-results.trx"; ret=$? - - kill $notls_pid $tls_pid $tlsstore_pid $mtls_pid $mtlsstore_pid - exit $ret + export Grpc__Port=5001 + export Http__Port=5001 + export Http__Cert=certs/server1.pem + export Http__Key=certs/server1.key + export Grpc__Endpoint=https://localhost:5001 + export Http__Endpoint=https://localhost:5001 + export Grpc__CaCert=certs/server1-ca.pem + export GrpcClient__Endpoint=https://localhost:5001 + export GrpcClient__AllowUnsafeConnection=false + export GrpcClient__CaCert=$CertFolder/server1-ca.pem + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' + + - name: TLS store + working-directory: packages/csharp/ + shell: bash + run: | + export Grpc__Port=5002 + export Http__Port=5002 + export Http__Cert=certs/server2.pem + export Http__Key=certs/server2.key + export Grpc__Endpoint=https://localhost:5002 + export Http__Endpoint=https://localhost:5002 + export GrpcClient__Endpoint=https://localhost:5002 + export GrpcClient__AllowUnsafeConnection=false + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' + + - name: mTLS Insecure + if: ${{ contains(fromJson('["C#", "Rust"]'), matrix.language.lang) }} + working-directory: packages/csharp/ + shell: bash + run: | + export CertFolder="$PWD/certs" + export Grpc__Port=5003 + export Http__Port=5003 + export Http__Cert=certs/server1.pem + export Http__Key=certs/server1.key + export Grpc__Endpoint=https://localhost:5003 + export Http__Endpoint=https://localhost:5003 + export Grpc__ClientCert=certs/client.pem + export Grpc__ClientKey=certs/client.key + export GrpcClient__Endpoint=https://localhost:5003 + export GrpcClient__AllowUnsafeConnection=true + export GrpcClient__CertPem=$CertFolder/client.pem + export GrpcClient__KeyPem=$CertFolder/client.key + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' + + - name: mTLS secure + working-directory: packages/csharp/ + shell: bash + run: | + export CertFolder="$PWD/certs" + export Grpc__Port=5003 + export Http__Port=5003 + export Http__Cert=certs/server1.pem + export Http__Key=certs/server1.key + export Http__ClientCert=certs/client-ca.pem + export Grpc__Endpoint=https://localhost:5003 + export Http__Endpoint=https://localhost:5003 + export Grpc__CaCert=certs/server1-ca.pem + export Grpc__ClientCert=certs/client.pem + export Grpc__ClientKey=certs/client.key + export GrpcClient__Endpoint=https://localhost:5003 + export GrpcClient__AllowUnsafeConnection=false + export GrpcClient__CaCert=$CertFolder/server1-ca.pem + export GrpcClient__CertPem=$CertFolder/client.pem + export GrpcClient__KeyPem=$CertFolder/client.key + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' + + - name: mTLS store + working-directory: packages/csharp/ + shell: bash + run: | + export CertFolder="$PWD/certs" + export Grpc__Port=5004 + export Http__Port=5004 + export Http__Cert=certs/server2.pem + export Http__Key=certs/server2.key + export Http__ClientCert=certs/client-ca.pem + export Grpc__Endpoint=https://localhost:5004 + export Http__Endpoint=https://localhost:5004 + export Grpc__ClientCert=certs/client.pem + export Grpc__ClientKey=certs/client.key + export GrpcClient__Endpoint=https://localhost:5004 + export GrpcClient__AllowUnsafeConnection=false + export GrpcClient__CertPem=$CertFolder/client.pem + export GrpcClient__KeyPem=$CertFolder/client.key + ../../scripts/mock_test.sh ${{ matrix.language.dir }} '${{ matrix.language.cmd }}' - name: Test Report uses: dorny/test-reporter@v1 - if: always() + if: ${{ matrix.language.lang == 'C#' && always() }} with: - name: ConnectivityTests ${{ matrix.platform.os }} ${{ matrix.dotnet.framework }} ${{ matrix.handler }} + name: ConnectivityTests ${{ matrix.plateform.os }} ${{ matrix.dotnet.framework }} ${{ matrix.language.handler }} path: ./packages/csharp/ArmoniK.Api.Client.Test/TestResults/test-results.trx reporter: dotnet-trx + + - name: Get Cover Python + uses: orgoro/coverage@3f13a558c5af7376496aa4848bf0224aead366ac + if: ${{ matrix.language.lang == 'Python' && always() }} + with: + coverageFile: packages/python/coverage.xml + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Archive code coverage results html + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a + if: ${{ matrix.language.lang == 'Python' && always() }} + with: + name: code-coverage-report-html + path: packages/python/coverage_report + + - name: Archive code coverage results xml + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a + if: ${{ matrix.language.lang == 'Python' && always() }} + with: + name: code-coverage-report-xml + path: packages/python/coverage.xml diff --git a/.github/workflows/validate-docs-generation.yml b/.github/workflows/validate-docs-generation.yml index da38ddb01..3d493e56f 100644 --- a/.github/workflows/validate-docs-generation.yml +++ b/.github/workflows/validate-docs-generation.yml @@ -15,12 +15,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - run: npm i -g pnpm @antfu/ni - name: Setup Node - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm @@ -39,11 +39,11 @@ jobs: name: Lint Markdown runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - run: npm i -g pnpm @antfu/ni - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm @@ -57,11 +57,11 @@ jobs: name: Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - run: npm i -g pnpm @antfu/ni - - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: node-version: 18 cache: pnpm diff --git a/.gitignore b/.gitignore index 19ea261d4..5a6153380 100644 --- a/.gitignore +++ b/.gitignore @@ -375,10 +375,14 @@ dist *.pbconf.ts *.pbsc.ts +# Rust +**/target + !packages/common !packages/csharp !packages/cpp !packages/python +!packages/rust !packages/angular !packages/web !packages/java diff --git a/.vscode/settings.json b/.vscode/settings.json index bdbe81553..15c632896 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,14 @@ ] }, "cSpell.words": [ - "Armoni" + "Armoni", + "armonik" + ], + "[rust]": { + "editor.tabSize": 4 + }, + "rust-analyzer.cachePriming.enable": true, + "rust-analyzer.linkedProjects": [ + "./packages/rust/armonik/Cargo.toml" ] } diff --git a/Protos/V1/results_common.proto b/Protos/V1/results_common.proto index a19f1dd19..cdad433f3 100644 --- a/Protos/V1/results_common.proto +++ b/Protos/V1/results_common.proto @@ -24,6 +24,7 @@ message ResultRaw { google.protobuf.Timestamp completed_at = 6; /** The result completion date. */ string result_id = 8; /** The result ID. Uniquely generated by the server. */ int64 size = 9; /** The size of the Result Data. */ + string created_by = 10; /** The ID of the Task that as submitted this result.*/ } /** @@ -122,7 +123,7 @@ message CreateResultsMetaDataResponse { } /* -* Request for creating results without data +* Request for creating results with data */ message CreateResultsRequest { /** diff --git a/Protos/V1/results_fields.proto b/Protos/V1/results_fields.proto index 25ee9f0c1..028d495eb 100644 --- a/Protos/V1/results_fields.proto +++ b/Protos/V1/results_fields.proto @@ -17,6 +17,7 @@ enum ResultRawEnumField { RESULT_RAW_ENUM_FIELD_COMPLETED_AT = 6; /** The result completion date. */ RESULT_RAW_ENUM_FIELD_RESULT_ID = 7; /** The result ID. */ RESULT_RAW_ENUM_FIELD_SIZE = 8; /** The size of the result. */ + RESULT_RAW_ENUM_FIELD_CREATED_BY = 9; /** The size of the result. */ } /** diff --git a/Protos/V1/task_status.proto b/Protos/V1/task_status.proto index 9855c85f6..7f94a2904 100644 --- a/Protos/V1/task_status.proto +++ b/Protos/V1/task_status.proto @@ -23,4 +23,6 @@ enum TaskStatus { TASK_STATUS_PROCESSING = 9; /** Task is being processed. */ TASK_STATUS_PROCESSED = 10; /** Task is processed. */ TASK_STATUS_RETRIED = 11; /** Task is retried. */ + TASK_STATUS_PENDING = 12; /** Task is waiting for its dependencies before becoming executable. */ + TASK_STATUS_PAUSED = 13; /** Task is paused and will not be executed until session is resumed. */ } diff --git a/Protos/V1/tasks_common.proto b/Protos/V1/tasks_common.proto index 692f3a405..169da9118 100644 --- a/Protos/V1/tasks_common.proto +++ b/Protos/V1/tasks_common.proto @@ -51,6 +51,7 @@ message TaskDetailed { google.protobuf.Duration received_to_end_duration = 23; /** The task calculated duration. Between the received date and the end date. */ string payload_id = 26; /** The ID of the Result that is used as a payload for this task. */ + string created_by = 27; /** The ID of the Task that as submitted this task empty if none.*/ /** * Represents the task output. @@ -102,6 +103,7 @@ message TaskSummary { google.protobuf.Duration received_to_end_duration = 24; /** The task calculated duration. Between the received date and the end date. */ string payload_id = 26; /** The ID of the Result that is used as a payload for this task. */ + string created_by = 27; /** The ID of the Task that as submitted this task empty if none.*/ string error = 8; /** The error message. Only set if task have failed. */ string pod_hostname = 17; /** The hostname of the container running the task. */ diff --git a/Protos/V1/tasks_fields.proto b/Protos/V1/tasks_fields.proto index 7e2dd6e6b..8ed611b75 100644 --- a/Protos/V1/tasks_fields.proto +++ b/Protos/V1/tasks_fields.proto @@ -29,6 +29,7 @@ enum TaskSummaryEnumField { TASK_SUMMARY_ENUM_FIELD_ERROR = 8; /** The error message. Only set if task have failed. */ TASK_SUMMARY_ENUM_FIELD_FETCHED_AT = 19; /** When task data are fetched by the agent. */ TASK_SUMMARY_ENUM_FIELD_PAYLOAD_ID = 20; /** The ID of the Result that is used as a payload for this task. */ + TASK_SUMMARY_ENUM_FIELD_CREATED_BY = 21; /** The ID of the Result that is used as a payload for this task. */ } /** diff --git a/eslint.config.mjs b/eslint.config.mjs index 49c5b2cbb..001c52edb 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -7,6 +7,7 @@ export default antfu({ '.docs', 'packages/csharp', 'packages/cpp', + 'packages/rust', ], }).overrideRules({ 'antfu/consistent-list-newline': 'off', diff --git a/examples/angular/.editorconfig b/examples/angular/.editorconfig deleted file mode 100644 index 66971fae9..000000000 --- a/examples/angular/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single diff --git a/examples/angular/.gitignore b/examples/angular/.gitignore deleted file mode 100644 index 54426f474..000000000 --- a/examples/angular/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db - -src/proxy.conf.json diff --git a/examples/angular/.vscode/extensions.json b/examples/angular/.vscode/extensions.json deleted file mode 100644 index 77b374577..000000000 --- a/examples/angular/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 - "recommendations": ["angular.ng-template"] -} diff --git a/examples/angular/.vscode/launch.json b/examples/angular/.vscode/launch.json deleted file mode 100644 index 925af8370..000000000 --- a/examples/angular/.vscode/launch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "ng serve", - "type": "chrome", - "request": "launch", - "preLaunchTask": "npm: start", - "url": "http://localhost:4200/" - }, - { - "name": "ng test", - "type": "chrome", - "request": "launch", - "preLaunchTask": "npm: test", - "url": "http://localhost:9876/debug.html" - } - ] -} diff --git a/examples/angular/.vscode/tasks.json b/examples/angular/.vscode/tasks.json deleted file mode 100644 index a298b5bd8..000000000 --- a/examples/angular/.vscode/tasks.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "start", - "isBackground": true, - "problemMatcher": { - "owner": "typescript", - "pattern": "$tsc", - "background": { - "activeOnStart": true, - "beginsPattern": { - "regexp": "(.*?)" - }, - "endsPattern": { - "regexp": "bundle generation complete" - } - } - } - }, - { - "type": "npm", - "script": "test", - "isBackground": true, - "problemMatcher": { - "owner": "typescript", - "pattern": "$tsc", - "background": { - "activeOnStart": true, - "beginsPattern": { - "regexp": "(.*?)" - }, - "endsPattern": { - "regexp": "bundle generation complete" - } - } - } - } - ] -} diff --git a/examples/angular/README.md b/examples/angular/README.md deleted file mode 100644 index fb1532501..000000000 --- a/examples/angular/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Angular Example - -This is a demo to explain the use of ArmoniK Api for Angular. - -Please refer to the documentation to get more information about the use of the library. You will find a guide on how to use ArmoniK API with Angular. - -## How to run - -_You must have an ArmoniK instance running to run this example._ - -To run this example, you need to install the dependencies first: - -```bash -pnpm install -``` - -Then, create a `src/proxy.conf.json` from the `src/proxy.conf.json.example` file. You can do it by running: - -```bash -cp src/proxy.conf.json.example src/proxy.conf.json -``` - -And replace `:` with the IP and port of your ArmoniK instance. - -Finally, you can run the example: - -```bash -pnpm start -``` diff --git a/examples/angular/angular.json b/examples/angular/angular.json deleted file mode 100644 index 42b1f00ad..000000000 --- a/examples/angular/angular.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "armonik-api-angular": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "inlineTemplate": true, - "inlineStyle": true, - "skipTests": true, - "standalone": true - }, - "@schematics/angular:class": { - "skipTests": true - }, - "@schematics/angular:directive": { - "skipTests": true, - "standalone": true - }, - "@schematics/angular:guard": { - "skipTests": true - }, - "@schematics/angular:interceptor": { - "skipTests": true - }, - "@schematics/angular:pipe": { - "skipTests": true, - "standalone": true - }, - "@schematics/angular:resolver": { - "skipTests": true - }, - "@schematics/angular:service": { - "skipTests": true - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/armonik-api-angular", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": [ - "zone.js" - ], - "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "proxyConfig": "src/proxy.conf.json" - }, - "configurations": { - "production": { - "browserTarget": "armonik-api-angular:build:production" - }, - "development": { - "browserTarget": "armonik-api-angular:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "armonik-api-angular:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "polyfills": [ - "zone.js", - "zone.js/testing" - ], - "tsConfig": "tsconfig.spec.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.css" - ], - "scripts": [] - } - } - } - } - } -} diff --git a/examples/angular/package.json b/examples/angular/package.json deleted file mode 100644 index 6d1d8de45..000000000 --- a/examples/angular/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "armonik-api-angular", - "version": "0.0.0", - "private": true, - "description": "This project is a demo of the ArmoniK API Angular library", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" - }, - "dependencies": { - "@aneoconsultingfr/armonik.api.angular": "^3.8.1", - "@angular/animations": "^16.0.0", - "@angular/common": "^16.0.0", - "@angular/compiler": "^16.0.0", - "@angular/core": "^16.0.0", - "@angular/forms": "^16.0.0", - "@angular/platform-browser": "^16.0.0", - "@angular/platform-browser-dynamic": "^16.0.0", - "@angular/router": "^16.0.0", - "@ngx-grpc/common": "^3.1.1", - "@ngx-grpc/core": "^3.1.1", - "@ngx-grpc/grpc-web-client": "^3.1.1", - "google-protobuf": "^3.21.2", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.0.0", - "@angular/cli": "~16.0.0", - "@angular/compiler-cli": "^16.0.0", - "@types/google-protobuf": "^3.15.6", - "@types/jasmine": "~4.3.0", - "jasmine-core": "~4.6.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "typescript": "~5.0.2" - } -} diff --git a/examples/angular/pnpm-lock.yaml b/examples/angular/pnpm-lock.yaml deleted file mode 100644 index d0ecfdcbc..000000000 --- a/examples/angular/pnpm-lock.yaml +++ /dev/null @@ -1,7101 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@aneoconsultingfr/armonik.api.angular': - specifier: ^3.8.1 - version: 3.8.1(@angular/common@16.0.0)(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(@ngx-grpc/core@3.1.1)(@ngx-grpc/well-known-types@3.1.1)(google-protobuf@3.21.2)(rxjs@7.8.0) - '@angular/animations': - specifier: ^16.0.0 - version: 16.0.0(@angular/core@16.0.0) - '@angular/common': - specifier: ^16.0.0 - version: 16.0.0(@angular/core@16.0.0)(rxjs@7.8.0) - '@angular/compiler': - specifier: ^16.0.0 - version: 16.0.0(@angular/core@16.0.0) - '@angular/core': - specifier: ^16.0.0 - version: 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@angular/forms': - specifier: ^16.0.0 - version: 16.0.0(@angular/common@16.0.0)(@angular/core@16.0.0)(@angular/platform-browser@16.0.0)(rxjs@7.8.0) - '@angular/platform-browser': - specifier: ^16.0.0 - version: 16.0.0(@angular/animations@16.0.0)(@angular/common@16.0.0)(@angular/core@16.0.0) - '@angular/platform-browser-dynamic': - specifier: ^16.0.0 - version: 16.0.0(@angular/common@16.0.0)(@angular/compiler@16.0.0)(@angular/core@16.0.0)(@angular/platform-browser@16.0.0) - '@angular/router': - specifier: ^16.0.0 - version: 16.0.0(@angular/common@16.0.0)(@angular/core@16.0.0)(@angular/platform-browser@16.0.0)(rxjs@7.8.0) - '@ngx-grpc/common': - specifier: ^3.1.1 - version: 3.1.1(google-protobuf@3.21.2)(rxjs@7.8.0) - '@ngx-grpc/core': - specifier: ^3.1.1 - version: 3.1.1(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(rxjs@7.8.0) - '@ngx-grpc/grpc-web-client': - specifier: ^3.1.1 - version: 3.1.1(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(@ngx-grpc/core@3.1.1)(grpc-web@1.4.2)(rxjs@7.8.0) - google-protobuf: - specifier: ^3.21.2 - version: 3.21.2 - rxjs: - specifier: ~7.8.0 - version: 7.8.0 - tslib: - specifier: ^2.3.0 - version: 2.3.0 - zone.js: - specifier: ~0.13.0 - version: 0.13.0 - -devDependencies: - '@angular-devkit/build-angular': - specifier: ^16.0.0 - version: 16.0.0(@angular/compiler-cli@16.0.0)(@types/node@20.3.1)(karma@6.4.0)(ts-node@10.9.1)(typescript@5.0.2) - '@angular/cli': - specifier: ~16.0.0 - version: 16.0.0 - '@angular/compiler-cli': - specifier: ^16.0.0 - version: 16.0.0(@angular/compiler@16.0.0)(typescript@5.0.2) - '@types/google-protobuf': - specifier: ^3.15.6 - version: 3.15.6 - '@types/jasmine': - specifier: ~4.3.0 - version: 4.3.0 - jasmine-core: - specifier: ~4.6.0 - version: 4.6.0 - karma: - specifier: ~6.4.0 - version: 6.4.0 - karma-chrome-launcher: - specifier: ~3.2.0 - version: 3.2.0 - karma-coverage: - specifier: ~2.2.0 - version: 2.2.0 - karma-jasmine: - specifier: ~5.1.0 - version: 5.1.0(karma@6.4.0) - karma-jasmine-html-reporter: - specifier: ~2.0.0 - version: 2.0.0(jasmine-core@4.6.0)(karma-jasmine@5.1.0)(karma@6.4.0) - typescript: - specifier: ~5.0.2 - version: 5.0.2 - -packages: - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - - /@aneoconsultingfr/armonik.api.angular@3.8.1(@angular/common@16.0.0)(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(@ngx-grpc/core@3.1.1)(@ngx-grpc/well-known-types@3.1.1)(google-protobuf@3.21.2)(rxjs@7.8.0): - resolution: {integrity: sha512-pQbonS92JysGclvWQtMK1saH34t72zpTm0x/yrHZDS7DOWUPYpxq+Z3YjbpofhyxoNNqaqcCPPeHcUMA+s7yCw==} - peerDependencies: - '@angular/common': ^15.1.0 - '@angular/core': ^15.1.0 - '@ngx-grpc/common': ^3.1.1 - '@ngx-grpc/core': ^3.1.1 - '@ngx-grpc/well-known-types': ^3.1.1 - google-protobuf: ^3.21.2 - rxjs: ~7.8.0 - dependencies: - '@angular/common': 16.0.0(@angular/core@16.0.0)(rxjs@7.8.0) - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@ngx-grpc/common': 3.1.1(google-protobuf@3.21.2)(rxjs@7.8.0) - '@ngx-grpc/core': 3.1.1(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(rxjs@7.8.0) - '@ngx-grpc/well-known-types': 3.1.1(@ngx-grpc/common@3.1.1)(google-protobuf@3.21.2) - google-protobuf: 3.21.2 - rxjs: 7.8.0 - tslib: 2.5.0 - dev: false - - /@angular-devkit/architect@0.1600.0(chokidar@3.5.3): - resolution: {integrity: sha512-nYRcqAxZnndhAEpSpJ1U2TScs2huu674OKrsEyJTqLEANEyCPBnusAmS9HcGzMBgePAwNElqOKrr5/f1DbYq1A==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 16.0.0(chokidar@3.5.3) - rxjs: 7.8.1 - transitivePeerDependencies: - - chokidar - dev: true - - /@angular-devkit/build-angular@16.0.0(@angular/compiler-cli@16.0.0)(@types/node@20.3.1)(karma@6.4.0)(ts-node@10.9.1)(typescript@5.0.2): - resolution: {integrity: sha512-OvDQAbrV3cUMfHws30MnDURsXselZ0GWhSxZjOdcD3cF64Nsq5ywftHOT+QC3YdDghwI8gMADN9et+aVDscBzQ==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - '@angular/compiler-cli': ^16.0.0 - '@angular/localize': ^16.0.0 - '@angular/platform-server': ^16.0.0 - '@angular/service-worker': ^16.0.0 - jest: ^29.5.0 - jest-environment-jsdom: ^29.5.0 - karma: ^6.3.0 - ng-packagr: ^16.0.0 - protractor: ^7.0.0 - tailwindcss: ^2.0.0 || ^3.0.0 - typescript: '>=4.9.3 <5.1' - peerDependenciesMeta: - '@angular/localize': - optional: true - '@angular/platform-server': - optional: true - '@angular/service-worker': - optional: true - jest: - optional: true - jest-environment-jsdom: - optional: true - karma: - optional: true - ng-packagr: - optional: true - protractor: - optional: true - tailwindcss: - optional: true - dependencies: - '@ampproject/remapping': 2.2.1 - '@angular-devkit/architect': 0.1600.0(chokidar@3.5.3) - '@angular-devkit/build-webpack': 0.1600.0(chokidar@3.5.3)(webpack-dev-server@4.13.2)(webpack@5.80.0) - '@angular-devkit/core': 16.0.0(chokidar@3.5.3) - '@angular/compiler-cli': 16.0.0(@angular/compiler@16.0.0)(typescript@5.0.2) - '@babel/core': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-runtime': 7.21.4(@babel/core@7.21.4) - '@babel/preset-env': 7.21.4(@babel/core@7.21.4) - '@babel/runtime': 7.21.0 - '@babel/template': 7.20.7 - '@discoveryjs/json-ext': 0.5.7 - '@ngtools/webpack': 16.0.0(@angular/compiler-cli@16.0.0)(typescript@5.0.2)(webpack@5.80.0) - '@vitejs/plugin-basic-ssl': 1.0.1(vite@4.3.1) - ansi-colors: 4.1.3 - autoprefixer: 10.4.14(postcss@8.4.23) - babel-loader: 9.1.2(@babel/core@7.21.4)(webpack@5.80.0) - babel-plugin-istanbul: 6.1.1 - browserslist: 4.21.5 - cacache: 17.0.6 - chokidar: 3.5.3 - copy-webpack-plugin: 11.0.0(webpack@5.80.0) - critters: 0.0.16 - css-loader: 6.7.3(webpack@5.80.0) - esbuild-wasm: 0.17.18 - glob: 8.1.0 - https-proxy-agent: 5.0.1 - inquirer: 8.2.4 - jsonc-parser: 3.2.0 - karma: 6.4.0 - karma-source-map-support: 1.4.0 - less: 4.1.3 - less-loader: 11.1.0(less@4.1.3)(webpack@5.80.0) - license-webpack-plugin: 4.0.2(webpack@5.80.0) - loader-utils: 3.2.1 - magic-string: 0.30.0 - mini-css-extract-plugin: 2.7.5(webpack@5.80.0) - mrmime: 1.0.1 - open: 8.4.2 - ora: 5.4.1 - parse5-html-rewriting-stream: 7.0.0 - piscina: 3.2.0 - postcss: 8.4.23 - postcss-loader: 7.2.4(@types/node@20.3.1)(postcss@8.4.23)(ts-node@10.9.1)(typescript@5.0.2)(webpack@5.80.0) - resolve-url-loader: 5.0.0 - rxjs: 7.8.1 - sass: 1.62.1 - sass-loader: 13.2.2(sass@1.62.1)(webpack@5.80.0) - semver: 7.4.0 - source-map-loader: 4.0.1(webpack@5.80.0) - source-map-support: 0.5.21 - terser: 5.17.1 - text-table: 0.2.0 - tree-kill: 1.2.2 - tslib: 2.5.0 - typescript: 5.0.2 - vite: 4.3.1(@types/node@20.3.1)(less@4.1.3)(sass@1.62.1)(terser@5.17.1) - webpack: 5.80.0(esbuild@0.17.18) - webpack-dev-middleware: 6.0.2(webpack@5.80.0) - webpack-dev-server: 4.13.2(webpack@5.80.0) - webpack-merge: 5.8.0 - webpack-subresource-integrity: 5.1.0(webpack@5.80.0) - optionalDependencies: - esbuild: 0.17.18 - transitivePeerDependencies: - - '@swc/core' - - '@types/node' - - bluebird - - bufferutil - - debug - - fibers - - html-webpack-plugin - - node-sass - - sass-embedded - - stylus - - sugarss - - supports-color - - ts-node - - uglify-js - - utf-8-validate - - webpack-cli - dev: true - - /@angular-devkit/build-webpack@0.1600.0(chokidar@3.5.3)(webpack-dev-server@4.13.2)(webpack@5.80.0): - resolution: {integrity: sha512-ZlNNMtAzgMCsaN5crkqtgeYxWEyZ78/ePfrJTB3+Hb6LS+hsRf4WAYubHWRWReSx87ppluRrgNZLy0K9ooWy1w==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - webpack: ^5.30.0 - webpack-dev-server: ^4.0.0 - dependencies: - '@angular-devkit/architect': 0.1600.0(chokidar@3.5.3) - rxjs: 7.8.1 - webpack: 5.80.0(esbuild@0.17.18) - webpack-dev-server: 4.13.2(webpack@5.80.0) - transitivePeerDependencies: - - chokidar - dev: true - - /@angular-devkit/core@16.0.0(chokidar@3.5.3): - resolution: {integrity: sha512-YJKvAJlg4/lfP93pQNawlOTQalynWGpoatZU+1aXBgRh5YCTKu2S/A3gtQ71DBuhac76gJe1RpxDoq41kB2KlQ==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^3.5.2 - peerDependenciesMeta: - chokidar: - optional: true - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - chokidar: 3.5.3 - jsonc-parser: 3.2.0 - rxjs: 7.8.1 - source-map: 0.7.4 - dev: true - - /@angular-devkit/schematics@16.0.0: - resolution: {integrity: sha512-9uFOqjOQdhnpxU5mku2LvBkV5Ave2ihHBFaQCH7vQ7DD+p4NpLHu93bMSh+f7k9W7F0lY18g9qrihRgK/7wfuA==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 16.0.0(chokidar@3.5.3) - jsonc-parser: 3.2.0 - magic-string: 0.30.0 - ora: 5.4.1 - rxjs: 7.8.1 - transitivePeerDependencies: - - chokidar - dev: true - - /@angular/animations@16.0.0(@angular/core@16.0.0): - resolution: {integrity: sha512-Xx4Ffdo3sweg24MDVAXbDfxqkNPEuRgqOC1+f9171kf+w7cBEr4Bmy37DP7YkJceaU0xJH9imcx4708KeIjqkQ==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/core': 16.0.0 - dependencies: - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - tslib: 2.3.0 - dev: false - - /@angular/cli@16.0.0: - resolution: {integrity: sha512-vsveaSJ5kj0MeJCg1nir5iJJEsdrRRnyNeL1awMcyrEjAhBPX3d0gfOP2fe0HR5KJtntX8zvihGus3i48Quo7A==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - hasBin: true - dependencies: - '@angular-devkit/architect': 0.1600.0(chokidar@3.5.3) - '@angular-devkit/core': 16.0.0(chokidar@3.5.3) - '@angular-devkit/schematics': 16.0.0 - '@schematics/angular': 16.0.0 - '@yarnpkg/lockfile': 1.1.0 - ansi-colors: 4.1.3 - ini: 4.0.0 - inquirer: 8.2.4 - jsonc-parser: 3.2.0 - npm-package-arg: 10.1.0 - npm-pick-manifest: 8.0.1 - open: 8.4.2 - ora: 5.4.1 - pacote: 15.1.3 - resolve: 1.22.2 - semver: 7.4.0 - symbol-observable: 4.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - chokidar - - supports-color - dev: true - - /@angular/common@16.0.0(@angular/core@16.0.0)(rxjs@7.8.0): - resolution: {integrity: sha512-at3/xCevf2t9swX2P7K7gaSBuQPy7ZJsf37qQkYIuczzfij69r7s9NjYeA74/q3EWG9Yl2DCrhYoCW7ViXQINQ==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/core': 16.0.0 - rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - rxjs: 7.8.0 - tslib: 2.3.0 - dev: false - - /@angular/compiler-cli@16.0.0(@angular/compiler@16.0.0)(typescript@5.0.2): - resolution: {integrity: sha512-oyJzxiTHxziv7mD0QuA7K6tpDoL6YNGPkquKjeJjNVZvUrodGsvJ8xHO4ydmjK3nMu2ET1YarsdI8bRp4vp/7w==} - engines: {node: ^16.14.0 || >=18.10.0} - hasBin: true - peerDependencies: - '@angular/compiler': 16.0.0 - typescript: '>=4.9.3 <5.1' - dependencies: - '@angular/compiler': 16.0.0(@angular/core@16.0.0) - '@babel/core': 7.19.3 - '@jridgewell/sourcemap-codec': 1.4.15 - chokidar: 3.5.3 - convert-source-map: 1.9.0 - reflect-metadata: 0.1.13 - semver: 7.5.1 - tslib: 2.3.0 - typescript: 5.0.2 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@angular/compiler@16.0.0(@angular/core@16.0.0): - resolution: {integrity: sha512-xtg+KRvSeB9DUzMDtvlaRGKv+Y0MERsz+JOoqV9H4606ThNz5h8ih6fEhVKYqG100o7GhdJaVFO+vlr2/edUHA==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/core': 16.0.0 - peerDependenciesMeta: - '@angular/core': - optional: true - dependencies: - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - tslib: 2.3.0 - - /@angular/core@16.0.0(rxjs@7.8.0)(zone.js@0.13.0): - resolution: {integrity: sha512-scppDxtXubum6ZiGu3ogmReBtMuA5XXk5FL3YKLb3c9O7q9Z5PC8KNQ6SsaOwEb6oW+0BWXMV698p/zmd0J4tA==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - rxjs: ^6.5.3 || ^7.4.0 - zone.js: ~0.13.0 - dependencies: - rxjs: 7.8.0 - tslib: 2.3.0 - zone.js: 0.13.0 - - /@angular/forms@16.0.0(@angular/common@16.0.0)(@angular/core@16.0.0)(@angular/platform-browser@16.0.0)(rxjs@7.8.0): - resolution: {integrity: sha512-avpreXyDYWf44RNM5hfi5cTXXiNwcajBURP5rLap8RPMSUi2ePlJsmi0O+3+GduNZFbtnRXIpKTj3W+GeNa0PA==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/common': 16.0.0 - '@angular/core': 16.0.0 - '@angular/platform-browser': 16.0.0 - rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/common': 16.0.0(@angular/core@16.0.0)(rxjs@7.8.0) - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@angular/platform-browser': 16.0.0(@angular/animations@16.0.0)(@angular/common@16.0.0)(@angular/core@16.0.0) - rxjs: 7.8.0 - tslib: 2.3.0 - dev: false - - /@angular/platform-browser-dynamic@16.0.0(@angular/common@16.0.0)(@angular/compiler@16.0.0)(@angular/core@16.0.0)(@angular/platform-browser@16.0.0): - resolution: {integrity: sha512-xUR36r+7hFQjAb0RA0VFfWrCLj2VnWg0xJgPe4FQmwaEWjKMc011tkJXs0PApaiTxvE0W08nadSDTu5jfsBrFw==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/common': 16.0.0 - '@angular/compiler': 16.0.0 - '@angular/core': 16.0.0 - '@angular/platform-browser': 16.0.0 - dependencies: - '@angular/common': 16.0.0(@angular/core@16.0.0)(rxjs@7.8.0) - '@angular/compiler': 16.0.0(@angular/core@16.0.0) - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@angular/platform-browser': 16.0.0(@angular/animations@16.0.0)(@angular/common@16.0.0)(@angular/core@16.0.0) - tslib: 2.3.0 - dev: false - - /@angular/platform-browser@16.0.0(@angular/animations@16.0.0)(@angular/common@16.0.0)(@angular/core@16.0.0): - resolution: {integrity: sha512-6LpgLfEnumKMKM/S9joWrVSm4MdFuIjddFmlSG7zGcRqwM0N8doH/YkuwTK8/t9q8wI/yztp6qM2pg25Pgv1XA==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/animations': 16.0.0 - '@angular/common': 16.0.0 - '@angular/core': 16.0.0 - peerDependenciesMeta: - '@angular/animations': - optional: true - dependencies: - '@angular/animations': 16.0.0(@angular/core@16.0.0) - '@angular/common': 16.0.0(@angular/core@16.0.0)(rxjs@7.8.0) - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - tslib: 2.3.0 - dev: false - - /@angular/router@16.0.0(@angular/common@16.0.0)(@angular/core@16.0.0)(@angular/platform-browser@16.0.0)(rxjs@7.8.0): - resolution: {integrity: sha512-+5gjJwFx3AFGv7OnY53pfUzaPbWe5gOVQWXAnlUuk6tsQmWJBMehuCQ5ZO5cxViQDZkyvNALzoUeU6aKWmNqmg==} - engines: {node: ^16.14.0 || >=18.10.0} - peerDependencies: - '@angular/common': 16.0.0 - '@angular/core': 16.0.0 - '@angular/platform-browser': 16.0.0 - rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/common': 16.0.0(@angular/core@16.0.0)(rxjs@7.8.0) - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@angular/platform-browser': 16.0.0(@angular/animations@16.0.0)(@angular/common@16.0.0)(@angular/core@16.0.0) - rxjs: 7.8.0 - tslib: 2.3.0 - dev: false - - /@assemblyscript/loader@0.10.1: - resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==} - dev: true - - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 - dev: true - - /@babel/compat-data@7.22.5: - resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.19.3: - resolution: {integrity: sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.19.3) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/core@7.21.4: - resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/template': 7.20.7 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/core@7.22.5: - resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator@7.21.4: - resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - dev: true - - /@babel/generator@7.22.5: - resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - dev: true - - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: - resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.19.3): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.19.3 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 - lru-cache: 5.1.1 - semver: 6.3.0 - dev: true - - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.4 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 - lru-cache: 5.1.1 - semver: 6.3.0 - dev: true - - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 - lru-cache: 5.1.1 - semver: 6.3.0 - dev: true - - /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.0 - dev: true - - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-module-transforms@7.22.5: - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-wrap-function': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-replace-supers@7.22.5: - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-wrap-function@7.22.5: - resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers@7.22.5: - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser@7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.21.4): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-classes@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 - dev: true - - /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) - '@babel/helper-function-name': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - dev: true - - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.1 - dev: true - - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-runtime@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.21.4): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/preset-env@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.21.4) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.21.4) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) - '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) - core-js-compat: 3.31.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-modules@0.1.5(@babel/core@7.21.4): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.4) - '@babel/types': 7.22.5 - esutils: 2.0.3 - dev: true - - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: true - - /@babel/runtime@7.21.0: - resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.11 - dev: true - - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - dev: true - - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - dev: true - - /@babel/traverse@7.22.5: - resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - dev: true - - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - dev: true - - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: true - - /@esbuild/android-arm64@0.17.18: - resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.17.18: - resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.17.18: - resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.17.18: - resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.17.18: - resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.17.18: - resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.17.18: - resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.17.18: - resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.17.18: - resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.17.18: - resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.17.18: - resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.17.18: - resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.17.18: - resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.17.18: - resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.17.18: - resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.17.18: - resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.17.18: - resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.17.18: - resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.17.18: - resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.17.18: - resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.17.18: - resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.17.18: - resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - 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 - dev: true - - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - 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 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/source-map@0.3.3: - resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@leichtgewicht/ip-codec@2.0.4: - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} - dev: true - - /@ngtools/webpack@16.0.0(@angular/compiler-cli@16.0.0)(typescript@5.0.2)(webpack@5.80.0): - resolution: {integrity: sha512-I5zjGtJu2wwIdM+OFUHXezmwTJ0wpParVJgCxR0cLd0CIbpRYSjOSZQN/nR9ZnTKAI5uFZ3MM2p/VRQGUUHUcw==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - '@angular/compiler-cli': ^16.0.0 - typescript: '>=4.9.3 <5.1' - webpack: ^5.54.0 - dependencies: - '@angular/compiler-cli': 16.0.0(@angular/compiler@16.0.0)(typescript@5.0.2) - typescript: 5.0.2 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /@ngx-grpc/common@3.1.1(google-protobuf@3.21.2)(rxjs@7.8.0): - resolution: {integrity: sha512-RoTnu1etLPJT1cSJyCXgKCpKKhCR/nrNEdRyZreyLO4RgC8kThlD+akkytoCsDuj5s8NkJI/xDP61E7TLx/y2A==} - peerDependencies: - google-protobuf: ^3.10.0 - rxjs: '>=6.0.0' - dependencies: - google-protobuf: 3.21.2 - rxjs: 7.8.0 - tslib: 2.5.0 - dev: false - - /@ngx-grpc/core@3.1.1(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(rxjs@7.8.0): - resolution: {integrity: sha512-GFhO/kpA7kJ3bu6mYwgjspPWjMJPUHxTrLZqxjsXtwNexPNSIQkVO4SOrROp+bZ91LVt+goiSeRz8CUzwiXWdQ==} - peerDependencies: - '@angular/core': '>=12.0.0' - '@ngx-grpc/common': 3.1.1 - rxjs: '>=6.0.0' - dependencies: - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@ngx-grpc/common': 3.1.1(google-protobuf@3.21.2)(rxjs@7.8.0) - rxjs: 7.8.0 - tslib: 2.5.0 - dev: false - - /@ngx-grpc/grpc-web-client@3.1.1(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(@ngx-grpc/core@3.1.1)(grpc-web@1.4.2)(rxjs@7.8.0): - resolution: {integrity: sha512-ZRhrcODXKelmCH9NqleHf7RGTr00AkU7b5ZmkV3/BWMJIfu420qwr0nO/w2ff7puWwdLw+SZTyOw5UAxy2aKKg==} - peerDependencies: - '@angular/core': '>=12.0.0' - '@ngx-grpc/common': 3.1.1 - '@ngx-grpc/core': 3.1.1 - grpc-web: ^1.2.1 - rxjs: '>=6.0.0' - dependencies: - '@angular/core': 16.0.0(rxjs@7.8.0)(zone.js@0.13.0) - '@ngx-grpc/common': 3.1.1(google-protobuf@3.21.2)(rxjs@7.8.0) - '@ngx-grpc/core': 3.1.1(@angular/core@16.0.0)(@ngx-grpc/common@3.1.1)(rxjs@7.8.0) - grpc-web: 1.4.2 - rxjs: 7.8.0 - tslib: 2.5.0 - dev: false - - /@ngx-grpc/well-known-types@3.1.1(@ngx-grpc/common@3.1.1)(google-protobuf@3.21.2): - resolution: {integrity: sha512-iPcUqsgm0s+g8i8sDazPnJya0lPJ8981PdnjzTyqKlc8y97B75K20bRS9/mc2EjKP+FXHUfDejzA+SehjeRzew==} - peerDependencies: - '@ngx-grpc/common': 3.1.1 - google-protobuf: ^3.10.0 - dependencies: - '@ngx-grpc/common': 3.1.1(google-protobuf@3.21.2)(rxjs@7.8.0) - google-protobuf: 3.21.2 - tslib: 2.5.0 - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@npmcli/fs@3.1.0: - resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - semver: 7.4.0 - dev: true - - /@npmcli/git@4.1.0: - resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/promise-spawn': 6.0.2 - lru-cache: 7.18.3 - npm-pick-manifest: 8.0.1 - proc-log: 3.0.0 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.4.0 - which: 3.0.1 - transitivePeerDependencies: - - bluebird - dev: true - - /@npmcli/installed-package-contents@2.0.2: - resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - npm-bundled: 3.0.0 - npm-normalize-package-bin: 3.0.1 - dev: true - - /@npmcli/node-gyp@3.0.0: - resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /@npmcli/promise-spawn@6.0.2: - resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - which: 3.0.1 - dev: true - - /@npmcli/run-script@6.0.2: - resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/node-gyp': 3.0.0 - '@npmcli/promise-spawn': 6.0.2 - node-gyp: 9.4.0 - read-package-json-fast: 3.0.2 - which: 3.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - - /@schematics/angular@16.0.0: - resolution: {integrity: sha512-Ao1Y0hEDa30JjWDLnUfOsD+9nnfdBFclfKFzR+7pvvFYCpSUhH1u+8e+7noruIxlP26+SpqPn3AF5+IRTGza8w==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 16.0.0(chokidar@3.5.3) - '@angular-devkit/schematics': 16.0.0 - jsonc-parser: 3.2.0 - transitivePeerDependencies: - - chokidar - dev: true - - /@sigstore/protobuf-specs@0.1.0: - resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /@sigstore/tuf@1.0.0: - resolution: {integrity: sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@sigstore/protobuf-specs': 0.1.0 - make-fetch-happen: 11.1.1 - tuf-js: 1.1.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - dev: true - - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true - - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true - - /@tufjs/canonical-json@1.0.0: - resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /@tufjs/models@1.0.4: - resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.1 - dev: true - - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 20.3.1 - dev: true - - /@types/bonjour@3.5.10: - resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} - dependencies: - '@types/node': 20.3.1 - dev: true - - /@types/connect-history-api-fallback@1.5.0: - resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} - dependencies: - '@types/express-serve-static-core': 4.17.35 - '@types/node': 20.3.1 - dev: true - - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - dependencies: - '@types/node': 20.3.1 - dev: true - - /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - dev: true - - /@types/cors@2.8.13: - resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} - dependencies: - '@types/node': 20.3.1 - dev: true - - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} - dependencies: - '@types/eslint': 8.40.2 - '@types/estree': 1.0.1 - dev: true - - /@types/eslint@8.40.2: - resolution: {integrity: sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==} - dependencies: - '@types/estree': 1.0.1 - '@types/json-schema': 7.0.12 - dev: true - - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true - - /@types/express-serve-static-core@4.17.35: - resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} - dependencies: - '@types/node': 20.3.1 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - '@types/send': 0.17.1 - dev: true - - /@types/express@4.17.17: - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.35 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 - dev: true - - /@types/google-protobuf@3.15.6: - resolution: {integrity: sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==} - dev: true - - /@types/http-proxy@1.17.11: - resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} - dependencies: - '@types/node': 20.3.1 - dev: true - - /@types/jasmine@4.3.0: - resolution: {integrity: sha512-u1jWakf8CWvLfSEZyxmzkgBzOEvXH/szpT0e6G8BTkx5Eu0BhDn7sbc5dz0JBN/6Wwm9rBe+JAsk9tJRyH9ZkA==} - dev: true - - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true - - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: true - - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - dev: true - - /@types/node@20.3.1: - resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} - dev: true - - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true - - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true - - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: true - - /@types/send@0.17.1: - resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 20.3.1 - dev: true - - /@types/serve-index@1.9.1: - resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} - dependencies: - '@types/express': 4.17.17 - dev: true - - /@types/serve-static@1.15.1: - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} - dependencies: - '@types/mime': 3.0.1 - '@types/node': 20.3.1 - dev: true - - /@types/sockjs@0.3.33: - resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} - dependencies: - '@types/node': 20.3.1 - dev: true - - /@types/ws@8.5.5: - resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} - dependencies: - '@types/node': 20.3.1 - dev: true - - /@vitejs/plugin-basic-ssl@1.0.1(vite@4.3.1): - resolution: {integrity: sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==} - engines: {node: '>=14.6.0'} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 - dependencies: - vite: 4.3.1(@types/node@20.3.1)(less@4.1.3)(sass@1.62.1)(terser@5.17.1) - dev: true - - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true - - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: true - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - dev: true - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true - - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - dev: true - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: true - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - dev: true - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true - - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - dev: true - - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: true - - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - dev: true - - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: true - - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@xtuc/long': 4.2.2 - dev: true - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true - - /@yarnpkg/lockfile@1.1.0: - resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - dev: true - - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true - - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: true - - /acorn-import-assertions@1.9.0(acorn@8.8.2): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.8.2 - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.2.11 - dev: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /agentkeepalive@4.3.0: - resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} - engines: {node: '>= 8.0.0'} - dependencies: - debug: 4.3.4 - depd: 2.0.0 - humanize-ms: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: true - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: true - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: true - - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - 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 - dev: true - - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true - - /are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true - - /array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: true - - /autoprefixer@10.4.14(postcss@8.4.23): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001503 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.23 - postcss-value-parser: 4.2.0 - dev: true - - /babel-loader@9.1.2(@babel/core@7.21.4)(webpack@5.80.0): - resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' - dependencies: - '@babel/core': 7.21.4 - find-cache-dir: 3.3.2 - schema-utils: 4.2.0 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) - core-js-compat: 3.31.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true - - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true - - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} - dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: true - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001503 - electron-to-chromium: 1.4.431 - node-releases: 2.0.12 - update-browserslist-db: 1.0.11(browserslist@4.21.5) - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - dependencies: - semver: 7.4.0 - dev: true - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - - /cacache@17.0.6: - resolution: {integrity: sha512-ixcYmEBExFa/+ajIPjcwypxL97CjJyOsH9A/W+4qgEPIpJvKlC+HmVY8nkIck6n3PwUTdgq9c489niJGwl+5Cw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/fs': 3.1.0 - fs-minipass: 3.0.2 - glob: 10.2.7 - lru-cache: 7.18.3 - minipass: 5.0.0 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - ssri: 10.0.4 - tar: 6.1.15 - unique-filename: 3.0.0 - transitivePeerDependencies: - - bluebird - dev: true - - /cacache@17.1.3: - resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/fs': 3.1.0 - fs-minipass: 3.0.2 - glob: 10.2.7 - lru-cache: 7.18.3 - minipass: 5.0.0 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - ssri: 10.0.4 - tar: 6.1.15 - unique-filename: 3.0.0 - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - - /caniuse-lite@1.0.30001503: - resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - 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.2 - dev: true - - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true - - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true - - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-spinners@2.9.0: - resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} - engines: {node: '>=6'} - dev: true - - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - dev: true - - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: true - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true - - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true - - /connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: 1.3.3 - utils-merge: 1.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true - - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: true - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true - - /copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - dependencies: - is-what: 3.14.1 - dev: true - - /copy-webpack-plugin@11.0.0(webpack@5.80.0): - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.2.12 - glob-parent: 6.0.2 - globby: 13.1.4 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - serialize-javascript: 6.0.1 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /core-js-compat@3.31.0: - resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} - dependencies: - browserslist: 4.21.5 - dev: true - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - dev: true - - /cosmiconfig-typescript-loader@4.3.0(@types/node@20.3.1)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.0.2): - resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=7' - ts-node: '>=10' - typescript: '>=3' - dependencies: - '@types/node': 20.3.1 - cosmiconfig: 8.2.0 - ts-node: 10.9.1(@types/node@20.3.1)(typescript@5.0.2) - typescript: 5.0.2 - dev: true - - /cosmiconfig@8.2.0: - resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} - engines: {node: '>=14'} - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - dev: true - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /critters@0.0.16: - resolution: {integrity: sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==} - dependencies: - chalk: 4.1.2 - css-select: 4.3.0 - parse5: 6.0.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - postcss: 8.4.23 - pretty-bytes: 5.6.0 - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /css-loader@6.7.3(webpack@5.80.0): - resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.23) - postcss: 8.4.23 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.23) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.23) - postcss-modules-scope: 3.0.0(postcss@8.4.23) - postcss-modules-values: 4.0.0(postcss@8.4.23) - postcss-value-parser: 4.2.0 - semver: 7.4.0 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: true - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /custom-event@1.0.1: - resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} - dev: true - - /date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} - engines: {node: '>=4.0'} - dev: true - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - optional: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: true - - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: true - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true - - /di@0.0.1: - resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: true - - /dns-packet@5.6.0: - resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.4 - dev: true - - /dom-serialize@2.2.1: - resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} - dependencies: - custom-event: 1.0.1 - ent: 2.2.0 - extend: 3.0.2 - void-elements: 2.0.1 - dev: true - - /dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: true - - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true - - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: true - - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: true - - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true - - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true - - /electron-to-chromium@1.4.431: - resolution: {integrity: sha512-m232JTVmCawA2vG+1azVxhKZ9Sv1Q//xxNv5PkP5rWxGgQE8c3CiZFrh8Xnp+d1NmNxlu3QQrGIfdeW5TtXX5w==} - dev: true - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true - - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true - - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true - dependencies: - iconv-lite: 0.6.3 - dev: true - optional: true - - /engine.io-parser@5.0.7: - resolution: {integrity: sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==} - engines: {node: '>=10.0.0'} - dev: true - - /engine.io@6.4.2: - resolution: {integrity: sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==} - engines: {node: '>=10.0.0'} - dependencies: - '@types/cookie': 0.4.1 - '@types/cors': 2.8.13 - '@types/node': 20.3.1 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.4.2 - cors: 2.8.5 - debug: 4.3.4 - engine.io-parser: 5.0.7 - ws: 8.11.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - - /ent@2.2.0: - resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} - dev: true - - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true - - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true - - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true - - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true - - /errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - requiresBuild: true - dependencies: - prr: 1.0.1 - dev: true - optional: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-module-lexer@1.3.0: - resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} - dev: true - - /esbuild-wasm@0.17.18: - resolution: {integrity: sha512-h4m5zVa+KaDuRFIbH9dokMwovvkIjTQJS7/Ry+0Z1paVuS9aIkso2vdA2GmwH9GSvGX6w71WveJ3PfkoLuWaRw==} - engines: {node: '>=12'} - hasBin: true - dev: true - - /esbuild@0.17.18: - resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.18 - '@esbuild/android-arm64': 0.17.18 - '@esbuild/android-x64': 0.17.18 - '@esbuild/darwin-arm64': 0.17.18 - '@esbuild/darwin-x64': 0.17.18 - '@esbuild/freebsd-arm64': 0.17.18 - '@esbuild/freebsd-x64': 0.17.18 - '@esbuild/linux-arm': 0.17.18 - '@esbuild/linux-arm64': 0.17.18 - '@esbuild/linux-ia32': 0.17.18 - '@esbuild/linux-loong64': 0.17.18 - '@esbuild/linux-mips64el': 0.17.18 - '@esbuild/linux-ppc64': 0.17.18 - '@esbuild/linux-riscv64': 0.17.18 - '@esbuild/linux-s390x': 0.17.18 - '@esbuild/linux-x64': 0.17.18 - '@esbuild/netbsd-x64': 0.17.18 - '@esbuild/openbsd-x64': 0.17.18 - '@esbuild/sunos-x64': 0.17.18 - '@esbuild/win32-arm64': 0.17.18 - '@esbuild/win32-ia32': 0.17.18 - '@esbuild/win32-x64': 0.17.18 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true - - /eventemitter-asyncresource@1.0.0: - resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==} - dev: true - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - 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 - dev: true - - /exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - dev: true - - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - 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.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: true - - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - 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 - dev: true - - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true - - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.0.2 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true - - /fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true - - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /fs-minipass@3.0.2: - resolution: {integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 5.0.0 - dev: true - - /fs-monkey@1.0.4: - resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - dev: true - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true - - /glob@10.2.7: - resolution: {integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.2.1 - minimatch: 9.0.1 - minipass: 5.0.0 - path-scurry: 1.9.2 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - 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 - dev: true - - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globby@13.1.4: - resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /google-protobuf@3.21.2: - resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} - dev: false - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /grpc-web@1.4.2: - resolution: {integrity: sha512-gUxWq42l5ldaRplcKb4Pw5O4XBONWZgz3vxIIXnfIeJj8Jc3wYiq2O4c9xzx/NGbbPEej4rhI62C9eTENwLGNw==} - dev: false - - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hdr-histogram-js@2.0.3: - resolution: {integrity: sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==} - dependencies: - '@assemblyscript/loader': 0.10.1 - base64-js: 1.5.1 - pako: 1.0.11 - dev: true - - /hdr-histogram-percentiles-obj@3.0.0: - resolution: {integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==} - dev: true - - /hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - lru-cache: 7.18.3 - dev: true - - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: true - - /html-entities@2.3.6: - resolution: {integrity: sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==} - dev: true - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true - - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: true - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: true - - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true - - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-middleware@2.0.6(@types/express@4.17.17): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.17 - '@types/http-proxy': 1.17.11 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - transitivePeerDependencies: - - debug - dev: true - - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.2 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: true - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - dev: true - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /icss-utils@5.1.0(postcss@8.4.23): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.23 - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /ignore-walk@6.0.3: - resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minimatch: 9.0.1 - dev: true - - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true - - /image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} - engines: {node: '>=0.10.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true - - /immutable@4.3.0: - resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /ini@4.0.0: - resolution: {integrity: sha512-t0ikzf5qkSFqRl1e6ejKBe+Tk2bsQd8ivEkcisyGXsku2t8NvXZ1Y3RRz5vxrDgOrTBOi13CvGsVoI5wVpd7xg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /inquirer@8.2.4: - resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} - engines: {node: '>=12.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true - - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - dev: true - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true - - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} - engines: {node: '>= 10'} - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} - dependencies: - has: 1.0.3 - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true - - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true - - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true - - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.22.5 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true - - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true - - /jasmine-core@4.6.0: - resolution: {integrity: sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==} - dev: true - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.3.1 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true - - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true - - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /karma-chrome-launcher@3.2.0: - resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} - dependencies: - which: 1.3.1 - dev: true - - /karma-coverage@2.2.0: - resolution: {integrity: sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==} - engines: {node: '>=10.0.0'} - dependencies: - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /karma-jasmine-html-reporter@2.0.0(jasmine-core@4.6.0)(karma-jasmine@5.1.0)(karma@6.4.0): - resolution: {integrity: sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==} - peerDependencies: - jasmine-core: ^4.0.0 - karma: ^6.0.0 - karma-jasmine: ^5.0.0 - dependencies: - jasmine-core: 4.6.0 - karma: 6.4.0 - karma-jasmine: 5.1.0(karma@6.4.0) - dev: true - - /karma-jasmine@5.1.0(karma@6.4.0): - resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} - engines: {node: '>=12'} - peerDependencies: - karma: ^6.0.0 - dependencies: - jasmine-core: 4.6.0 - karma: 6.4.0 - dev: true - - /karma-source-map-support@1.4.0: - resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} - dependencies: - source-map-support: 0.5.21 - dev: true - - /karma@6.4.0: - resolution: {integrity: sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==} - engines: {node: '>= 10'} - hasBin: true - dependencies: - '@colors/colors': 1.5.0 - body-parser: 1.20.2 - braces: 3.0.2 - chokidar: 3.5.3 - connect: 3.7.0 - di: 0.0.1 - dom-serialize: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - http-proxy: 1.18.1 - isbinaryfile: 4.0.10 - lodash: 4.17.21 - log4js: 6.9.1 - mime: 2.6.0 - minimatch: 3.1.2 - mkdirp: 0.5.6 - qjobs: 1.2.0 - range-parser: 1.2.1 - rimraf: 3.0.2 - socket.io: 4.6.2 - source-map: 0.6.1 - tmp: 0.2.1 - ua-parser-js: 0.7.35 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: true - - /launch-editor@2.6.0: - resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} - dependencies: - picocolors: 1.0.0 - shell-quote: 1.8.1 - dev: true - - /less-loader@11.1.0(less@4.1.3)(webpack@5.80.0): - resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} - engines: {node: '>= 14.15.0'} - peerDependencies: - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 - dependencies: - klona: 2.0.6 - less: 4.1.3 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /less@4.1.3: - resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} - engines: {node: '>=6'} - hasBin: true - dependencies: - copy-anything: 2.0.6 - parse-node-version: 1.0.1 - tslib: 2.5.0 - 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.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /license-webpack-plugin@4.0.2(webpack@5.80.0): - resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} - peerDependencies: - webpack: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-sources: - optional: true - dependencies: - webpack: 5.80.0(esbuild@0.17.18) - webpack-sources: 3.2.3 - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true - - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: true - - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - dev: true - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true - - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /log4js@6.9.1: - resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} - engines: {node: '>=8.0'} - dependencies: - date-format: 4.0.14 - debug: 4.3.4 - flatted: 3.2.7 - rfdc: 1.3.0 - streamroller: 3.1.5 - transitivePeerDependencies: - - supports-color - dev: true - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true - - /lru-cache@9.1.2: - resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} - engines: {node: 14 || >=16.14} - dev: true - - /magic-string@0.30.0: - resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - pify: 4.0.1 - semver: 5.7.1 - dev: true - optional: true - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /make-fetch-happen@11.1.1: - resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - agentkeepalive: 4.3.0 - cacache: 17.1.3 - http-cache-semantics: 4.1.1 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 5.0.0 - minipass-fetch: 3.0.3 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 10.0.4 - transitivePeerDependencies: - - supports-color - dev: true - - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true - - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} - dependencies: - fs-monkey: 1.0.4 - dev: true - - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mini-css-extract-plugin@2.7.5(webpack@5.80.0): - resolution: {integrity: sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.2.0 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch@9.0.1: - resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass-fetch@3.0.3: - resolution: {integrity: sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 5.0.0 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: true - - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass-json-stream@1.0.1: - resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} - dependencies: - jsonparse: 1.3.1 - minipass: 3.3.6 - dev: true - - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true - - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true - - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true - - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - dev: true - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - dependencies: - dns-packet: 5.6.0 - thunky: 1.1.0 - dev: true - - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true - - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /needle@3.2.0: - resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} - engines: {node: '>= 4.4.x'} - hasBin: true - requiresBuild: true - dependencies: - debug: 3.2.7 - iconv-lite: 0.6.3 - sax: 1.2.4 - transitivePeerDependencies: - - supports-color - dev: true - optional: true - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true - - /nice-napi@1.0.2: - resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} - os: ['!win32'] - requiresBuild: true - dependencies: - node-addon-api: 3.2.1 - node-gyp-build: 4.6.0 - dev: true - optional: true - - /node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - requiresBuild: true - dev: true - optional: true - - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true - - /node-gyp-build@4.6.0: - resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} - hasBin: true - requiresBuild: true - dev: true - optional: true - - /node-gyp@9.4.0: - resolution: {integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==} - engines: {node: ^12.13 || ^14.13 || >=16} - hasBin: true - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - make-fetch-happen: 11.1.1 - nopt: 6.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.4.0 - tar: 6.1.15 - which: 2.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} - dev: true - - /nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true - - /normalize-package-data@5.0.0: - resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - hosted-git-info: 6.1.1 - is-core-module: 2.12.1 - semver: 7.4.0 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /npm-bundled@3.0.0: - resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - npm-normalize-package-bin: 3.0.1 - dev: true - - /npm-install-checks@6.1.1: - resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - semver: 7.4.0 - dev: true - - /npm-normalize-package-bin@3.0.1: - resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /npm-package-arg@10.1.0: - resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - hosted-git-info: 6.1.1 - proc-log: 3.0.0 - semver: 7.4.0 - validate-npm-package-name: 5.0.0 - dev: true - - /npm-packlist@7.0.4: - resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - ignore-walk: 6.0.3 - dev: true - - /npm-pick-manifest@8.0.1: - resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - npm-install-checks: 6.1.1 - npm-normalize-package-bin: 3.0.1 - npm-package-arg: 10.1.0 - semver: 7.4.0 - dev: true - - /npm-registry-fetch@14.0.5: - resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - make-fetch-happen: 11.1.1 - minipass: 5.0.0 - minipass-fetch: 3.0.3 - minipass-json-stream: 1.0.1 - minizlib: 2.1.2 - npm-package-arg: 10.1.0 - proc-log: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - dev: true - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true - - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true - - /on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: true - - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: true - - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.0 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - - /pacote@15.1.3: - resolution: {integrity: sha512-aRts8cZqxiJVDitmAh+3z+FxuO3tLNWEmwDRPEpDDiZJaRz06clP4XX112ynMT5uF0QNoMPajBBHnaStUEPJXA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - '@npmcli/git': 4.1.0 - '@npmcli/installed-package-contents': 2.0.2 - '@npmcli/promise-spawn': 6.0.2 - '@npmcli/run-script': 6.0.2 - cacache: 17.1.3 - fs-minipass: 3.0.2 - minipass: 5.0.0 - npm-package-arg: 10.1.0 - npm-packlist: 7.0.4 - npm-pick-manifest: 8.0.1 - npm-registry-fetch: 14.0.5 - proc-log: 3.0.0 - promise-retry: 2.0.1 - read-package-json: 6.0.4 - read-package-json-fast: 3.0.2 - sigstore: 1.6.0 - ssri: 10.0.4 - tar: 6.1.15 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.22.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - - /parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} - engines: {node: '>= 0.10'} - dev: true - - /parse5-html-rewriting-stream@7.0.0: - resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} - dependencies: - entities: 4.5.0 - parse5: 7.1.2 - parse5-sax-parser: 7.0.0 - dev: true - - /parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} - dependencies: - parse5: 6.0.1 - dev: true - - /parse5-sax-parser@7.0.0: - resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} - dependencies: - parse5: 7.1.2 - dev: true - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - dependencies: - entities: 4.5.0 - dev: true - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-scurry@1.9.2: - resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 9.1.2 - minipass: 5.0.0 - dev: true - - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true - optional: true - - /piscina@3.2.0: - resolution: {integrity: sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==} - dependencies: - eventemitter-asyncresource: 1.0.0 - hdr-histogram-js: 2.0.3 - hdr-histogram-percentiles-obj: 3.0.0 - optionalDependencies: - nice-napi: 1.0.2 - dev: true - - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true - - /postcss-loader@7.2.4(@types/node@20.3.1)(postcss@8.4.23)(ts-node@10.9.1)(typescript@5.0.2)(webpack@5.80.0): - resolution: {integrity: sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w==} - engines: {node: '>= 14.15.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - ts-node: '>=10' - typescript: '>=4' - webpack: ^5.0.0 - peerDependenciesMeta: - ts-node: - optional: true - typescript: - optional: true - dependencies: - cosmiconfig: 8.2.0 - cosmiconfig-typescript-loader: 4.3.0(@types/node@20.3.1)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.0.2) - klona: 2.0.6 - postcss: 8.4.23 - semver: 7.4.0 - ts-node: 10.9.1(@types/node@20.3.1)(typescript@5.0.2) - typescript: 5.0.2 - webpack: 5.80.0(esbuild@0.17.18) - transitivePeerDependencies: - - '@types/node' - dev: true - - /postcss-modules-extract-imports@3.0.0(postcss@8.4.23): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.23 - dev: true - - /postcss-modules-local-by-default@4.0.3(postcss@8.4.23): - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.23) - postcss: 8.4.23 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-modules-scope@3.0.0(postcss@8.4.23): - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.23 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-modules-values@4.0.0(postcss@8.4.23): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.23) - postcss: 8.4.23 - dev: true - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - - /postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - - /proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true - - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - dev: true - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: true - - /prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - dev: true - optional: true - - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true - - /qjobs@1.2.0: - resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} - engines: {node: '>=0.9'} - dev: true - - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true - - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /read-package-json-fast@3.0.2: - resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - json-parse-even-better-errors: 3.0.0 - npm-normalize-package-bin: 3.0.1 - dev: true - - /read-package-json@6.0.4: - resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - glob: 10.2.7 - json-parse-even-better-errors: 3.0.0 - normalize-package-data: 5.0.0 - npm-normalize-package-bin: 3.0.1 - dev: true - - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - 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 - dev: true - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /reflect-metadata@0.1.13: - resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} - dev: true - - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: true - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true - - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true - - /regenerator-transform@0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} - dependencies: - '@babel/runtime': 7.21.0 - dev: true - - /regex-parser@2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: true - - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: true - - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve-url-loader@5.0.0: - resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} - engines: {node: '>=12'} - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 8.4.23 - source-map: 0.6.1 - dev: true - - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - dependencies: - is-core-module: 2.12.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.25.1: - resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /rxjs@7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} - dependencies: - tslib: 2.3.0 - - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.5.0 - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sass-loader@13.2.2(sass@1.62.1)(webpack@5.80.0): - resolution: {integrity: sha512-nrIdVAAte3B9icfBiGWvmMhT/D+eCDwnk+yA7VE/76dp/WkHX+i44Q/pfo71NYbwj0Ap+PGsn0ekOuU1WFJ2AA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - sass: 1.62.1 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /sass@1.62.1: - resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - chokidar: 3.5.3 - immutable: 4.3.0 - source-map-js: 1.0.2 - dev: true - - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: true - optional: true - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.12 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.12 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: true - - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true - - /selfsigned@2.1.1: - resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} - engines: {node: '>=10'} - dependencies: - node-forge: 1.3.1 - dev: true - - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - optional: true - - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true - - /semver@7.4.0: - resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /semver@7.5.1: - resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - dependencies: - randombytes: 2.1.0 - dev: true - - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: true - - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - dependencies: - kind-of: 6.0.3 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} - dev: true - - /sigstore@1.6.0: - resolution: {integrity: sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - '@sigstore/protobuf-specs': 0.1.0 - '@sigstore/tuf': 1.0.0 - make-fetch-happen: 11.1.1 - tuf-js: 1.1.7 - transitivePeerDependencies: - - supports-color - dev: true - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - - /socket.io-adapter@2.5.2: - resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} - dependencies: - ws: 8.11.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} - dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /socket.io@4.6.2: - resolution: {integrity: sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==} - engines: {node: '>=10.0.0'} - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - debug: 4.3.4 - engine.io: 6.4.2 - socket.io-adapter: 2.5.2 - socket.io-parser: 4.2.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: true - - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - dev: true - - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - dependencies: - ip: 2.0.0 - smart-buffer: 4.2.0 - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map-loader@4.0.1(webpack@5.80.0): - resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.72.1 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.0.2 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.13 - dev: true - - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true - - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 - dev: true - - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - dev: true - - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.4 - 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 - dev: true - - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true - - /ssri@10.0.4: - resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 5.0.0 - dev: true - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true - - /streamroller@3.1.5: - resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} - engines: {node: '>=8.0'} - dependencies: - date-format: 4.0.14 - debug: 4.3.4 - fs-extra: 8.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} - dev: true - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true - - /tar@6.1.15: - resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true - - /terser-webpack-plugin@5.3.9(esbuild@0.17.18)(webpack@5.80.0): - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - 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 - dependencies: - '@jridgewell/trace-mapping': 0.3.18 - esbuild: 0.17.18 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.17.1 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /terser@5.17.1: - resolution: {integrity: sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true - - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true - - /tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} - dependencies: - rimraf: 3.0.2 - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true - - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true - - /ts-node@10.9.1(@types/node@20.3.1)(typescript@5.0.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - 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 - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.3.1 - acorn: 8.8.2 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.0.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - - /tslib@2.3.0: - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} - - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - - /tuf-js@1.1.7: - resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@tufjs/models': 1.0.4 - debug: 4.3.4 - make-fetch-happen: 11.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: true - - /typed-assert@1.0.9: - resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} - dev: true - - /typescript@5.0.2: - resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} - engines: {node: '>=12.20'} - hasBin: true - dev: true - - /ua-parser-js@0.7.35: - resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==} - dev: true - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: true - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: true - - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true - - /unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - unique-slug: 4.0.0 - dev: true - - /unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - imurmurhash: 0.1.4 - dev: true - - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true - - /update-browserslist-db@1.0.11(browserslist@4.21.5): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.5 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.0 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true - - /validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - builtins: 5.0.1 - dev: true - - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true - - /vite@4.3.1(@types/node@20.3.1)(less@4.1.3)(sass@1.62.1)(terser@5.17.1): - resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.3.1 - esbuild: 0.17.18 - less: 4.1.3 - postcss: 8.4.23 - rollup: 3.25.1 - sass: 1.62.1 - terser: 5.17.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /void-elements@2.0.1: - resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} - engines: {node: '>=0.10.0'} - dev: true - - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: true - - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: true - - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.4 - dev: true - - /webpack-dev-middleware@5.3.3(webpack@5.80.0): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /webpack-dev-middleware@6.0.2(webpack@5.80.0): - resolution: {integrity: sha512-iOddiJzPcQC6lwOIu60vscbGWth8PCRcWRCwoQcTQf9RMoOWBHg5EyzpGdtSmGMrSPd5vHEfFXmVErQEmkRngQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /webpack-dev-server@4.13.2(webpack@5.80.0): - resolution: {integrity: sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.5.0 - '@types/express': 4.17.17 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.5 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.11 - html-entities: 2.3.6 - http-proxy-middleware: 2.0.6(@types/express@4.17.17) - ipaddr.js: 2.1.0 - launch-editor: 2.6.0 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.1.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.80.0(esbuild@0.17.18) - webpack-dev-middleware: 5.3.3(webpack@5.80.0) - ws: 8.13.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: true - - /webpack-merge@5.8.0: - resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} - engines: {node: '>=10.0.0'} - dependencies: - clone-deep: 4.0.1 - wildcard: 2.0.1 - dev: true - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true - - /webpack-subresource-integrity@5.1.0(webpack@5.80.0): - resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} - engines: {node: '>= 12'} - peerDependencies: - html-webpack-plugin: '>= 5.0.0-beta.1 < 6' - webpack: ^5.12.0 - peerDependenciesMeta: - html-webpack-plugin: - optional: true - dependencies: - typed-assert: 1.0.9 - webpack: 5.80.0(esbuild@0.17.18) - dev: true - - /webpack@5.80.0(esbuild@0.17.18): - resolution: {integrity: sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.1 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.8.2 - acorn-import-assertions: 1.9.0(acorn@8.8.2) - browserslist: 4.21.5 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.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: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(esbuild@0.17.18)(webpack@5.80.0) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: true - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - dependencies: - string-width: 4.2.3 - dev: true - - /wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - 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 - dev: true - - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - 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 - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true - - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - - /zone.js@0.13.0: - resolution: {integrity: sha512-7m3hNNyswsdoDobCkYNAy5WiUulkMd3+fWaGT9ij6iq3Zr/IwJo4RMCYPSDjT+r7tnPErmY9sZpKhWQ8S5k6XQ==} - dependencies: - tslib: 2.3.0 diff --git a/examples/angular/src/app/app.component.ts b/examples/angular/src/app/app.component.ts deleted file mode 100644 index 41b73473f..000000000 --- a/examples/angular/src/app/app.component.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { AfterViewInit } from '@angular/core' -import { Component, inject } from '@angular/core' -import type { PartitionRaw } from '@aneoconsultingfr/armonik.api.angular' -import { Subject, merge, startWith, switchMap } from 'rxjs' -import { NgFor, NgIf } from '@angular/common' -import { PartitionsGrpcService } from './services/partitions-grpc.service' - -@Component({ - selector: 'app-root', - template: ` - -
- Loading... -
- - `, - styles: [` - `], - standalone: true, - providers: [ - PartitionsGrpcService, - ], - imports: [ - NgIf, - NgFor, - ], -}) -export class AppComponent implements AfterViewInit { - #partitionsGrpcService = inject(PartitionsGrpcService) - - #refresh$ = new Subject() - - loading = true - partitions: PartitionRaw.AsObject[] = [] - - ngAfterViewInit(): void { - merge( - this.#refresh$, - ) - .pipe( - startWith({}), - switchMap(() => { - this.loading = true - return this.#partitionsGrpcService.list$() - }), - ).subscribe( - (response) => { - this.loading = false - - if (response.partitions) - this.partitions = response.partitions - }, - ) - } - - refresh(): void { - this.#refresh$.next() - } - - trackByPartition(_index_: number, partition: PartitionRaw.AsObject): string { - return partition.id - } -} diff --git a/examples/angular/src/app/app.config.ts b/examples/angular/src/app/app.config.ts deleted file mode 100644 index debccae3e..000000000 --- a/examples/angular/src/app/app.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { ApplicationConfig } from '@angular/core' -import { importProvidersFrom } from '@angular/core' -import { GrpcCoreModule } from '@ngx-grpc/core' -import { GrpcWebClientModule } from '@ngx-grpc/grpc-web-client' - -export const appConfig: ApplicationConfig = { - providers: [ - importProvidersFrom(GrpcCoreModule.forRoot()), - importProvidersFrom(GrpcWebClientModule.forRoot({ settings: { host: '' } })), - ], -} diff --git a/examples/angular/src/app/services/partitions-grpc.service.ts b/examples/angular/src/app/services/partitions-grpc.service.ts deleted file mode 100644 index 8b990e040..000000000 --- a/examples/angular/src/app/services/partitions-grpc.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Injectable, inject } from '@angular/core' -import type { ListPartitionsResponse } from '@aneoconsultingfr/armonik.api.angular' -import { ListPartitionsRequest, PartitionsClient } from '@aneoconsultingfr/armonik.api.angular' -import type { Observable } from 'rxjs' - -@Injectable() -export class PartitionsGrpcService { - readonly #client = inject(PartitionsClient) - - list$(): Observable { - const options = new ListPartitionsRequest({ - page: 0, - pageSize: 10, - sort: { - direction: ListPartitionsRequest.OrderDirection.ORDER_DIRECTION_ASC, - field: ListPartitionsRequest.OrderByField.ORDER_BY_FIELD_ID, - }, - filter: { - id: '', - parentPartitionId: '', - podMax: 0, - podReserved: 0, - preemptionPercentage: 0, - priority: 0, - }, - }) - - return this.#client.listPartitions(options) - } -} diff --git a/examples/angular/src/assets/.gitkeep b/examples/angular/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/angular/src/favicon.ico b/examples/angular/src/favicon.ico deleted file mode 100644 index 1cceb8320..000000000 Binary files a/examples/angular/src/favicon.ico and /dev/null differ diff --git a/examples/angular/src/index.html b/examples/angular/src/index.html deleted file mode 100644 index e0fe0acec..000000000 --- a/examples/angular/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - ArmoniKApiAngular - - - - - - - - diff --git a/examples/angular/src/main.ts b/examples/angular/src/main.ts deleted file mode 100644 index a74c853de..000000000 --- a/examples/angular/src/main.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser' -import { appConfig } from './app/app.config' -import { AppComponent } from './app/app.component' - -bootstrapApplication(AppComponent, appConfig) - .catch(err => console.error(err)) diff --git a/examples/angular/src/proxy.conf.example b/examples/angular/src/proxy.conf.example deleted file mode 100644 index b9222a0f0..000000000 --- a/examples/angular/src/proxy.conf.example +++ /dev/null @@ -1,6 +0,0 @@ -{ - "/armonik.api.grpc.v1": { - "target": "http://:", - "secure": false - } -} diff --git a/examples/angular/src/proxy.conf.json b/examples/angular/src/proxy.conf.json deleted file mode 100644 index 705ec8055..000000000 --- a/examples/angular/src/proxy.conf.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "/armonik.api.grpc.v1": { - "target": "http://172.30.34.216:5000", - "secure": false - } -} diff --git a/examples/angular/src/styles.css b/examples/angular/src/styles.css deleted file mode 100644 index 90d4ee007..000000000 --- a/examples/angular/src/styles.css +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/examples/angular/tsconfig.app.json b/examples/angular/tsconfig.app.json deleted file mode 100644 index 9e06c8ea7..000000000 --- a/examples/angular/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "types": [], - "outDir": "./out-tsc/app" - }, - "files": [ - "src/main.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/examples/angular/tsconfig.json b/examples/angular/tsconfig.json deleted file mode 100644 index 26f1b96f6..000000000 --- a/examples/angular/tsconfig.json +++ /dev/null @@ -1,33 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "target": "ES2022", - "lib": [ - "ES2022", - "dom" - ], - "useDefineForClassFields": false, - "experimentalDecorators": true, - "baseUrl": "./", - "module": "ES2022", - "moduleResolution": "node", - "strict": true, - "noFallthroughCasesInSwitch": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noPropertyAccessFromIndexSignature": true, - "declaration": false, - "downlevelIteration": true, - "importHelpers": true, - "outDir": "./dist/out-tsc", - "sourceMap": true, - "forceConsistentCasingInFileNames": true - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/examples/angular/tsconfig.spec.json b/examples/angular/tsconfig.spec.json deleted file mode 100644 index f7ab59035..000000000 --- a/examples/angular/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "types": [ - "jasmine" - ], - "outDir": "./out-tsc/spec" - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/examples/python/.gitignore b/examples/python/.gitignore deleted file mode 100644 index b96da0420..000000000 --- a/examples/python/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.whl \ No newline at end of file diff --git a/examples/python/Dockerfile b/examples/python/Dockerfile deleted file mode 100644 index b4136e510..000000000 --- a/examples/python/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM python:3.7-slim AS builder -WORKDIR /app -RUN python -m venv .venv && .venv/bin/pip install --no-cache-dir -U pip setuptools -COPY worker-requirements.txt *.whl ./ -RUN .venv/bin/pip install --no-cache-dir $( ( find . -type f -name "*.whl" | grep . ) || echo armonik ) -r worker-requirements.txt && find /app/.venv \( -type d -a -name test -o -name tests \) -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' \+ - -FROM python:3.7-slim -WORKDIR /app -RUN groupadd --gid 5000 armonikuser && useradd --home-dir /home/armonikuser --create-home --uid 5000 --gid 5000 --shell /bin/sh --skel /dev/null armonikuser && mkdir /cache && chown armonikuser: /cache -USER armonikuser -ENV PATH="/app/.venv/bin:$PATH" PYTHONUNBUFFERED=1 -COPY --from=builder /app /app -COPY . . -ENTRYPOINT ["python", "worker.py"] \ No newline at end of file diff --git a/examples/python/client-requirements.txt b/examples/python/client-requirements.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/python/client.py b/examples/python/client.py deleted file mode 100644 index 399fc0018..000000000 --- a/examples/python/client.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python3 -import grpc -import argparse -from typing import cast -from armonik.client import ArmoniKSubmitter, ArmoniKResult, ArmoniKTasks -from armonik.client.tasks import TaskFieldFilter -from armonik.common import TaskDefinition, TaskOptions -from datetime import timedelta, datetime -from common import Payload, Result - - -def parse_arguments(): - parser = argparse.ArgumentParser("ArmoniK Example Client") - parser.add_argument("-e", "--endpoint", required=True, type=str, help="Control plane endpoint") - parser.add_argument("-p", "--partition", type=str, help="Partition used for the worker") - parser.add_argument("-v", "--values", type=float, help="List of values to compute instead of x in [0, n[", nargs='+') - parser.add_argument("-n", "--nfirst", type=int, help="Compute from 0 inclusive to n exclusive, n=10 by default", default=10) - parser.add_argument("-l", "--list", action="store_true", help="List tasks of the session at the end") - return parser.parse_args() - - -def main(): - args = parse_arguments() - print("Hello ArmoniK Python Example !") - # Open a channel to the control plane - with grpc.insecure_channel(args.endpoint) as channel: - # Create a task submitting client - client = ArmoniKSubmitter(channel) - # Create the results client - results_client = ArmoniKResult(channel) - # Default task options to be used in a session - default_task_options = TaskOptions(max_duration=timedelta(seconds=300), priority=1, max_retries=5, partition_id=args.partition) - # Create a session - session_id = client.create_session(default_task_options=default_task_options, partition_ids=[args.partition] if args.partition is not None else None) - print(f"Session {session_id} has been created") - try: - # Create the payload - payload = Payload([i for i in range(args.nfirst)] if args.values is None else args.values) - # Create the result - result_name = f"main_result_{int(datetime.now().timestamp())}" - result_id = results_client.get_results_ids(session_id, [result_name])[result_name] - # Define the task with the payload - task_definition = TaskDefinition(payload.serialize(), expected_output_ids=[result_id]) - # Submit the task - submitted_tasks, submission_errors = client.submit(session_id, [task_definition]) - for e in submission_errors: - print(f"Submission error : {e}") - - print(f"Main tasks have been sent") - - for t in submitted_tasks: - # Wait for the result to be available - reply = client.wait_for_availability(session_id, result_id=t.expected_output_ids[0]) - if reply is None: - # This should not happen - print("Result unexpectedly unavailable") - continue - if reply.is_available(): - # Result is available, get the result - result_payload = Result.deserialize(cast(bytes, client.get_result(session_id, result_id=t.expected_output_ids[0]))) - print(f"Result : {result_payload.value}") - else: - # Result is in error - errors = "\n".join(reply.errors) - print(f'Errors : {errors}') - - # List tasks - if args.list: - print(f"Listing tasks of session {session_id}") - # Create the tasks client - tasks_client = ArmoniKTasks(channel) - - # Request listing of tasks from the session - total_tasks, tasks = tasks_client.list_tasks(TaskFieldFilter.SESSION_ID == session_id) - print(f"Found {total_tasks} tasks in total for the session {session_id}") - - for t in tasks: - print(t) - - except KeyboardInterrupt: - # If we stop the script, cancel the session - client.cancel_session(session_id) - print("Session has been cancelled") - finally: - print("Good bye !") - - -if __name__ == "__main__": - main() diff --git a/examples/python/common.py b/examples/python/common.py deleted file mode 100644 index 423c8ca57..000000000 --- a/examples/python/common.py +++ /dev/null @@ -1,54 +0,0 @@ -from typing import List, Union -import json - - -class Payload: - def __init__(self, values: List[Union[float, str]], subtask_threshold=2): - """ - Creates a payload with a value list and a threshold - :param values: Values to compute if it's a list of float. If it's a list of strings, corresponds to the results' keys to aggregate - :param subtask_threshold: Maximum threshold at which the task is split. If number of values is less than this threshold, the task is computed - """ - self.values = values - self.subtask_threshold = subtask_threshold - - def serialize(self) -> bytes: - """ - Serializes the payload. Converts the attributes to json and return a byte array - :return: Serialized payload compatible with ArmoniK - """ - return json.dumps({"values": self.values, "subtask_threshold": self.subtask_threshold}).encode("utf-8") - - @classmethod - def deserialize(cls, payload: bytes) -> "Payload": - """ - Create a payload instance from the payload bytes received from ArmoniK - :param payload: Raw ArmoniK Payload - :return: Payload object - """ - return cls(**json.loads(payload.decode("utf-8"))) - - -class Result: - def __init__(self, value: float): - """ - Result of a task - :param value: Actual value - """ - self.value = value - - def serialize(self) -> bytes: - """ - Serializes the result. Converts the attributes to json and return a byte array - :return: Serialized result compatible with ArmoniK - """ - return json.dumps({"value": self.value}).encode("utf-8") - - @classmethod - def deserialize(cls, payload: bytes) -> "Result": - """ - Create a Result instance from the data dependency bytes received from ArmoniK - :param payload: Raw ArmoniK data dependency - :return: Result object - """ - return cls(**json.loads(payload.decode("utf-8"))) diff --git a/examples/python/secure_grpc_client.py b/examples/python/secure_grpc_client.py deleted file mode 100644 index c843fba21..000000000 --- a/examples/python/secure_grpc_client.py +++ /dev/null @@ -1,62 +0,0 @@ -import grpc -import argparse -from armonik.client.sessions import ArmoniKSessions, SessionFieldFilter -from armonik.common.enumwrapper import SESSION_STATUS_CANCELLED - -def parse_arguments(): - parser = argparse.ArgumentParser(description="ArmoniK Example for Client connection TLS or mutual TLS") - parser.add_argument("-v","--version", action="version", version="ArmoniK Admin CLI 0.0.1") - parser.add_argument("--endpoint", default="localhost:5001", help="ArmoniK control plane endpoint") - parser.add_argument("--ssl", help="Use this option to enable TLS for a secure channel.", action="store_true") - parser.add_argument("--ca", help="ca.crt path for TLS or mutual TLS") - parser.add_argument("--cert", help="client certificate path for mutual TLS") - parser.add_argument("--key", help="client key path for mutual TLS") - return parser.parse_args() - -def read_file(file_path: str) -> bytes: - with open(file_path, 'rb') as file: - return file.read() - -def create_channel(endpoint: str, ssl: bool, ca: str, key: str, cert: str) -> grpc.Channel: - """ - Create a gRPC channel for communication with the ArmoniK control plane - - Args: - ca (str): CA file path for TLS or mutual TLS - cert (str): Certificate file path for mutual TLS - key (str): Private key file path for mutual TLS - endpoint (str): ArmoniK control plane endpoint - - Returns: - grpc.Channel: gRPC channel for communication - """ - if ssl: - ca_data = read_file(ca) if ca else None - if cert and key: - cert_data = read_file(cert) if cert else None - key_data = read_file(key) if key else None - credentials = grpc.ssl_channel_credentials(root_certificates=ca_data, private_key=key_data, certificate_chain=cert_data) - print("Hello ArmoniK Python Example Using Mutual TLS !") - else: - credentials = grpc.ssl_channel_credentials(root_certificates=ca_data) - print("Hello ArmoniK Python Example Using TLS !") - return grpc.secure_channel(endpoint, credentials) - else: - print("Hello ArmoniK Python Example using Insecure Channel!") - return grpc.insecure_channel(endpoint) - - -def main(): - args = parse_arguments() - # Open a channel to the control plane - channel = create_channel(args.endpoint, args.ssl, args.ca, args.key, args.cert) - # Create the session client - client = ArmoniKSessions(channel) - # List numbers sessions with a cancelled status filter - sessions = client.list_sessions(SessionFieldFilter.STATUS == SESSION_STATUS_CANCELLED) - - print(f'\nNumber of sessions: {sessions[0]}\n') - - -if __name__ == "__main__": - main() diff --git a/examples/python/worker-requirements.txt b/examples/python/worker-requirements.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/python/worker.py b/examples/python/worker.py deleted file mode 100644 index 85dd54557..000000000 --- a/examples/python/worker.py +++ /dev/null @@ -1,87 +0,0 @@ -import logging -import os - -import grpc -from armonik.worker import ArmoniKWorker, TaskHandler, ClefLogger -from armonik.common import Output, TaskDefinition -from typing import List, Union, cast - -from common import Payload, Result - -ClefLogger.setup_logging(logging.INFO) - - -# Task processing -def processor(task_handler: TaskHandler) -> Output: - logger = ClefLogger.getLogger("ArmoniKWorker") - payload = Payload.deserialize(task_handler.payload) - # No values - if len(payload.values) == 0: - if task_handler.expected_results: - task_handler.send_result(task_handler.expected_results[0], Result(0.0).serialize()) - logger.info("No values") - return Output() - - if isinstance(payload.values[0], str): - # Aggregation task - results = [Result.deserialize(task_handler.data_dependencies[r]).value for r in cast(List[str], payload.values)] - task_handler.send_result(task_handler.expected_results[0], Result(aggregate(results)).serialize()) - logger.info(f"Aggregated {len(results)} values") - return Output() - - if len(payload.values) <= 1 or len(payload.values) <= payload.subtask_threshold: - # Compute - task_handler.send_result(task_handler.expected_results[0], Result(aggregate(cast(List[float], payload.values))).serialize()) - logger.info(f"Computed {len(payload.values)} values") - return Output() - - # Subtasking - pivot = len(payload.values) // 2 - # Split payload in half - lower = payload.values[:pivot] - upper = payload.values[pivot:] - # Create sub-results - subresults = task_handler.get_results_ids([f"{task_handler.task_id}_lower", f"{task_handler.task_id}_upper"]) - subtasks = [] - for result_id, vals in [(subresults[f"{task_handler.task_id}_lower"], lower), (subresults[f"{task_handler.task_id}_upper"],upper)]: - # Create new payloads and task definitions - new_payload = Payload(values=vals, subtask_threshold=payload.subtask_threshold).serialize() - subtasks.append(TaskDefinition(payload=new_payload, expected_output_ids=[result_id])) - # Create the aggregation task - aggregate_dependencies = [s.expected_output_ids[0] for s in subtasks] - subtasks.append(TaskDefinition(Payload(values=aggregate_dependencies).serialize(), expected_output_ids=task_handler.expected_results, data_dependencies=aggregate_dependencies)) - - # Submit tasks - submitted, errors = task_handler.create_tasks(subtasks) - if len(errors) > 0: - message = f"Errors while submitting subtasks : {', '.join(errors)}" - logger.error(message) - return Output(message) - logger.info(f"Submitted {len(submitted)} subtasks") - return Output() - - -def aggregate(values: List[Union[int, float]]) -> float: - return sum(values) - - -def main(): - # Create Seq compatible logger - logger = ClefLogger.getLogger("ArmoniKWorker") - # Define agent-worker communication endpoints - worker_scheme = "unix://" if os.getenv("ComputePlane__WorkerChannel__SocketType", "unixdomainsocket") == "unixdomainsocket" else "http://" - agent_scheme = "unix://" if os.getenv("ComputePlane__AgentChannel__SocketType", "unixdomainsocket") == "unixdomainsocket" else "http://" - worker_endpoint = worker_scheme+os.getenv("ComputePlane__WorkerChannel__Address", "/cache/armonik_worker.sock") - agent_endpoint = agent_scheme+os.getenv("ComputePlane__AgentChannel__Address", "/cache/armonik_agent.sock") - - # Start worker - logger.info("Worker Started") - # Use options to fix Unix socket connection on localhost (cf: ) - with grpc.insecure_channel(agent_endpoint, options=(('grpc.default_authority', 'localhost'),)) as agent_channel: - worker = ArmoniKWorker(agent_channel, processor, logger=logger) - logger.info("Worker Connected") - worker.start(worker_endpoint) - - -if __name__ == "__main__": - main() diff --git a/package.json b/package.json index 3f02901a4..dd2414cd7 100644 --- a/package.json +++ b/package.json @@ -10,19 +10,19 @@ "lint:fix": "eslint --fix ." }, "devDependencies": { - "@antfu/eslint-config": "^2.15.0", - "@typescript-eslint/eslint-plugin": "^7.7.0", + "@antfu/eslint-config": "^2.27.3", + "@typescript-eslint/eslint-plugin": "^7.18.0", "consola": "^3.2.3", - "eslint": "^9.0.0", + "eslint": "^9.9.1", "eslint-config-standard-with-typescript": "^43.0.1", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-n": "^17.2.1", - "eslint-plugin-promise": "^6.1.1", - "glob": "^10.3.3", - "jiti": "^1.19.3", - "pathe": "^1.1.1", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "zx": "^8.0.1" + "eslint-plugin-import": "^2.30.0", + "eslint-plugin-n": "^17.10.2", + "eslint-plugin-promise": "^6.6.0", + "glob": "^10.4.5", + "jiti": "^1.21.6", + "pathe": "^1.1.2", + "tslib": "^2.7.0", + "typescript": "^5.5.4", + "zx": "^8.1.5" } } diff --git a/packages/angular/package.json b/packages/angular/package.json index baae3f74b..d1c73a219 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -11,26 +11,26 @@ "proto:generate:linux": "protoc --plugin=protoc-gen-ng=$(which protoc-gen-ng) --ng_out=./projects/aneoconsultingfr/armonik.api.angular/src/lib/generated -I ../../Protos/V1 ../../Protos/V1/*.proto" }, "dependencies": { - "@angular/animations": "^16.2.1", - "@angular/common": "^16.2.1", - "@angular/compiler": "^16.2.1", - "@angular/core": "^16.2.1", - "@angular/forms": "^16.2.1", - "@angular/platform-browser": "^16.2.1", - "@angular/platform-browser-dynamic": "^16.2.1", - "@angular/router": "^16.2.1", + "@angular/animations": "^18.2.1", + "@angular/common": "^18.2.1", + "@angular/compiler": "^18.2.1", + "@angular/core": "^18.2.1", + "@angular/forms": "^18.2.1", + "@angular/platform-browser": "^18.2.1", + "@angular/platform-browser-dynamic": "^18.2.1", + "@angular/router": "^18.2.1", "@ngx-grpc/common": "^3.1.2", "@ngx-grpc/core": "^3.1.2", "@ngx-grpc/well-known-types": "^3.1.2", "google-protobuf": "^3.21.2", "rxjs": "~7.8.1", "tslib": "^2.6.2", - "zone.js": "~0.13.1" + "zone.js": "~0.14.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.0", - "@angular/cli": "~16.2.0", - "@angular/compiler-cli": "^16.2.1", + "@angular-devkit/build-angular": "^18.2.1", + "@angular/cli": "~18.2.1", + "@angular/compiler-cli": "^18.2.1", "@ngx-grpc/protoc-gen-ng": "^3.1.2", "@types/google-protobuf": "^3.15.6", "@types/jasmine": "~4.3.5", @@ -40,7 +40,7 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "ng-packagr": "^16.2.0", - "typescript": "~5.1.6" + "ng-packagr": "^18.2.1", + "typescript": "~5.5.4" } } diff --git a/packages/angular/pnpm-lock.yaml b/packages/angular/pnpm-lock.yaml index ff4a933c6..ce251177c 100644 --- a/packages/angular/pnpm-lock.yaml +++ b/packages/angular/pnpm-lock.yaml @@ -1,135 +1,133 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@angular/animations': - specifier: ^16.2.1 - version: 16.2.1(@angular/core@16.2.1) - '@angular/common': - specifier: ^16.2.1 - version: 16.2.1(@angular/core@16.2.1)(rxjs@7.8.1) - '@angular/compiler': - specifier: ^16.2.1 - version: 16.2.1(@angular/core@16.2.1) - '@angular/core': - specifier: ^16.2.1 - version: 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - '@angular/forms': - specifier: ^16.2.1 - version: 16.2.1(@angular/common@16.2.1)(@angular/core@16.2.1)(@angular/platform-browser@16.2.1)(rxjs@7.8.1) - '@angular/platform-browser': - specifier: ^16.2.1 - version: 16.2.1(@angular/animations@16.2.1)(@angular/common@16.2.1)(@angular/core@16.2.1) - '@angular/platform-browser-dynamic': - specifier: ^16.2.1 - version: 16.2.1(@angular/common@16.2.1)(@angular/compiler@16.2.1)(@angular/core@16.2.1)(@angular/platform-browser@16.2.1) - '@angular/router': - specifier: ^16.2.1 - version: 16.2.1(@angular/common@16.2.1)(@angular/core@16.2.1)(@angular/platform-browser@16.2.1)(rxjs@7.8.1) - '@ngx-grpc/common': - specifier: ^3.1.2 - version: 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) - '@ngx-grpc/core': - specifier: ^3.1.2 - version: 3.1.2(@angular/core@16.2.1)(@ngx-grpc/common@3.1.2)(rxjs@7.8.1) - '@ngx-grpc/well-known-types': - specifier: ^3.1.2 - version: 3.1.2(@ngx-grpc/common@3.1.2)(google-protobuf@3.21.2) - google-protobuf: - specifier: ^3.21.2 - version: 3.21.2 - rxjs: - specifier: ~7.8.1 - version: 7.8.1 - tslib: - specifier: ^2.6.2 - version: 2.6.2 - zone.js: - specifier: ~0.13.1 - version: 0.13.1 - -devDependencies: - '@angular-devkit/build-angular': - specifier: ^16.2.0 - version: 16.2.0(@angular/compiler-cli@16.2.1)(karma@6.4.2)(ng-packagr@16.2.0)(typescript@5.1.6) - '@angular/cli': - specifier: ~16.2.0 - version: 16.2.0 - '@angular/compiler-cli': - specifier: ^16.2.1 - version: 16.2.1(@angular/compiler@16.2.1)(typescript@5.1.6) - '@ngx-grpc/protoc-gen-ng': - specifier: ^3.1.2 - version: 3.1.2 - '@types/google-protobuf': - specifier: ^3.15.6 - version: 3.15.6 - '@types/jasmine': - specifier: ~4.3.5 - version: 4.3.5 - jasmine-core: - specifier: ~5.1.0 - version: 5.1.0 - karma: - specifier: ~6.4.2 - version: 6.4.2 - karma-chrome-launcher: - specifier: ~3.2.0 - version: 3.2.0 - karma-coverage: - specifier: ~2.2.1 - version: 2.2.1 - karma-jasmine: - specifier: ~5.1.0 - version: 5.1.0(karma@6.4.2) - karma-jasmine-html-reporter: - specifier: ~2.1.0 - version: 2.1.0(jasmine-core@5.1.0)(karma-jasmine@5.1.0)(karma@6.4.2) - ng-packagr: - specifier: ^16.2.0 - version: 16.2.0(@angular/compiler-cli@16.2.1)(tslib@2.6.2)(typescript@5.1.6) - typescript: - specifier: ~5.1.6 - version: 5.1.6 +importers: + + .: + dependencies: + '@angular/animations': + specifier: ^18.2.1 + version: 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + '@angular/common': + specifier: ^18.2.1 + version: 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1) + '@angular/compiler': + specifier: ^18.2.1 + version: 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + '@angular/core': + specifier: ^18.2.1 + version: 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + '@angular/forms': + specifier: ^18.2.1 + version: 18.2.1(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(rxjs@7.8.1) + '@angular/platform-browser': + specifier: ^18.2.1 + version: 18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + '@angular/platform-browser-dynamic': + specifier: ^18.2.1 + version: 18.2.1(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))) + '@angular/router': + specifier: ^18.2.1 + version: 18.2.1(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(rxjs@7.8.1) + '@ngx-grpc/common': + specifier: ^3.1.2 + version: 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) + '@ngx-grpc/core': + specifier: ^3.1.2 + version: 3.1.2(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) + '@ngx-grpc/well-known-types': + specifier: ^3.1.2 + version: 3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2) + google-protobuf: + specifier: ^3.21.2 + version: 3.21.2 + rxjs: + specifier: ~7.8.1 + version: 7.8.1 + tslib: + specifier: ^2.6.2 + version: 2.6.2 + zone.js: + specifier: ~0.14.4 + version: 0.14.10 + devDependencies: + '@angular-devkit/build-angular': + specifier: ^18.2.1 + version: 18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(@types/node@22.5.0)(chokidar@3.6.0)(karma@6.4.2)(ng-packagr@18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(tslib@2.6.2)(typescript@5.5.4))(typescript@5.5.4) + '@angular/cli': + specifier: ~18.2.1 + version: 18.2.1(chokidar@3.6.0) + '@angular/compiler-cli': + specifier: ^18.2.1 + version: 18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4) + '@ngx-grpc/protoc-gen-ng': + specifier: ^3.1.2 + version: 3.1.2 + '@types/google-protobuf': + specifier: ^3.15.6 + version: 3.15.6 + '@types/jasmine': + specifier: ~4.3.5 + version: 4.3.5 + jasmine-core: + specifier: ~5.1.0 + version: 5.1.0 + karma: + specifier: ~6.4.2 + version: 6.4.2 + karma-chrome-launcher: + specifier: ~3.2.0 + version: 3.2.0 + karma-coverage: + specifier: ~2.2.1 + version: 2.2.1 + karma-jasmine: + specifier: ~5.1.0 + version: 5.1.0(karma@6.4.2) + karma-jasmine-html-reporter: + specifier: ~2.1.0 + version: 2.1.0(jasmine-core@5.1.0)(karma-jasmine@5.1.0(karma@6.4.2))(karma@6.4.2) + ng-packagr: + specifier: ^18.2.1 + version: 18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(tslib@2.6.2)(typescript@5.5.4) + typescript: + specifier: ~5.5.4 + version: 5.5.4 packages: - /@ampproject/remapping@2.2.1: + '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - dev: true - /@angular-devkit/architect@0.1602.0(chokidar@3.5.3): - resolution: {integrity: sha512-ZRmUTBeD+uGr605eOHnsovEn6f1mOBI+kxP64DRvagNweX5TN04s3iyQ8jmLSAHQD9ush31LFxv3dVNxv3ceXQ==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 16.2.0(chokidar@3.5.3) - rxjs: 7.8.1 - transitivePeerDependencies: - - chokidar - dev: true + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} - /@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.1)(karma@6.4.2)(ng-packagr@16.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-miylwjOqvlKmYrzS84bjRaJrecZxOXH9xsPVvQE8VBe8UKePJjRAL6yyOqXUOGtzlch2YmT98RAnuni7y0FEAw==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/architect@0.1802.1': + resolution: {integrity: sha512-XTnJfCBMDQl3xF4w/eNrq821gbj2Ig1cqbzpRflhz4pqrANTAfHfPoIC7piWEZ60FNlHapzb6fvh6tJUGXG9og==} + 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'} + + '@angular-devkit/build-angular@18.2.1': + resolution: {integrity: sha512-ANsTWKjIlEvJ6s276TbwnDhkoHhQDfsNiRFUDRGBZu94UNR78ImQZSyKYGHJOeQQH6jpBtraA1rvW5WKozAtlw==} + 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: - '@angular/compiler-cli': ^16.0.0 - '@angular/localize': ^16.0.0 - '@angular/platform-server': ^16.0.0 - '@angular/service-worker': ^16.0.0 + '@angular/compiler-cli': ^18.0.0 + '@angular/localize': ^18.0.0 + '@angular/platform-server': ^18.0.0 + '@angular/service-worker': ^18.0.0 + '@web/test-runner': ^0.18.0 + browser-sync: ^3.0.2 jest: ^29.5.0 jest-environment-jsdom: ^29.5.0 karma: ^6.3.0 - ng-packagr: ^16.0.0 + ng-packagr: ^18.0.0 protractor: ^7.0.0 tailwindcss: ^2.0.0 || ^3.0.0 - typescript: '>=4.9.3 <5.2' + typescript: '>=5.4 <5.6' peerDependenciesMeta: '@angular/localize': optional: true @@ -137,6 +135,10 @@ packages: optional: true '@angular/service-worker': optional: true + '@web/test-runner': + optional: true + browser-sync: + optional: true jest: optional: true jest-environment-jsdom: @@ -149,3088 +151,6823 @@ packages: optional: true tailwindcss: optional: true - dependencies: - '@ampproject/remapping': 2.2.1 - '@angular-devkit/architect': 0.1602.0(chokidar@3.5.3) - '@angular-devkit/build-webpack': 0.1602.0(chokidar@3.5.3)(webpack-dev-server@4.15.1)(webpack@5.88.2) - '@angular-devkit/core': 16.2.0(chokidar@3.5.3) - '@angular/compiler-cli': 16.2.1(@angular/compiler@16.2.1)(typescript@5.1.6) - '@babel/core': 7.22.9 - '@babel/generator': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.9) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-runtime': 7.22.9(@babel/core@7.22.9) - '@babel/preset-env': 7.22.9(@babel/core@7.22.9) - '@babel/runtime': 7.22.6 - '@babel/template': 7.22.5 - '@discoveryjs/json-ext': 0.5.7 - '@ngtools/webpack': 16.2.0(@angular/compiler-cli@16.2.1)(typescript@5.1.6)(webpack@5.88.2) - '@vitejs/plugin-basic-ssl': 1.0.1(vite@4.4.7) - ansi-colors: 4.1.3 - autoprefixer: 10.4.14(postcss@8.4.27) - babel-loader: 9.1.3(@babel/core@7.22.9)(webpack@5.88.2) - babel-plugin-istanbul: 6.1.1 - browserslist: 4.21.5 - chokidar: 3.5.3 - copy-webpack-plugin: 11.0.0(webpack@5.88.2) - critters: 0.0.20 - css-loader: 6.8.1(webpack@5.88.2) - esbuild-wasm: 0.18.17 - fast-glob: 3.3.1 - guess-parser: 0.4.22(typescript@5.1.6) - https-proxy-agent: 5.0.1 - inquirer: 8.2.4 - jsonc-parser: 3.2.0 - karma: 6.4.2 - karma-source-map-support: 1.4.0 - less: 4.1.3 - less-loader: 11.1.0(less@4.1.3)(webpack@5.88.2) - license-webpack-plugin: 4.0.2(webpack@5.88.2) - loader-utils: 3.2.1 - magic-string: 0.30.1 - mini-css-extract-plugin: 2.7.6(webpack@5.88.2) - mrmime: 1.0.1 - ng-packagr: 16.2.0(@angular/compiler-cli@16.2.1)(tslib@2.6.2)(typescript@5.1.6) - open: 8.4.2 - ora: 5.4.1 - parse5-html-rewriting-stream: 7.0.0 - picomatch: 2.3.1 - piscina: 4.0.0 - postcss: 8.4.27 - postcss-loader: 7.3.3(postcss@8.4.27)(webpack@5.88.2) - resolve-url-loader: 5.0.0 - rxjs: 7.8.1 - sass: 1.64.1 - sass-loader: 13.3.2(sass@1.64.1)(webpack@5.88.2) - semver: 7.5.4 - source-map-loader: 4.0.1(webpack@5.88.2) - source-map-support: 0.5.21 - terser: 5.19.2 - text-table: 0.2.0 - tree-kill: 1.2.2 - tslib: 2.6.1 - typescript: 5.1.6 - vite: 4.4.7(less@4.1.3)(sass@1.64.1)(terser@5.19.2) - webpack: 5.88.2(esbuild@0.18.17) - webpack-dev-middleware: 6.1.1(webpack@5.88.2) - webpack-dev-server: 4.15.1(webpack@5.88.2) - webpack-merge: 5.9.0 - webpack-subresource-integrity: 5.1.0(webpack@5.88.2) - optionalDependencies: - esbuild: 0.18.17 - transitivePeerDependencies: - - '@swc/core' - - '@types/node' - - bufferutil - - canvas - - debug - - fibers - - html-webpack-plugin - - lightningcss - - node-sass - - sass-embedded - - stylus - - sugarss - - supports-color - - uglify-js - - utf-8-validate - - webpack-cli - dev: true - /@angular-devkit/build-webpack@0.1602.0(chokidar@3.5.3)(webpack-dev-server@4.15.1)(webpack@5.88.2): - resolution: {integrity: sha512-KdSr6iAcO30i/LIGL8mYi+d1buVXuDCp2dptzEJ4vxReOMFJca90KLwb+tVHEqqnDb0WkNfWm8Ii2QYh2FrNyA==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/build-webpack@0.1802.1': + resolution: {integrity: sha512-xOP9Hxkj/mWYdMTa/8uNxFTv7z+3UiGdt4VAO7vetV5qkU/S9rRq8FEKviCc2llXfwkhInSgeeHpWKdATa+YIQ==} + 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: webpack: ^5.30.0 - webpack-dev-server: ^4.0.0 - dependencies: - '@angular-devkit/architect': 0.1602.0(chokidar@3.5.3) - rxjs: 7.8.1 - webpack: 5.88.2(esbuild@0.18.17) - webpack-dev-server: 4.15.1(webpack@5.88.2) - transitivePeerDependencies: - - chokidar - dev: true + webpack-dev-server: ^5.0.2 - /@angular-devkit/core@16.2.0(chokidar@3.5.3): - resolution: {integrity: sha512-l1k6Rqm3YM16BEn3CWyQKrk9xfu+2ux7Bw3oS+h1TO4/RoxO2PgHj8LLRh/WNrYVarhaqO7QZ5ePBkXNMkzJ1g==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/core@18.2.1': + resolution: {integrity: sha512-fSuGj6CxiTFR+yjuVcaWqaVb5Wts39CSBYRO1BlsOlbuWFZ2NKC/BAb5bdxpB31heCBJi7e3XbPvcMMJIcnKlA==} + 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: ^3.5.2 peerDependenciesMeta: chokidar: optional: true - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - chokidar: 3.5.3 - jsonc-parser: 3.2.0 - rxjs: 7.8.1 - source-map: 0.7.4 - dev: true - /@angular-devkit/schematics@16.2.0: - resolution: {integrity: sha512-QMDJXPE0+YQJ9Ap3MMzb0v7rx6ZbBEokmHgpdIjN3eILYmbAdsSGE8HTV8NjS9nKmcyE9OGzFCMb7PFrDTlTAw==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 16.2.0(chokidar@3.5.3) - jsonc-parser: 3.2.0 - magic-string: 0.30.1 - ora: 5.4.1 - rxjs: 7.8.1 - transitivePeerDependencies: - - chokidar - dev: true + '@angular-devkit/schematics@18.2.1': + resolution: {integrity: sha512-2t/q0Jcv7yqhAzEdNgsxoGSCmPgD4qfnVOJ7EJw3LNIA+kX1CmtN4FESUS0i49kN4AyNJFAI5O2pV8iJiliKaw==} + 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'} - /@angular/animations@16.2.1(@angular/core@16.2.1): - resolution: {integrity: sha512-XVabK9fRKJaYPhW5wn8ySL4KL45N5Np+xOssWhLPDRDBdZjl62MExfpvMkamdkos6E1n1IGsy9wSemjnR4WKhg==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/animations@18.2.1': + resolution: {integrity: sha512-jit452yuE6DMVV09E6RAjgapgw64mMVH31ccpPvMDekzPsTuP3KNKtgRFU/k2DFhYJvyczM1AqqlgccE/JGaRw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 16.2.1 - dependencies: - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - tslib: 2.6.2 - dev: false + '@angular/core': 18.2.1 + + '@angular/build@18.2.1': + resolution: {integrity: sha512-HwzjB+I31cAtjTTbbS2NbayzfcWthaKaofJlSmZIst3PN+GwLZ8DU0DRpd/xu5AXkk+DoAIWd+lzUIaqngz6ow==} + 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: + '@angular/compiler-cli': ^18.0.0 + '@angular/localize': ^18.0.0 + '@angular/platform-server': ^18.0.0 + '@angular/service-worker': ^18.0.0 + less: ^4.2.0 + postcss: ^8.4.0 + tailwindcss: ^2.0.0 || ^3.0.0 + typescript: '>=5.4 <5.6' + peerDependenciesMeta: + '@angular/localize': + optional: true + '@angular/platform-server': + optional: true + '@angular/service-worker': + optional: true + less: + optional: true + postcss: + optional: true + tailwindcss: + optional: true - /@angular/cli@16.2.0: - resolution: {integrity: sha512-xT8vJOyw6Rc2364XDW2jHagLgKu7342ktd/lt+c0u6R+AB2XVFMePR7VceLohX9N/vRUsbQ0nVSZr+ru/hA+HA==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular/cli@18.2.1': + resolution: {integrity: sha512-SomUFDHanY4o7k3XBGf1eFt4z1h05IGJHfcbl2vxoc0lY59VN13m/pZsD2AtpqtJTzLQT02XQOUP4rmBbGoQ+Q==} + 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'} hasBin: true - dependencies: - '@angular-devkit/architect': 0.1602.0(chokidar@3.5.3) - '@angular-devkit/core': 16.2.0(chokidar@3.5.3) - '@angular-devkit/schematics': 16.2.0 - '@schematics/angular': 16.2.0 - '@yarnpkg/lockfile': 1.1.0 - ansi-colors: 4.1.3 - ini: 4.1.1 - inquirer: 8.2.4 - jsonc-parser: 3.2.0 - npm-package-arg: 10.1.0 - npm-pick-manifest: 8.0.1 - open: 8.4.2 - ora: 5.4.1 - pacote: 15.2.0 - resolve: 1.22.2 - semver: 7.5.4 - symbol-observable: 4.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - chokidar - - supports-color - dev: true - /@angular/common@16.2.1(@angular/core@16.2.1)(rxjs@7.8.1): - resolution: {integrity: sha512-druackA5JQpvfS8cD8DFtPRXGRKbhx3mQ778t1n6x3fXpIdGaAX+nSAgAKhIoF7fxWmu0KuHGzb+3BFlZRyTXw==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/common@18.2.1': + resolution: {integrity: sha512-N0ZJO1/iU9UhprplZRPvBcdRgA/i6l6Ng5gXs5ymHBJ0lxsB+mDVCmC4jISjR9gAWc426xXwLaOpuP5Gv3f/yg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 16.2.1 + '@angular/core': 18.2.1 rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - rxjs: 7.8.1 - tslib: 2.6.2 - dev: false - /@angular/compiler-cli@16.2.1(@angular/compiler@16.2.1)(typescript@5.1.6): - resolution: {integrity: sha512-A5SyNZTZnXSCL5JVXHKbYj9p2dRYoeFnb6hGQFt2AuCcpUjVIIdwHtre3YzkKe5sFwepPctdoRe2fRXlTfTRjA==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/compiler-cli@18.2.1': + resolution: {integrity: sha512-D+Qba0r6RfHfffzrebGYp54h05AxpkagLjit/GczKNgWSP1gIgZxSfi88D+GvFmeWvZxWN1ecAQ+yqft9hJqWg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} hasBin: true peerDependencies: - '@angular/compiler': 16.2.1 - typescript: '>=4.9.3 <5.2' - dependencies: - '@angular/compiler': 16.2.1(@angular/core@16.2.1) - '@babel/core': 7.22.5 - '@jridgewell/sourcemap-codec': 1.4.14 - chokidar: 3.5.3 - convert-source-map: 1.9.0 - reflect-metadata: 0.1.13 - semver: 7.5.3 - tslib: 2.6.2 - typescript: 5.1.6 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - dev: true + '@angular/compiler': 18.2.1 + typescript: '>=5.4 <5.6' - /@angular/compiler@16.2.1(@angular/core@16.2.1): - resolution: {integrity: sha512-dPauu+ESn79d66U9nBvnunNuBk/UMqnm7iL9Q31J8OKYN/4vrKbsO57pmULOft/GRAYsE3FdLBH0NkocFZKIMQ==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/compiler@18.2.1': + resolution: {integrity: sha512-5e9ygKEcsBoV6xpaGKVrtsLxLETlrM0oB7twl4qG/xuKYqCLj8cRQMcAKSqDfTPzWMOAQc7pHdk+uFVo/8dWHA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 16.2.1 + '@angular/core': 18.2.1 peerDependenciesMeta: '@angular/core': optional: true - dependencies: - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - tslib: 2.6.2 - /@angular/core@16.2.1(rxjs@7.8.1)(zone.js@0.13.1): - resolution: {integrity: sha512-Y+0jssQnJPovxMv9cDKYlp6BBHeFBLOHd/+FPv5IIGD1c7NwBP/TImJxCaIV78a57xnO8L0SFacDg/kULzvKrg==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/core@18.2.1': + resolution: {integrity: sha512-9KrSpJ65UlJZNXrE18NszcfOwb5LZgG+LYi5Doe7amt218R1bzb3trvuAm0ZzMaoKh4ugtUCkzEOd4FALPEX6w==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: rxjs: ^6.5.3 || ^7.4.0 - zone.js: ~0.13.0 - dependencies: - rxjs: 7.8.1 - tslib: 2.6.2 - zone.js: 0.13.1 + zone.js: ~0.14.10 - /@angular/forms@16.2.1(@angular/common@16.2.1)(@angular/core@16.2.1)(@angular/platform-browser@16.2.1)(rxjs@7.8.1): - resolution: {integrity: sha512-cCygiLfBAsVHdtKmNptlk2IgXu0wjRc8kSiiSnJkfK6U/NiNg8ADMiN7iYgKW2TD1ZRw+7dYZV856lxEy2n0+A==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/forms@18.2.1': + resolution: {integrity: sha512-T7z8KUuj2PoPxrMrAruQVJha+x4a9Y6IrKYtArgOQQlTwCEJuqpVYuOk5l3fwWpHE9bVEjvgkAMI1D5YXA/U6w==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 16.2.1 - '@angular/core': 16.2.1 - '@angular/platform-browser': 16.2.1 + '@angular/common': 18.2.1 + '@angular/core': 18.2.1 + '@angular/platform-browser': 18.2.1 rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/common': 16.2.1(@angular/core@16.2.1)(rxjs@7.8.1) - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - '@angular/platform-browser': 16.2.1(@angular/animations@16.2.1)(@angular/common@16.2.1)(@angular/core@16.2.1) - rxjs: 7.8.1 - tslib: 2.6.2 - dev: false - /@angular/platform-browser-dynamic@16.2.1(@angular/common@16.2.1)(@angular/compiler@16.2.1)(@angular/core@16.2.1)(@angular/platform-browser@16.2.1): - resolution: {integrity: sha512-dKMCSrbD/joOMXM1mhDOKNDZ1BxwO9r9uu5ZxY0L/fWm/ousgMucNikLr38vBudgWM8CN6BuabzkxWKcqi3k4g==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/platform-browser-dynamic@18.2.1': + resolution: {integrity: sha512-tYJHtshbaKrtnRA15k3vrveSVBqkVUGhINvGugFA2vMtdTOfhfPw+hhzYrcwJibgU49rHogCfI9mkIbpNRYntA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 16.2.1 - '@angular/compiler': 16.2.1 - '@angular/core': 16.2.1 - '@angular/platform-browser': 16.2.1 - dependencies: - '@angular/common': 16.2.1(@angular/core@16.2.1)(rxjs@7.8.1) - '@angular/compiler': 16.2.1(@angular/core@16.2.1) - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - '@angular/platform-browser': 16.2.1(@angular/animations@16.2.1)(@angular/common@16.2.1)(@angular/core@16.2.1) - tslib: 2.6.2 - dev: false + '@angular/common': 18.2.1 + '@angular/compiler': 18.2.1 + '@angular/core': 18.2.1 + '@angular/platform-browser': 18.2.1 - /@angular/platform-browser@16.2.1(@angular/animations@16.2.1)(@angular/common@16.2.1)(@angular/core@16.2.1): - resolution: {integrity: sha512-SH8zRiRAcw0B5/tVlEc5U/lN5F8g+JizSuu7BQvpCAQEDkM6IjF9LP36Bjav7JuadItbWLfT6peWYa1sJvax2w==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/platform-browser@18.2.1': + resolution: {integrity: sha512-hQABX7QotGmCIR3EhCBCDh5ZTvQao+JkuK5CCw2G1PkRfJMBwEpjNqnyhz41hZhWiGlucp9jgbeypppW+mIQEw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/animations': 16.2.1 - '@angular/common': 16.2.1 - '@angular/core': 16.2.1 + '@angular/animations': 18.2.1 + '@angular/common': 18.2.1 + '@angular/core': 18.2.1 peerDependenciesMeta: '@angular/animations': optional: true - dependencies: - '@angular/animations': 16.2.1(@angular/core@16.2.1) - '@angular/common': 16.2.1(@angular/core@16.2.1)(rxjs@7.8.1) - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - tslib: 2.6.2 - dev: false - /@angular/router@16.2.1(@angular/common@16.2.1)(@angular/core@16.2.1)(@angular/platform-browser@16.2.1)(rxjs@7.8.1): - resolution: {integrity: sha512-C0WfcktsC25G37unxdH/5I7PbkVBSEB1o+0DJK9/HG97r1yzEkptF6fbRIzDBTS7dX0NfWN/PTAKF0ep7YlHvA==} - engines: {node: ^16.14.0 || >=18.10.0} + '@angular/router@18.2.1': + resolution: {integrity: sha512-gVyqW6fYnG7oq1DlZSXJMQ2Py2dJQB7g6XVtRcYB1gR4aeowx5N9ws7PjqAi0ih91ASq2MmP4OlSSWLq+eaMGg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 16.2.1 - '@angular/core': 16.2.1 - '@angular/platform-browser': 16.2.1 + '@angular/common': 18.2.1 + '@angular/core': 18.2.1 + '@angular/platform-browser': 18.2.1 rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/common': 16.2.1(@angular/core@16.2.1)(rxjs@7.8.1) - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - '@angular/platform-browser': 16.2.1(@angular/animations@16.2.1)(@angular/common@16.2.1)(@angular/core@16.2.1) - rxjs: 7.8.1 - tslib: 2.6.2 - dev: false - /@assemblyscript/loader@0.10.1: - resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==} - dev: true - - /@babel/code-frame@7.22.10: + '@babel/code-frame@7.22.10': resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.10 - chalk: 2.4.2 - dev: true - /@babel/code-frame@7.22.5: + '@babel/code-frame@7.22.5': resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 - dev: true - /@babel/compat-data@7.22.5: - resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/compat-data@7.22.9: + '@babel/compat-data@7.22.9': resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.22.5: + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.22.5': resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.7 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/core@7.22.9: - resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.9 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) - '@babel/helpers': 7.22.10 - '@babel/parser': 7.22.10 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.10 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.22.10: + '@babel/generator@7.22.10': resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.10 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - jsesc: 2.5.2 - dev: true - /@babel/generator@7.22.7: + '@babel/generator@7.22.7': resolution: {integrity: sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - jsesc: 2.5.2 - dev: true - /@babel/generator@7.22.9: - resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - jsesc: 2.5.2 - dev: true - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/generator@7.25.5': + resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: - resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-compilation-targets@7.22.10: - resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.10 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + '@babel/helper-compilation-targets@7.22.5': resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 - lru-cache: 5.1.1 - semver: 6.3.0 - dev: true - /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.4': + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.22.9): + '@babel/helper-create-regexp-features-plugin@7.22.5': resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: true - /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.9): - resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} + '@babel/helper-create-regexp-features-plugin@7.25.2': + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.2 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-environment-visitor@7.22.5: + '@babel/helper-environment-visitor@7.22.5': resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-function-name@7.22.5: + '@babel/helper-function-name@7.22.5': resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - dev: true - /@babel/helper-hoist-variables@7.22.5: + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-module-imports@7.22.5: + '@babel/helper-module-imports@7.22.5': resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-module-transforms@7.22.5: + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.22.5': resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 - dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} + '@babel/helper-remap-async-to-generator@7.25.0': + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-wrap-function': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-wrap-function': 7.22.10 - dev: true - /@babel/helper-replace-supers@7.22.5: - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-string-parser@7.22.5: + '@babel/helper-string-parser@7.22.5': resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.22.5: + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.5': resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-wrap-function@7.22.10: - resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} + '@babel/helper-validator-option@7.22.5': + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.22.5 - '@babel/template': 7.22.5 - '@babel/types': 7.22.10 - dev: true - /@babel/helper-wrap-function@7.22.5: - resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helpers@7.22.10: - resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==} + '@babel/helper-wrap-function@7.25.0': + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.10 - '@babel/types': 7.22.10 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helpers@7.22.5: + '@babel/helpers@7.22.5': resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/highlight@7.22.10: + '@babel/helpers@7.25.0': + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.10': resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/highlight@7.22.5: + '@babel/highlight@7.22.5': resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/parser@7.22.10: + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.22.10': resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/parser@7.22.5: + '@babel/parser@7.22.5': resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + '@babel/parser@7.25.4': + resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': + resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.22.10(@babel/core@7.22.9) - dev: true + '@babel/core': ^7.0.0 - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.22.9): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.0.0 - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - dev: true + '@babel/core': ^7.13.0 - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.9): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} + 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 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.9): + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.9): + '@babel/plugin-syntax-class-properties@7.12.13': resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.9): + '@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 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-export-namespace-from@7.8.3': resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + '@babel/plugin-syntax-import-assertions@7.24.7': + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + '@babel/plugin-syntax-import-attributes@7.24.7': + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.9): + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-json-strings@7.8.3': resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.9): + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.9): + '@babel/plugin-syntax-numeric-separator@7.10.4': resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-optional-catch-binding@7.8.3': resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.9): + '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.9): + '@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 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.9): + '@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 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.9): + '@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 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + '@babel/plugin-transform-arrow-functions@7.24.7': + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-async-generator-functions@7.22.10(@babel/core@7.22.9): - resolution: {integrity: sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==} + '@babel/plugin-transform-async-generator-functions@7.25.0': + resolution: {integrity: sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + '@babel/plugin-transform-async-to-generator@7.24.7': + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + '@babel/plugin-transform-block-scoped-functions@7.24.7': + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + '@babel/plugin-transform-block-scoping@7.25.0': + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + '@babel/plugin-transform-class-properties@7.25.4': + resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + '@babel/plugin-transform-class-static-block@7.24.7': + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.9): - resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} + '@babel/plugin-transform-classes@7.25.4': + resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + '@babel/plugin-transform-computed-properties@7.24.7': + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 - dev: true - /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + '@babel/plugin-transform-dotall-regex@7.24.7': + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + '@babel/plugin-transform-duplicate-keys@7.24.7': + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.24.7': + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + '@babel/plugin-transform-exponentiation-operator@7.24.7': + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} + '@babel/plugin-transform-export-namespace-from@7.24.7': + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + '@babel/plugin-transform-for-of@7.24.7': + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + '@babel/plugin-transform-function-name@7.25.1': + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} + '@babel/plugin-transform-json-strings@7.24.7': + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + '@babel/plugin-transform-literals@7.25.2': + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} + '@babel/plugin-transform-logical-assignment-operators@7.24.7': + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + '@babel/plugin-transform-member-expression-literals@7.24.7': + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + '@babel/plugin-transform-modules-amd@7.24.7': + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + '@babel/plugin-transform-modules-systemjs@7.25.0': + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + '@babel/plugin-transform-modules-umd@7.24.7': + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + '@babel/plugin-transform-new-target@7.24.7': + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + '@babel/plugin-transform-numeric-separator@7.24.7': + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + '@babel/plugin-transform-object-rest-spread@7.24.7': + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) - dev: true - - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + + '@babel/plugin-transform-object-super@7.24.7': + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + '@babel/plugin-transform-optional-catch-binding@7.24.7': + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-optional-chaining@7.22.10(@babel/core@7.22.9): - resolution: {integrity: sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==} + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) - dev: true - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + '@babel/plugin-transform-parameters@7.24.7': + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + '@babel/plugin-transform-private-methods@7.25.4': + resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} + '@babel/plugin-transform-private-property-in-object@7.24.7': + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + '@babel/plugin-transform-property-literals@7.24.7': + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + '@babel/plugin-transform-regenerator@7.24.7': + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.1 - dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + '@babel/plugin-transform-reserved-words@7.24.7': + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-runtime@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==} + '@babel/plugin-transform-runtime@7.24.7': + resolution: {integrity: sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.9) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.9) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.9) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + '@babel/plugin-transform-shorthand-properties@7.24.7': + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + '@babel/plugin-transform-spread@7.24.7': + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + '@babel/plugin-transform-sticky-regex@7.24.7': + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + '@babel/plugin-transform-template-literals@7.24.7': + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + '@babel/plugin-transform-unicode-escapes@7.24.7': + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + '@babel/plugin-transform-unicode-property-regex@7.24.7': + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + '@babel/plugin-transform-unicode-regex@7.24.7': + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + '@babel/plugin-transform-unicode-sets-regex@7.25.4': + resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/preset-env@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==} + '@babel/preset-env@7.25.3': + resolution: {integrity: sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-async-generator-functions': 7.22.10(@babel/core@7.22.9) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-optional-chaining': 7.22.10(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.9) - '@babel/preset-modules': 0.1.5(@babel/core@7.22.9) - '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.9) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.9) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.9) - core-js-compat: 3.31.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.22.9): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + '@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 - dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) - '@babel/types': 7.22.5 - esutils: 2.0.3 - dev: true + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - /@babel/regjsgen@0.8.0: + '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: true - /@babel/runtime@7.22.6: - resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.11 - dev: true - /@babel/template@7.22.5: + '@babel/template@7.22.5': resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - dev: true - /@babel/traverse@7.22.10: + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.22.10': resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.10 - '@babel/generator': 7.22.10 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.10 - '@babel/types': 7.22.10 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/traverse@7.22.5: + '@babel/traverse@7.22.5': resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.7 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.22.10: + '@babel/traverse@7.25.4': + resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.22.10': resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - dev: true - /@babel/types@7.22.5: + '@babel/types@7.22.5': resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - dev: true - /@colors/colors@1.5.0: + '@babel/types@7.25.4': + resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} + engines: {node: '>=6.9.0'} + + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - dev: true - /@dabh/diagnostics@2.0.3: + '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - dev: true - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: true + '@discoveryjs/json-ext@0.6.1': + resolution: {integrity: sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==} + engines: {node: '>=14.17.0'} - /@esbuild/android-arm64@0.18.17: - resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.23.0': + resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - /@esbuild/android-arm64@0.19.2: - resolution: {integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==} + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.17: - resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} + '@esbuild/android-arm64@0.23.0': + resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.2: - resolution: {integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.23.0': + resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} + engines: {node: '>=18'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.17: - resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.2: - resolution: {integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.23.0': + resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} + engines: {node: '>=18'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.17: - resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.2: - resolution: {integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.23.0': + resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.17: - resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.2: - resolution: {integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.23.0': + resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.17: - resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.2: - resolution: {integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.23.0': + resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.17: - resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.2: - resolution: {integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.23.0': + resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.17: - resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.2: - resolution: {integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.23.0': + resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.17: - resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.2: - resolution: {integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.23.0': + resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.17: - resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.2: - resolution: {integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.23.0': + resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.17: - resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.2: - resolution: {integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.23.0': + resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.17: - resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.2: - resolution: {integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.23.0': + resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.17: - resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.2: - resolution: {integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.23.0': + resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.17: - resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.2: - resolution: {integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.23.0': + resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.17: - resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.2: - resolution: {integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.23.0': + resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.17: - resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.2: - resolution: {integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.23.0': + resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.17: - resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.2: - resolution: {integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.23.0': + resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.17: - resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} + '@esbuild/openbsd-arm64@0.23.0': + resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.2: - resolution: {integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.23.0': + resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.17: - resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.2: - resolution: {integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.23.0': + resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.17: - resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.2: - resolution: {integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.23.0': + resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.17: - resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.2: - resolution: {integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.23.0': + resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.17: - resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.2: - resolution: {integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.23.0': + resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - dev: true + '@inquirer/checkbox@2.4.7': + resolution: {integrity: sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw==} + engines: {node: '>=18'} + + '@inquirer/confirm@3.1.22': + resolution: {integrity: sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==} + engines: {node: '>=18'} + + '@inquirer/core@9.0.10': + resolution: {integrity: sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==} + engines: {node: '>=18'} + + '@inquirer/editor@2.1.22': + resolution: {integrity: sha512-K1QwTu7GCK+nKOVRBp5HY9jt3DXOfPGPr6WRDrPImkcJRelG9UTx2cAtK1liXmibRrzJlTWOwqgWT3k2XnS62w==} + engines: {node: '>=18'} + + '@inquirer/expand@2.1.22': + resolution: {integrity: sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.5': + resolution: {integrity: sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==} + engines: {node: '>=18'} + + '@inquirer/input@2.2.9': + resolution: {integrity: sha512-7Z6N+uzkWM7+xsE+3rJdhdG/+mQgejOVqspoW+w0AbSZnL6nq5tGMEVASaYVWbkoSzecABWwmludO2evU3d31g==} + engines: {node: '>=18'} + + '@inquirer/number@1.0.10': + resolution: {integrity: sha512-kWTxRF8zHjQOn2TJs+XttLioBih6bdc5CcosXIzZsrTY383PXI35DuhIllZKu7CdXFi2rz2BWPN9l0dPsvrQOA==} + engines: {node: '>=18'} - /@isaacs/cliui@8.0.2: + '@inquirer/password@2.1.22': + resolution: {integrity: sha512-5Fxt1L9vh3rAKqjYwqsjU4DZsEvY/2Gll+QkqR4yEpy6wvzLxdSgFhUcxfDAOtO4BEoTreWoznC0phagwLU5Kw==} + engines: {node: '>=18'} + + '@inquirer/prompts@5.3.8': + resolution: {integrity: sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==} + engines: {node: '>=18'} + + '@inquirer/rawlist@2.2.4': + resolution: {integrity: sha512-pb6w9pWrm7EfnYDgQObOurh2d2YH07+eDo3xQBsNAM2GRhliz6wFXGi1thKQ4bN6B0xDd6C3tBsjdr3obsCl3Q==} + engines: {node: '>=18'} + + '@inquirer/search@1.0.7': + resolution: {integrity: sha512-p1wpV+3gd1eST/o5N3yQpYEdFNCzSP0Klrl+5bfD3cTTz8BGG6nf4Z07aBW0xjlKIj1Rp0y3x/X4cZYi6TfcLw==} + engines: {node: '>=18'} + + '@inquirer/select@2.4.7': + resolution: {integrity: sha512-JH7XqPEkBpNWp3gPCqWqY8ECbyMoFcCZANlL6pV9hf59qK6dGmkOlx1ydyhY+KZ0c5X74+W6Mtp+nm2QX0/MAQ==} + engines: {node: '>=18'} + + '@inquirer/type@1.5.2': + resolution: {integrity: sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==} + engines: {node: '>=18'} + + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.0.1 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - 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 - dev: true - /@istanbuljs/schema@0.1.3: + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - dev: true - /@jridgewell/gen-mapping@0.3.2: + '@jridgewell/gen-mapping@0.3.2': resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 - dev: true - /@jridgewell/resolve-uri@3.1.0: + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.0': resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/set-array@1.1.2: + '@jridgewell/set-array@1.1.2': resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/source-map@0.3.3: + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.3': resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} - dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - dev: true - /@jridgewell/sourcemap-codec@1.4.14: + '@jridgewell/sourcemap-codec@1.4.14': resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - /@jridgewell/trace-mapping@0.3.17: + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.17': resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@leichtgewicht/ip-codec@2.0.4: + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.1.0': + resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.3.0': + resolution: {integrity: sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@leichtgewicht/ip-codec@2.0.4': resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} - dev: true - /@ngtools/webpack@16.2.0(@angular/compiler-cli@16.2.1)(typescript@5.1.6)(webpack@5.88.2): - resolution: {integrity: sha512-c9jv4r7GnLTpnPOeF+a9yAm/3/2wwl9lMBU32i9hlY+q/Hqde4PiL95bUOLnRRL1I64DV7BFTlSZqSPgDpFXZQ==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@listr2/prompt-adapter-inquirer@2.0.15': + resolution: {integrity: sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@inquirer/prompts': '>= 3 < 6' + + '@lmdb/lmdb-darwin-arm64@3.0.13': + resolution: {integrity: sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==} + cpu: [arm64] + os: [darwin] + + '@lmdb/lmdb-darwin-x64@3.0.13': + resolution: {integrity: sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==} + cpu: [x64] + os: [darwin] + + '@lmdb/lmdb-linux-arm64@3.0.13': + resolution: {integrity: sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==} + cpu: [arm64] + os: [linux] + + '@lmdb/lmdb-linux-arm@3.0.13': + resolution: {integrity: sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==} + cpu: [arm] + os: [linux] + + '@lmdb/lmdb-linux-x64@3.0.13': + resolution: {integrity: sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==} + cpu: [x64] + os: [linux] + + '@lmdb/lmdb-win32-x64@3.0.13': + resolution: {integrity: sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==} + cpu: [x64] + os: [win32] + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@ngtools/webpack@18.2.1': + resolution: {integrity: sha512-v86U3jOoy5R9ZWe9Q0LbHRx/IBw1lbn0ldBU+gIIepREyVvb9CcH/vAyIb2Fw1zaYvvfG1OyzdrHyW8iGXjdnQ==} + 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: - '@angular/compiler-cli': ^16.0.0 - typescript: '>=4.9.3 <5.2' + '@angular/compiler-cli': ^18.0.0 + typescript: '>=5.4 <5.6' webpack: ^5.54.0 - dependencies: - '@angular/compiler-cli': 16.2.1(@angular/compiler@16.2.1)(typescript@5.1.6) - typescript: 5.1.6 - webpack: 5.88.2(esbuild@0.18.17) - dev: true - /@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1): + '@ngx-grpc/common@3.1.2': resolution: {integrity: sha512-8HvfXDNFrY2oFhkxchHQF2pku1+1sA+MUHcnALURkPE0yvTuqYGkuL7XVxTBImJMZaHiiV7YhFMYDUDOC1ISPg==} peerDependencies: google-protobuf: ^3.10.0 rxjs: '>=6.0.0' - dependencies: - google-protobuf: 3.21.2 - rxjs: 7.8.1 - tslib: 2.6.2 - dev: false - /@ngx-grpc/core@3.1.2(@angular/core@16.2.1)(@ngx-grpc/common@3.1.2)(rxjs@7.8.1): + '@ngx-grpc/core@3.1.2': resolution: {integrity: sha512-h4CFRPvTFdvk94M6TkHeGlTA6edbIEDd6o0H5KLWVzrwRH1mUH0oX6+GXjulZfm7u1qY+mhX/913wrd86UTYbg==} peerDependencies: '@angular/core': '>=12.0.0' '@ngx-grpc/common': 3.1.2 rxjs: '>=6.0.0' - dependencies: - '@angular/core': 16.2.1(rxjs@7.8.1)(zone.js@0.13.1) - '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) - rxjs: 7.8.1 - tslib: 2.6.2 - dev: false - /@ngx-grpc/protoc-gen-ng@3.1.2: + '@ngx-grpc/protoc-gen-ng@3.1.2': resolution: {integrity: sha512-epOAs0hEXT2l9l4jjXgaxB5TPtg6AWYq3uRl1vIo7vNHj7qsg0sMIOhxV+bPgZ93YOfKCQkemklt7koKDRJyIw==} hasBin: true - dependencies: - google-protobuf: 3.21.2 - prettier: 1.19.1 - tslib: 2.6.2 - winston: 3.8.2 - dev: true - /@ngx-grpc/well-known-types@3.1.2(@ngx-grpc/common@3.1.2)(google-protobuf@3.21.2): + '@ngx-grpc/well-known-types@3.1.2': resolution: {integrity: sha512-otJ8C/NuLwm4JuvqzTT/xAHLJJN/EpkowooKgVGzXOnfTckzp5OWiUmBdxBk/pXo234CTT42KvOnDMtSloa+sA==} peerDependencies: '@ngx-grpc/common': 3.1.2 google-protobuf: ^3.10.0 - dependencies: - '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) - google-protobuf: 3.21.2 - tslib: 2.6.2 - dev: false - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - /@npmcli/fs@2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.5.4 - dev: true + '@npmcli/agent@2.2.2': + resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} + engines: {node: ^16.14.0 || >=18.0.0} - /@npmcli/fs@3.1.0: + '@npmcli/fs@3.1.0': resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - semver: 7.5.3 - dev: true - /@npmcli/git@4.0.4: - resolution: {integrity: sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/promise-spawn': 6.0.2 - lru-cache: 7.18.3 - npm-pick-manifest: 8.0.1 - proc-log: 3.0.0 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.5.4 - which: 3.0.0 - transitivePeerDependencies: - - bluebird - dev: true + '@npmcli/git@5.0.8': + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} - /@npmcli/installed-package-contents@2.0.2: + '@npmcli/installed-package-contents@2.0.2': resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - dependencies: - npm-bundled: 3.0.0 - npm-normalize-package-bin: 3.0.0 - dev: true - /@npmcli/move-file@2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - dev: true + '@npmcli/node-gyp@3.0.0': + resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@5.2.0': + resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/promise-spawn@7.0.2': + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/redact@2.0.1': + resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/run-script@8.1.0': + resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/plugin-json@6.1.0': + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-node-resolve@15.2.3': + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.0.2': + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + 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.20.0': + resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm-eabi@4.21.1': + resolution: {integrity: sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.20.0': + resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-android-arm64@4.21.1': + resolution: {integrity: sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.20.0': + resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-arm64@4.21.1': + resolution: {integrity: sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.20.0': + resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.21.1': + resolution: {integrity: sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-gnueabihf@4.21.1': + resolution: {integrity: sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.21.1': + resolution: {integrity: sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.20.0': + resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.21.1': + resolution: {integrity: sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.20.0': + resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.21.1': + resolution: {integrity: sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.1': + resolution: {integrity: sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.21.1': + resolution: {integrity: sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.20.0': + resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.21.1': + resolution: {integrity: sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.20.0': + resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.21.1': + resolution: {integrity: sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.20.0': + resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.21.1': + resolution: {integrity: sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.20.0': + resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-arm64-msvc@4.21.1': + resolution: {integrity: sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.20.0': + resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.21.1': + resolution: {integrity: sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.20.0': + resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.21.1': + resolution: {integrity: sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==} + cpu: [x64] + os: [win32] + + '@rollup/wasm-node@4.21.1': + resolution: {integrity: sha512-U91HbBWWbyevXQAsW5/NTbfsOP1QoKFeyuQNWbo2dQTnfx5W1iVq7Ma1ul+Kp36oj5Cb8nj8D7e1PlRc02u/oQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + '@schematics/angular@18.2.1': + resolution: {integrity: sha512-bBV7I+MCbdQmBPUFF4ECg37VReM0+AdQsxgwkjBBSYExmkErkDoDgKquwL/tH7stDCc5IfTd0g9BMeosRgDMug==} + 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'} + + '@sigstore/bundle@2.3.2': + resolution: {integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@sigstore/core@1.1.0': + resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@sigstore/protobuf-specs@0.3.2': + resolution: {integrity: sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@sigstore/sign@2.3.2': + resolution: {integrity: sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@sigstore/tuf@2.3.4': + resolution: {integrity: sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@sigstore/verify@1.2.1': + resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@socket.io/component-emitter@3.1.0': + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + + '@tufjs/canonical-json@2.0.0': + resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@tufjs/models@2.0.1': + resolution: {integrity: sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@types/body-parser@1.19.2': + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + + '@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.35': + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + + '@types/cookie@0.4.1': + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + '@types/cors@2.8.13': + resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} + + '@types/eslint-scope@3.7.4': + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + + '@types/eslint@8.37.0': + resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/express-serve-static-core@4.17.33': + resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/google-protobuf@3.15.6': + resolution: {integrity: sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/http-proxy@1.17.10': + resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} + + '@types/jasmine@4.3.5': + resolution: {integrity: sha512-9YHUdvuNDDRJYXZwHqSsO72Ok0vmqoJbNn73ttyITQp/VA60SarnZ+MPLD37rJAhVoKp+9BWOvJP5tHIRfZylQ==} + + '@types/json-schema@7.0.11': + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@18.15.11': + resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + + '@types/node@22.5.0': + resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} + + '@types/qs@6.9.7': + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + + '@types/range-parser@1.2.4': + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@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/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + + '@types/triple-beam@1.3.2': + resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + + '@vitejs/plugin-basic-ssl@1.1.0': + resolution: {integrity: sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==} + engines: {node: '>=14.6.0'} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + + adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + 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@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + 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.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + 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.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-loader@9.1.3: + resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + 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} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + builtins@5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacache@18.0.4: + resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001521: + resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==} + + caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.7.0: + resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + engines: {node: '>=6'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + 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'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + 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'} + + 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-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + 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==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + 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'} + + 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-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-webpack-plugin@12.0.2: + resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.1.0 + + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + + 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@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + critters@0.0.24: + resolution: {integrity: sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + 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@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + custom-event@1.0.1: + resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} + + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + + 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.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + 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'} + + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + 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'} + + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + di@0.0.1: + resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} + + dns-packet@5.5.0: + resolution: {integrity: sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==} + engines: {node: '>=6'} + + dom-serialize@2.2.1: + resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.4.496: + resolution: {integrity: sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==} + + electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + + 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==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + 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'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + engine.io-parser@5.0.6: + resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} + engines: {node: '>=10.0.0'} + + engine.io@6.4.1: + resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} + engines: {node: '>=10.0.0'} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + ent@2.2.0: + resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + 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==} + + es-module-lexer@1.2.1: + resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} + + esbuild-wasm@0.23.0: + resolution: {integrity: sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.23.0: + resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + 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==} + + 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'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + 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'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.1: + resolution: {integrity: sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==} + 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.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + 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.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-intrinsic@1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + 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.2.3: + resolution: {integrity: sha512-Kb4rfmBVE3eQTAimgmeqc2LwSnN0wIOkkUL6HmxEFxNJ4fHghYHVbFba/HcGcRjE6s9KoMNK3rSOwkL4PioZjg==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + + google-protobuf@3.21.2: + resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + 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-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + 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@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-middleware@2.0.6: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy-middleware@3.0.0: + resolution: {integrity: sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==} + 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'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + 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.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@6.0.5: + resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + 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 + + immutable@4.3.0: + resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + 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'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + injection-js@2.4.0: + resolution: {integrity: sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==} + + 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-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-core-module@2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + 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-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + 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-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + 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==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + 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'} + + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + 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.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + + jackspeak@2.2.0: + resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} + engines: {node: '>=14'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jasmine-core@4.6.0: + resolution: {integrity: sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==} + + jasmine-core@5.1.0: + resolution: {integrity: sha512-bFMMwpKuTZXCuGd51yClFobw5SOtad1kmdWnYO8dNwYV8i01Xj0C2+nyQpSKl1EKxiPfyd1ZgBl/rsusL3aS6w==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@3.0.0: + resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.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==} + + 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==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + karma-chrome-launcher@3.2.0: + resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} + + karma-coverage@2.2.1: + resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==} + engines: {node: '>=10.0.0'} + + karma-jasmine-html-reporter@2.1.0: + resolution: {integrity: sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==} + peerDependencies: + jasmine-core: ^4.0.0 || ^5.0.0 + karma: ^6.0.0 + karma-jasmine: ^5.0.0 + + karma-jasmine@5.1.0: + resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} + engines: {node: '>=12'} + peerDependencies: + karma: ^6.0.0 + + karma-source-map-support@1.4.0: + resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} + + karma@6.4.2: + resolution: {integrity: sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==} + engines: {node: '>= 10'} + hasBin: true + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + launch-editor@2.8.1: + resolution: {integrity: sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==} + + 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.0: + resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} + engines: {node: '>=6'} + hasBin: true + + license-webpack-plugin@4.0.2: + resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} + peerDependencies: + webpack: '*' + peerDependenciesMeta: + webpack: + optional: true + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + engines: {node: '>=18.0.0'} + + lmdb@3.0.13: + resolution: {integrity: sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==} + hasBin: true + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + 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@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + 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-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.5.1: + resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@9.1.1: + resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} + engines: {node: 14 || >=16.14} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-fetch-happen@13.0.1: + resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} + engines: {node: ^16.14.0 || >=18.0.0} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@4.11.1: + resolution: {integrity: sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + 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.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + 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 + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mini-css-extract-plugin@2.9.0: + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.0: + resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} + engines: {node: '>=16 || 14 >=14.17'} + + 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-fetch@3.0.1: + resolution: {integrity: sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + 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-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@4.2.5: + resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.0: + resolution: {integrity: sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + needle@3.2.0: + resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} + engines: {node: '>= 4.4.x'} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + ng-packagr@18.2.1: + resolution: {integrity: sha512-dy9ZDpZb3QpAz+Y/m8VAu7ctr2VrnRU3gmQwJagnNybVJtCsKn3lZA3IW7Z7GTLoG5IALSPouiCgiB/C8ozv7w==} + engines: {node: ^18.19.1 || >=20.11.1} + hasBin: true + peerDependencies: + '@angular/compiler-cli': ^18.0.0 || ^18.2.0-next.0 + tailwindcss: ^2.0.0 || ^3.0.0 + tslib: ^2.3.0 + typescript: '>=5.4 <5.6' + peerDependenciesMeta: + tailwindcss: + optional: true + + nice-napi@1.0.2: + resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} + os: ['!win32'] + + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + + node-gyp-build@4.6.0: + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} + hasBin: true + + node-gyp@10.2.0: + resolution: {integrity: sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + + node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.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-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'} + + npm-bundled@3.0.0: + resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-install-checks@6.1.0: + resolution: {integrity: sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.0: + resolution: {integrity: sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-packlist@8.0.2: + resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-registry-fetch@17.1.0: + resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + 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@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ordered-binary@1.5.1: + resolution: {integrity: sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + 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-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + 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@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-retry@6.2.0: + resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==} + engines: {node: '>=16.17'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + pacote@18.0.6: + resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + + 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-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + parse5-html-rewriting-stream@7.0.0: + resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} + + parse5-sax-parser@7.0.0: + resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + 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@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + 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@1.8.0: + resolution: {integrity: sha512-IjTrKseM404/UAWA8bBbL3Qp6O2wXkanuIE3seCxBH7ctRuvH1QRawy1N3nVDHGkdeZsjOsSe/8AQBL/VQCy2g==} + engines: {node: '>=16 || 14 >=14.17'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + 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'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + piscina@4.6.1: + resolution: {integrity: sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==} + + 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'} + + 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-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + 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.0.5: + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.0: + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + 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-selector-parser@6.0.11: + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + engines: {node: ^10 || ^12 || >=14} + + prettier@1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + qjobs@1.2.0: + resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} + engines: {node: '>=0.9'} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + 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.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + 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'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + 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==} + + regex-parser@2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + 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'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} + + resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + 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.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rollup@4.20.0: + resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rollup@4.21.1: + resolution: {integrity: sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + 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-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-loader@16.0.0: + resolution: {integrity: sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==} + 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.77.6: + resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.0.0: + resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} + engines: {node: '>= 12.13.0'} + + schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.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.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + + semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + + 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.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + 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'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + engines: {node: '>=14'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sigstore@2.3.1: + resolution: {integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + 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.2: + resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} + + socket.io-parser@4.2.2: + resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} + engines: {node: '>=10.0.0'} + + socket.io@4.6.1: + resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} + engines: {node: '>=10.0.0'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-loader@5.0.0: + resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.72.1 + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + 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'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + + 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'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + ssri@10.0.1: + resolution: {integrity: sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + 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'} + + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + + 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_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.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + 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'} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar@6.1.13: + resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + engines: {node: '>=10'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + 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.31.6: + resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} + engines: {node: '>=10'} + hasBin: true + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + 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.3.0: + resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + tuf-js@2.2.1: + resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==} + engines: {node: ^16.14.0 || >=18.0.0} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-assert@1.0.9: + resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@0.7.35: + resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + 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'} + + unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.0.11: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.0: + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@5.4.0: + resolution: {integrity: sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + void-elements@2.0.1: + resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} + engines: {node: '>=0.10.0'} + + watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + 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==} + + weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + + webpack-dev-middleware@7.3.0: + resolution: {integrity: sha512-xD2qnNew+F6KwOGZR7kWdbIou/ud7cVqLEXeK1q0nHcNsX/u7ul/fSdlOTX4ntSL5FNFy7ZJJXbf0piF591JYw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@5.0.4: + resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} + 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-subresource-integrity@5.1.0: + resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} + engines: {node: '>= 12'} + peerDependencies: + html-webpack-plugin: '>= 5.0.0-beta.1 < 6' + webpack: ^5.12.0 + peerDependenciesMeta: + html-webpack-plugin: + optional: true + + webpack@5.93.0: + resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} + 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'} + + 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 + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + winston-transport@4.5.0: + resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} + engines: {node: '>= 6.4.0'} + + winston@3.8.2: + resolution: {integrity: sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==} + engines: {node: '>= 12.0.0'} + + 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==} + + ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + 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.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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 + + 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==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zone.js@0.14.10: + resolution: {integrity: sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==} + +snapshots: + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular-devkit/architect@0.1802.1(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 18.2.1(chokidar@3.6.0) + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/build-angular@18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(@types/node@22.5.0)(chokidar@3.6.0)(karma@6.4.2)(ng-packagr@18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(tslib@2.6.2)(typescript@5.5.4))(typescript@5.5.4)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.1802.1(chokidar@3.6.0) + '@angular-devkit/build-webpack': 0.1802.1(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.93.0))(webpack@5.93.0(esbuild@0.23.0)) + '@angular-devkit/core': 18.2.1(chokidar@3.6.0) + '@angular/build': 18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(@types/node@22.5.0)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.41)(terser@5.31.6)(typescript@5.5.4) + '@angular/compiler-cli': 18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4) + '@babel/core': 7.25.2 + '@babel/generator': 7.25.0 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.25.2) + '@babel/preset-env': 7.25.3(@babel/core@7.25.2) + '@babel/runtime': 7.25.0 + '@discoveryjs/json-ext': 0.6.1 + '@ngtools/webpack': 18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(typescript@5.5.4)(webpack@5.93.0(esbuild@0.23.0)) + '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6)) + ansi-colors: 4.1.3 + autoprefixer: 10.4.20(postcss@8.4.41) + babel-loader: 9.1.3(@babel/core@7.25.2)(webpack@5.93.0(esbuild@0.23.0)) + browserslist: 4.21.10 + copy-webpack-plugin: 12.0.2(webpack@5.93.0(esbuild@0.23.0)) + critters: 0.0.24 + css-loader: 7.1.2(webpack@5.93.0(esbuild@0.23.0)) + esbuild-wasm: 0.23.0 + fast-glob: 3.3.2 + http-proxy-middleware: 3.0.0 + https-proxy-agent: 7.0.5 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + karma-source-map-support: 1.4.0 + less: 4.2.0 + less-loader: 12.2.0(less@4.2.0)(webpack@5.93.0(esbuild@0.23.0)) + license-webpack-plugin: 4.0.2(webpack@5.93.0(esbuild@0.23.0)) + loader-utils: 3.3.1 + magic-string: 0.30.11 + mini-css-extract-plugin: 2.9.0(webpack@5.93.0(esbuild@0.23.0)) + mrmime: 2.0.0 + open: 10.1.0 + ora: 5.4.1 + parse5-html-rewriting-stream: 7.0.0 + picomatch: 4.0.2 + piscina: 4.6.1 + postcss: 8.4.41 + postcss-loader: 8.1.1(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0(esbuild@0.23.0)) + resolve-url-loader: 5.0.0 + rxjs: 7.8.1 + sass: 1.77.6 + sass-loader: 16.0.0(sass@1.77.6)(webpack@5.93.0(esbuild@0.23.0)) + semver: 7.6.3 + source-map-loader: 5.0.0(webpack@5.93.0(esbuild@0.23.0)) + source-map-support: 0.5.21 + terser: 5.31.6 + tree-kill: 1.2.2 + tslib: 2.6.3 + typescript: 5.5.4 + vite: 5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6) + watchpack: 2.4.1 + webpack: 5.93.0(esbuild@0.23.0) + webpack-dev-middleware: 7.3.0(webpack@5.93.0) + webpack-dev-server: 5.0.4(webpack@5.93.0) + webpack-merge: 6.0.1 + webpack-subresource-integrity: 5.1.0(webpack@5.93.0(esbuild@0.23.0)) + optionalDependencies: + esbuild: 0.23.0 + karma: 6.4.2 + ng-packagr: 18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(tslib@2.6.2)(typescript@5.5.4) + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - '@types/node' + - bufferutil + - chokidar + - debug + - html-webpack-plugin + - lightningcss + - node-sass + - sass-embedded + - stylus + - sugarss + - supports-color + - uglify-js + - utf-8-validate + - webpack-cli + + '@angular-devkit/build-webpack@0.1802.1(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.93.0))(webpack@5.93.0(esbuild@0.23.0))': + dependencies: + '@angular-devkit/architect': 0.1802.1(chokidar@3.6.0) + rxjs: 7.8.1 + webpack: 5.93.0(esbuild@0.23.0) + webpack-dev-server: 5.0.4(webpack@5.93.0) + transitivePeerDependencies: + - chokidar + + '@angular-devkit/core@18.2.1(chokidar@3.6.0)': + 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: 3.6.0 + + '@angular-devkit/schematics@18.2.1(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 18.2.1(chokidar@3.6.0) + jsonc-parser: 3.3.1 + magic-string: 0.30.11 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))': + dependencies: + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + tslib: 2.6.2 + + '@angular/build@18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(@types/node@22.5.0)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.41)(terser@5.31.6)(typescript@5.5.4)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.1802.1(chokidar@3.6.0) + '@angular/compiler-cli': 18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) + '@inquirer/confirm': 3.1.22 + '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6)) + browserslist: 4.23.3 + critters: 0.0.24 + esbuild: 0.23.0 + fast-glob: 3.3.2 + https-proxy-agent: 7.0.5 + listr2: 8.2.4 + lmdb: 3.0.13 + magic-string: 0.30.11 + mrmime: 2.0.0 + parse5-html-rewriting-stream: 7.0.0 + picomatch: 4.0.2 + piscina: 4.6.1 + rollup: 4.20.0 + sass: 1.77.6 + semver: 7.6.3 + typescript: 5.5.4 + vite: 5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6) + watchpack: 2.4.1 + optionalDependencies: + less: 4.2.0 + postcss: 8.4.41 + transitivePeerDependencies: + - '@types/node' + - chokidar + - lightningcss + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + '@angular/cli@18.2.1(chokidar@3.6.0)': + dependencies: + '@angular-devkit/architect': 0.1802.1(chokidar@3.6.0) + '@angular-devkit/core': 18.2.1(chokidar@3.6.0) + '@angular-devkit/schematics': 18.2.1(chokidar@3.6.0) + '@inquirer/prompts': 5.3.8 + '@listr2/prompt-adapter-inquirer': 2.0.15(@inquirer/prompts@5.3.8) + '@schematics/angular': 18.2.1(chokidar@3.6.0) + '@yarnpkg/lockfile': 1.1.0 + ini: 4.1.3 + jsonc-parser: 3.3.1 + listr2: 8.2.4 + npm-package-arg: 11.0.3 + npm-pick-manifest: 9.1.0 + pacote: 18.0.6 + resolve: 1.22.8 + semver: 7.6.3 + symbol-observable: 4.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - chokidar + - supports-color + + '@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1)': + dependencies: + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + rxjs: 7.8.1 + tslib: 2.6.2 + + '@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4)': + dependencies: + '@angular/compiler': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + '@babel/core': 7.25.2 + '@jridgewell/sourcemap-codec': 1.4.15 + chokidar: 3.5.3 + convert-source-map: 1.9.0 + reflect-metadata: 0.2.2 + semver: 7.5.4 + tslib: 2.6.2 + typescript: 5.5.4 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))': + dependencies: + tslib: 2.6.2 + optionalDependencies: + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + + '@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)': + dependencies: + rxjs: 7.8.1 + tslib: 2.6.2 + zone.js: 0.14.10 + + '@angular/forms@18.2.1(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(rxjs@7.8.1)': + dependencies: + '@angular/common': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1) + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + '@angular/platform-browser': 18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + rxjs: 7.8.1 + tslib: 2.6.2 + + '@angular/platform-browser-dynamic@18.2.1(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))': + dependencies: + '@angular/common': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1) + '@angular/compiler': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + '@angular/platform-browser': 18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + tslib: 2.6.2 + + '@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))': + dependencies: + '@angular/common': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1) + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + tslib: 2.6.2 + optionalDependencies: + '@angular/animations': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + + '@angular/router@18.2.1(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(rxjs@7.8.1)': + dependencies: + '@angular/common': 18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1) + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + '@angular/platform-browser': 18.2.1(@angular/animations@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)) + rxjs: 7.8.1 + tslib: 2.6.2 + + '@babel/code-frame@7.22.10': + dependencies: + '@babel/highlight': 7.22.10 + chalk: 2.4.2 + + '@babel/code-frame@7.22.5': + dependencies: + '@babel/highlight': 7.22.5 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.0 + + '@babel/compat-data@7.22.9': {} + + '@babel/compat-data@7.25.4': {} + + '@babel/core@7.22.5': + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.7 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.22.10': + dependencies: + '@babel/types': 7.22.10 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + + '@babel/generator@7.22.7': + dependencies: + '@babel/types': 7.22.10 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + + '@babel/generator@7.25.0': + dependencies: + '@babel/types': 7.25.4 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/generator@7.25.5': + dependencies: + '@babel/types': 7.25.4 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.25.4 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + dependencies: + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-environment-visitor@7.22.5': {} + + '@babel/helper-function-name@7.22.5': + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.10 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.22.10 + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.22.5': + dependencies: + '@babel/types': 7.22.10 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.22.5': + dependencies: + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.25.4 + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.22.10 + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.22.10 + + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.25.4 + + '@babel/helper-string-parser@7.22.5': {} + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.22.5': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.22.5': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helper-wrap-function@7.25.0': + dependencies: + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.22.5': + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.25.0': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 + + '@babel/highlight@7.22.10': + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/highlight@7.22.5': + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + + '@babel/parser@7.22.10': + dependencies: + '@babel/types': 7.22.10 + + '@babel/parser@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/parser@7.25.4': + dependencies: + '@babel/types': 7.25.4 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-async-generator-functions@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 + + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/preset-env@7.25.3(@babel/core@7.25.2)': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.22.10 + esutils: 2.0.3 + + '@babel/regjsgen@0.8.0': {} + + '@babel/runtime@7.25.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.22.5': + dependencies: + '@babel/code-frame': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 + + '@babel/traverse@7.22.10': + dependencies: + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.22.5': + dependencies: + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.25.4': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.5 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.22.10': + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + + '@babel/types@7.22.5': + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + + '@babel/types@7.25.4': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@colors/colors@1.5.0': {} + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@discoveryjs/json-ext@0.6.1': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.23.0': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.23.0': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.23.0': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.23.0': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.23.0': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.23.0': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.23.0': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.23.0': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.23.0': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.23.0': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.23.0': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.23.0': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.23.0': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.23.0': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.23.0': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.23.0': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.23.0': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.23.0': + optional: true + + '@esbuild/openbsd-arm64@0.23.0': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.23.0': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.23.0': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.23.0': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.23.0': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.23.0': + optional: true + + '@inquirer/checkbox@2.4.7': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/figures': 1.0.5 + '@inquirer/type': 1.5.2 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@3.1.22': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + + '@inquirer/core@9.0.10': + dependencies: + '@inquirer/figures': 1.0.5 + '@inquirer/type': 1.5.2 + '@types/mute-stream': 0.0.4 + '@types/node': 22.5.0 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/editor@2.1.22': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + external-editor: 3.1.0 + + '@inquirer/expand@2.1.22': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.5': {} + + '@inquirer/input@2.2.9': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + + '@inquirer/number@1.0.10': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + + '@inquirer/password@2.1.22': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + ansi-escapes: 4.3.2 + + '@inquirer/prompts@5.3.8': + dependencies: + '@inquirer/checkbox': 2.4.7 + '@inquirer/confirm': 3.1.22 + '@inquirer/editor': 2.1.22 + '@inquirer/expand': 2.1.22 + '@inquirer/input': 2.2.9 + '@inquirer/number': 1.0.10 + '@inquirer/password': 2.1.22 + '@inquirer/rawlist': 2.2.4 + '@inquirer/search': 1.0.7 + '@inquirer/select': 2.4.7 + + '@inquirer/rawlist@2.2.4': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/type': 1.5.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/search@1.0.7': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/figures': 1.0.5 + '@inquirer/type': 1.5.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/select@2.4.7': + dependencies: + '@inquirer/core': 9.0.10 + '@inquirer/figures': 1.0.5 + '@inquirer/type': 1.5.2 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@1.5.2': + dependencies: + mute-stream: 1.0.0 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.2': + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.17 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.0': {} + + '@jridgewell/set-array@1.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.3': + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + + '@jridgewell/sourcemap-codec@1.4.14': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.17': + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jsonjoy.com/base64@1.1.2(tslib@2.6.3)': + dependencies: + tslib: 2.6.3 + + '@jsonjoy.com/json-pack@1.1.0(tslib@2.6.3)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.6.3) + '@jsonjoy.com/util': 1.3.0(tslib@2.6.3) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.6.3) + tslib: 2.6.3 + + '@jsonjoy.com/util@1.3.0(tslib@2.6.3)': + dependencies: + tslib: 2.6.3 + + '@leichtgewicht/ip-codec@2.0.4': {} + + '@listr2/prompt-adapter-inquirer@2.0.15(@inquirer/prompts@5.3.8)': + dependencies: + '@inquirer/prompts': 5.3.8 + '@inquirer/type': 1.5.2 + + '@lmdb/lmdb-darwin-arm64@3.0.13': + optional: true + + '@lmdb/lmdb-darwin-x64@3.0.13': + optional: true + + '@lmdb/lmdb-linux-arm64@3.0.13': + optional: true + + '@lmdb/lmdb-linux-arm@3.0.13': + optional: true + + '@lmdb/lmdb-linux-x64@3.0.13': + optional: true + + '@lmdb/lmdb-win32-x64@3.0.13': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + + '@ngtools/webpack@18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(typescript@5.5.4)(webpack@5.93.0(esbuild@0.23.0))': + dependencies: + '@angular/compiler-cli': 18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4) + typescript: 5.5.4 + webpack: 5.93.0(esbuild@0.23.0) + + '@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1)': + dependencies: + google-protobuf: 3.21.2 + rxjs: 7.8.1 + tslib: 2.6.2 + + '@ngx-grpc/core@3.1.2(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1)': + dependencies: + '@angular/core': 18.2.1(rxjs@7.8.1)(zone.js@0.14.10) + '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) + rxjs: 7.8.1 + tslib: 2.6.2 + + '@ngx-grpc/protoc-gen-ng@3.1.2': + dependencies: + google-protobuf: 3.21.2 + prettier: 1.19.1 + tslib: 2.6.2 + winston: 3.8.2 + + '@ngx-grpc/well-known-types@3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2)': + dependencies: + '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) + google-protobuf: 3.21.2 + tslib: 2.6.2 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@npmcli/agent@2.2.2': + dependencies: + agent-base: 7.1.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 10.4.3 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + '@npmcli/fs@3.1.0': + dependencies: + semver: 7.6.3 + + '@npmcli/git@5.0.8': + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + + '@npmcli/installed-package-contents@2.0.2': + dependencies: + npm-bundled: 3.0.0 + npm-normalize-package-bin: 3.0.0 + + '@npmcli/node-gyp@3.0.0': {} + + '@npmcli/package-json@5.2.0': + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.2.3 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.0 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@7.0.2': + dependencies: + which: 4.0.0 + + '@npmcli/redact@2.0.1': {} + + '@npmcli/run-script@8.1.0': + dependencies: + '@npmcli/node-gyp': 3.0.0 + '@npmcli/package-json': 5.2.0 + '@npmcli/promise-spawn': 7.0.2 + node-gyp: 10.2.0 + proc-log: 4.2.0 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/plugin-json@6.1.0(rollup@4.21.1)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.21.1) + optionalDependencies: + rollup: 4.21.1 + + '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.1)': + dependencies: + '@rollup/pluginutils': 5.0.2(rollup@4.21.1) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 4.21.1 + + '@rollup/pluginutils@5.0.2(rollup@4.21.1)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.21.1 + + '@rollup/pluginutils@5.1.0(rollup@4.21.1)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.21.1 + + '@rollup/rollup-android-arm-eabi@4.20.0': + optional: true + + '@rollup/rollup-android-arm-eabi@4.21.1': + optional: true + + '@rollup/rollup-android-arm64@4.20.0': + optional: true + + '@rollup/rollup-android-arm64@4.21.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.20.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.21.1': + optional: true + + '@rollup/rollup-darwin-x64@4.20.0': + optional: true + + '@rollup/rollup-darwin-x64@4.21.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.21.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.21.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.21.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.20.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.21.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.20.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.20.0': + optional: true - /@npmcli/node-gyp@3.0.0: - resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@rollup/rollup-win32-arm64-msvc@4.21.1': + optional: true - /@npmcli/promise-spawn@6.0.2: - resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - which: 3.0.0 - dev: true + '@rollup/rollup-win32-ia32-msvc@4.20.0': + optional: true - /@npmcli/run-script@6.0.0: - resolution: {integrity: sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/node-gyp': 3.0.0 - '@npmcli/promise-spawn': 6.0.2 - node-gyp: 9.3.1 - read-package-json-fast: 3.0.2 - which: 3.0.0 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true + '@rollup/rollup-win32-ia32-msvc@4.21.1': + optional: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true - /@rollup/plugin-json@6.0.0(rollup@3.25.3): - resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/rollup-win32-x64-msvc@4.21.1': + optional: true + + '@rollup/wasm-node@4.21.1': dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.25.3) - rollup: 3.25.3 - dev: true + '@types/estree': 1.0.5 + optionalDependencies: + fsevents: 2.3.3 - /@rollup/plugin-node-resolve@15.0.1(rollup@3.25.3): - resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@schematics/angular@18.2.1(chokidar@3.6.0)': dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.25.3) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.2 - rollup: 3.25.3 - dev: true + '@angular-devkit/core': 18.2.1(chokidar@3.6.0) + '@angular-devkit/schematics': 18.2.1(chokidar@3.6.0) + jsonc-parser: 3.3.1 + transitivePeerDependencies: + - chokidar - /@rollup/pluginutils@5.0.2(rollup@3.25.3): - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@sigstore/bundle@2.3.2': dependencies: - '@types/estree': 1.0.0 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 3.25.3 - dev: true + '@sigstore/protobuf-specs': 0.3.2 + + '@sigstore/core@1.1.0': {} - /@schematics/angular@16.2.0: - resolution: {integrity: sha512-Ib0/ZCkjWt7a5p3209JVwEWwf41v03K3ylvlxLIEo1ZGijAZAlrBj4GrA5YQ+TmPm2hRyt+owss7x91/x+i0Gw==} - engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@sigstore/protobuf-specs@0.3.2': {} + + '@sigstore/sign@2.3.2': dependencies: - '@angular-devkit/core': 16.2.0(chokidar@3.5.3) - '@angular-devkit/schematics': 16.2.0 - jsonc-parser: 3.2.0 + '@sigstore/bundle': 2.3.2 + '@sigstore/core': 1.1.0 + '@sigstore/protobuf-specs': 0.3.2 + make-fetch-happen: 13.0.1 + proc-log: 4.2.0 + promise-retry: 2.0.1 transitivePeerDependencies: - - chokidar - dev: true + - supports-color - /@sigstore/protobuf-specs@0.1.0: - resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@sigstore/tuf@2.3.4': + dependencies: + '@sigstore/protobuf-specs': 0.3.2 + tuf-js: 2.2.1 + transitivePeerDependencies: + - supports-color - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - dev: true + '@sigstore/verify@1.2.1': + dependencies: + '@sigstore/bundle': 2.3.2 + '@sigstore/core': 1.1.0 + '@sigstore/protobuf-specs': 0.3.2 - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true + '@sindresorhus/merge-streams@2.3.0': {} - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + '@socket.io/component-emitter@3.1.0': {} - /@tufjs/canonical-json@1.0.0: - resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@tufjs/canonical-json@2.0.0': {} - /@tufjs/models@1.0.4: - resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@tufjs/models@2.0.1': dependencies: - '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.0 - dev: true + '@tufjs/canonical-json': 2.0.0 + minimatch: 9.0.5 - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + '@types/body-parser@1.19.2': dependencies: '@types/connect': 3.4.35 '@types/node': 18.15.11 - dev: true - /@types/bonjour@3.5.10: - resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + '@types/bonjour@3.5.13': dependencies: '@types/node': 18.15.11 - dev: true - /@types/connect-history-api-fallback@1.3.5: - resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.17.33 '@types/node': 18.15.11 - dev: true - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + '@types/connect@3.4.35': dependencies: '@types/node': 18.15.11 - dev: true - /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - dev: true + '@types/cookie@0.4.1': {} - /@types/cors@2.8.13: - resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} + '@types/cors@2.8.13': dependencies: '@types/node': 18.15.11 - dev: true - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + '@types/eslint-scope@3.7.4': dependencies: '@types/eslint': 8.37.0 - '@types/estree': 1.0.0 - dev: true + '@types/estree': 1.0.5 - /@types/eslint@8.37.0: - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} + '@types/eslint@8.37.0': dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.5 '@types/json-schema': 7.0.11 - dev: true - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - dev: true + '@types/estree@1.0.5': {} - /@types/express-serve-static-core@4.17.33: - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + '@types/express-serve-static-core@4.17.33': dependencies: '@types/node': 18.15.11 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - dev: true - /@types/express@4.17.17: - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.2 '@types/express-serve-static-core': 4.17.33 '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 - dev: true + '@types/serve-static': 1.15.7 - /@types/google-protobuf@3.15.6: - resolution: {integrity: sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==} - dev: true + '@types/google-protobuf@3.15.6': {} - /@types/http-proxy@1.17.10: - resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} + '@types/http-errors@2.0.4': {} + + '@types/http-proxy@1.17.10': dependencies: '@types/node': 18.15.11 - dev: true - /@types/jasmine@4.3.5: - resolution: {integrity: sha512-9YHUdvuNDDRJYXZwHqSsO72Ok0vmqoJbNn73ttyITQp/VA60SarnZ+MPLD37rJAhVoKp+9BWOvJP5tHIRfZylQ==} - dev: true + '@types/jasmine@4.3.5': {} - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - dev: true + '@types/json-schema@7.0.11': {} - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - dev: true + '@types/mime@1.3.5': {} - /@types/node@18.15.11: - resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - dev: true + '@types/mute-stream@0.0.4': + dependencies: + '@types/node': 22.5.0 - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 18.15.11 - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true + '@types/node@18.15.11': {} - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true + '@types/node@22.5.0': + dependencies: + undici-types: 6.19.8 + + '@types/qs@6.9.7': {} + + '@types/range-parser@1.2.4': {} + + '@types/resolve@1.20.2': {} - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: true + '@types/retry@0.12.2': {} - /@types/serve-index@1.9.1: - resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + '@types/send@0.17.4': dependencies: - '@types/express': 4.17.17 - dev: true + '@types/mime': 1.3.5 + '@types/node': 18.15.11 + + '@types/serve-index@1.9.4': + dependencies: + '@types/express': 4.17.21 - /@types/serve-static@1.15.1: - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} + '@types/serve-static@1.15.7': dependencies: - '@types/mime': 3.0.1 + '@types/http-errors': 2.0.4 '@types/node': 18.15.11 - dev: true + '@types/send': 0.17.4 - /@types/sockjs@0.3.33: - resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} + '@types/sockjs@0.3.36': dependencies: '@types/node': 18.15.11 - dev: true - /@types/triple-beam@1.3.2: - resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} - dev: true + '@types/triple-beam@1.3.2': {} - /@types/ws@8.5.5: - resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + '@types/wrap-ansi@3.0.0': {} + + '@types/ws@8.5.12': dependencies: '@types/node': 18.15.11 - dev: true - /@vitejs/plugin-basic-ssl@1.0.1(vite@4.4.7): - resolution: {integrity: sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==} - engines: {node: '>=14.6.0'} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 + '@vitejs/plugin-basic-ssl@1.1.0(vite@5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6))': dependencies: - vite: 4.4.7(less@4.1.3)(sass@1.64.1)(terser@5.19.2) - dev: true + vite: 5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6) - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true + '@webassemblyjs/helper-api-error@1.11.6': {} - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: true + '@webassemblyjs/helper-buffer@1.12.1': {} - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.11.6': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + '@webassemblyjs/helper-wasm-section@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - dev: true + '@webassemblyjs/wasm-gen': 1.12.1 - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - dev: true - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true + '@webassemblyjs/utf8@1.11.6': {} - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + '@webassemblyjs/wasm-edit@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - dev: true + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + '@webassemblyjs/wasm-gen@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + '@webassemblyjs/wasm-opt@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - dev: true + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + '@webassemblyjs/wasm-parser@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + '@webassemblyjs/wast-printer@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - dev: true - - /@wessberg/ts-evaluator@0.0.27(typescript@5.1.6): - resolution: {integrity: sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==} - engines: {node: '>=10.1.0'} - deprecated: this package has been renamed to ts-evaluator. Please install ts-evaluator instead - peerDependencies: - typescript: '>=3.2.x || >= 4.x' - dependencies: - chalk: 4.1.2 - jsdom: 16.7.0 - object-path: 0.11.8 - tslib: 2.6.2 - typescript: 5.1.6 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + '@xtuc/ieee754@1.2.0': {} - /@yarnpkg/lockfile@1.1.0: - resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - dev: true + '@xtuc/long@4.2.2': {} - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true + '@yarnpkg/lockfile@1.1.0': {} - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true + abbrev@2.0.0: {} - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - /acorn-import-assertions@1.9.0(acorn@8.8.2): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 + acorn-import-attributes@1.9.5(acorn@8.8.2): dependencies: acorn: 8.8.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.8.2: {} - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} + adjust-sourcemap-loader@4.0.0: dependencies: loader-utils: 2.0.4 regex-parser: 2.2.11 - dev: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /agentkeepalive@4.3.0: - resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} - engines: {node: '>= 8.0.0'} + agent-base@7.1.1: dependencies: debug: 4.3.4 - depd: 2.0.0 - humanize-ms: 1.2.1 transitivePeerDependencies: - supports-color - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: ajv: 8.12.0 - dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - dev: true - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 + ajv-keywords@5.1.0(ajv@8.12.0): dependencies: ajv: 8.12.0 fast-deep-equal: 3.1.3 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + 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 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-html-community@0.0.8: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true - - /are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - dev: true - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true - - /array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: true - - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true + argparse@2.0.1: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + array-flatten@1.1.1: {} - /autoprefixer@10.4.14(postcss@8.4.24): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001473 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.24 - postcss-value-parser: 4.2.0 - dev: true + async@3.2.4: {} - /autoprefixer@10.4.14(postcss@8.4.27): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.20(postcss@8.4.41): dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001473 - fraction.js: 4.2.0 + browserslist: 4.23.3 + caniuse-lite: 1.0.30001653 + fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.27 + picocolors: 1.0.1 + postcss: 8.4.41 postcss-value-parser: 4.2.0 - dev: true - /babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2): - resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' + babel-loader@9.1.3(@babel/core@7.25.2)(webpack@5.93.0(esbuild@0.23.0)): dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.0.0 - webpack: 5.88.2(esbuild@0.18.17) - dev: true - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true + webpack: 5.93.0(esbuild@0.23.0) - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.9): - resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.22.9 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.9): - resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): dependencies: - '@babel/core': 7.22.9 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) - core-js-compat: 3.31.0 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.9): - resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): dependencies: - '@babel/core': 7.22.9 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true + base64id@2.0.0: {} - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true + batch@0.6.1: {} - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true + big.js@5.2.2: {} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.1: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -3246,11 +6983,8 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -3266,192 +7000,102 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} + bonjour-service@1.2.1: dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 - dev: true - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true + boolbase@1.0.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.21.10: dependencies: caniuse-lite: 1.0.30001521 electron-to-chromium: 1.4.496 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) - dev: true - /browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001473 - electron-to-chromium: 1.4.348 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) - dev: true + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + builtin-modules@3.3.0: {} - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + builtins@5.0.1: dependencies: - semver: 7.5.4 - dev: true + semver: 7.6.3 - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.0.0: {} - /cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@npmcli/fs': 2.1.2 - '@npmcli/move-file': 2.0.1 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 8.1.0 - infer-owner: 1.0.4 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 9.0.1 - tar: 6.1.13 - unique-filename: 2.0.1 - transitivePeerDependencies: - - bluebird - dev: true + bytes@3.1.2: {} - /cacache@17.1.3: - resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + cacache@18.0.4: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.1 - glob: 10.2.3 - lru-cache: 7.18.3 - minipass: 5.0.0 - minipass-collect: 1.0.2 + 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: 4.0.0 ssri: 10.0.1 - tar: 6.1.13 + tar: 6.2.1 unique-filename: 3.0.0 - dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.2: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /caniuse-lite@1.0.30001473: - resolution: {integrity: sha512-ewDad7+D2vlyy+E4UJuVfiBsU69IL+8oVmTuZnH5Q6CIUbxNfI50uVpRHbUPDD6SUaN2o0Lh4DhTrvLG/Tn1yg==} - dev: true + caniuse-lite@1.0.30001521: {} - /caniuse-lite@1.0.30001521: - resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==} - dev: true + caniuse-lite@1.0.30001653: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -3462,156 +7106,108 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 - dev: true - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + 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 - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true + chownr@2.0.0: {} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + chrome-trace-event@1.0.3: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-spinners@2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} - engines: {node: '>=6'} - dev: true + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cli-spinners@2.7.0: {} - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@4.1.0: {} + + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-string@1.9.1: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: true - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: true - - /color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + color@3.2.1: dependencies: color-convert: 1.9.3 color-string: 1.9.1 - dev: true - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: true + colorette@2.0.19: {} - /colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + colorette@2.0.20: {} + + colorspace@1.1.4: dependencies: color: 3.2.1 text-hex: 1.0.0 - dev: true - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true - /commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} - dev: true + commander@12.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true + common-path-prefix@3.0.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + commondir@1.0.1: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + compressible@2.0.18: dependencies: mime-db: 1.52.0 - dev: true - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} + compression@1.7.4: dependencies: accepts: 1.3.8 bytes: 3.0.0 @@ -3622,20 +7218,12 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true + connect-history-api-fallback@2.0.0: {} - /connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} + connect@3.7.0: dependencies: debug: 2.6.9 finalhandler: 1.1.2 @@ -3643,406 +7231,205 @@ packages: utils-merge: 1.0.1 transitivePeerDependencies: - supports-color - dev: true - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true + convert-source-map@1.9.0: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + cookie-signature@1.0.6: {} - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.4.2: {} - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.5.0: {} - /copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + copy-anything@2.0.6: dependencies: is-what: 3.14.1 - dev: true - /copy-webpack-plugin@11.0.0(webpack@5.88.2): - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 + copy-webpack-plugin@12.0.2(webpack@5.93.0(esbuild@0.23.0)): dependencies: - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob-parent: 6.0.2 - globby: 13.1.3 + globby: 14.0.2 normalize-path: 3.0.0 - schema-utils: 4.0.0 - serialize-javascript: 6.0.1 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + schema-utils: 4.2.0 + serialize-javascript: 6.0.2 + webpack: 5.93.0(esbuild@0.23.0) - /core-js-compat@3.31.0: - resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} + core-js-compat@3.38.1: dependencies: - browserslist: 4.21.5 - dev: true + browserslist: 4.23.3 - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 - dev: true - /cosmiconfig@8.2.0: - resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} - engines: {node: '>=14'} + cosmiconfig@9.0.0(typescript@5.5.4): dependencies: + env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 - path-type: 4.0.0 - dev: true + optionalDependencies: + typescript: 5.5.4 - /critters@0.0.20: - resolution: {integrity: sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==} + critters@0.0.24: dependencies: chalk: 4.1.2 css-select: 5.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 htmlparser2: 8.0.2 - postcss: 8.4.27 - pretty-bytes: 5.6.0 - dev: true + postcss: 8.4.41 + postcss-media-query-parser: 0.2.3 - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /css-loader@6.8.1(webpack@5.88.2): - resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + css-loader@7.1.2(webpack@5.93.0(esbuild@0.23.0)): dependencies: - icss-utils: 5.1.0(postcss@8.4.27) - postcss: 8.4.27 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.27) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.27) - postcss-modules-scope: 3.0.0(postcss@8.4.27) - postcss-modules-values: 4.0.0(postcss@8.4.27) + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.41) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.41) + postcss-modules-scope: 3.2.0(postcss@8.4.41) + postcss-modules-values: 4.0.0(postcss@8.4.41) postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + semver: 7.6.3 + optionalDependencies: + webpack: 5.93.0(esbuild@0.23.0) - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.1.0: dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.1.0 nth-check: 2.1.1 - dev: true - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - /cuint@0.2.2: - resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==} - dev: true + css-what@6.1.0: {} - /custom-event@1.0.1: - resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} - dev: true + cssesc@3.0.0: {} - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true + custom-event@1.0.1: {} - /date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} - engines: {node: '>=4.0'} - dev: true + date-format@4.0.14: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - requiresBuild: true - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true optional: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - dev: true - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true + deepmerge@4.3.1: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + default-browser-id@5.0.0: {} - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + default-gateway@6.0.3: dependencies: execa: 5.1.1 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true + define-lazy-prop@3.0.0: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@1.1.2: {} - /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dev: true + depd@2.0.0: {} - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + dependency-graph@1.0.0: {} - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true + destroy@1.2.0: {} - /di@0.0.1: - resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} - dev: true + detect-libc@2.0.3: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true + detect-node@2.1.0: {} - /dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: true + di@0.0.1: {} - /dns-packet@5.5.0: - resolution: {integrity: sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==} - engines: {node: '>=6'} + dns-packet@5.5.0: dependencies: '@leichtgewicht/ip-codec': 2.0.4 - dev: true - /dom-serialize@2.2.1: - resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} + dom-serialize@2.2.1: dependencies: custom-event: 1.0.1 ent: 2.2.0 extend: 3.0.2 void-elements: 2.0.1 - dev: true - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true - - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 - dev: true + domelementtype@2.3.0: {} - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.1.0: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /electron-to-chromium@1.4.348: - resolution: {integrity: sha512-gM7TdwuG3amns/1rlgxMbeeyNoBFPa+4Uu0c7FeROWh4qWmvSOnvcslKmWy51ggLKZ2n/F/4i2HJ+PVNxH9uCQ==} - dev: true + electron-to-chromium@1.4.496: {} - /electron-to-chromium@1.4.496: - resolution: {integrity: sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==} - dev: true + electron-to-chromium@1.5.13: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@10.4.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@8.0.0: {} - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true + emoji-regex@9.2.2: {} - /enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - dev: true + emojis-list@3.0.0: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + enabled@2.0.0: {} - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true + encodeurl@1.0.2: {} + + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - dev: true optional: true - /engine.io-parser@5.0.6: - resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} - engines: {node: '>=10.0.0'} - dev: true + engine.io-parser@5.0.6: {} - /engine.io@6.4.1: - resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} - engines: {node: '>=10.0.0'} + engine.io@6.4.1: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.13 @@ -4058,213 +7445,122 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /ent@2.2.0: - resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} - dev: true + ent@2.2.0: {} - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + entities@4.5.0: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true + env-paths@2.2.1: {} - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true + environment@1.1.0: {} - /errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - requiresBuild: true + err-code@2.0.3: {} + + errno@0.1.8: dependencies: prr: 1.0.1 - dev: true optional: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - - /es-module-lexer@1.2.1: - resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} - dev: true - - /esbuild-wasm@0.18.17: - resolution: {integrity: sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==} - engines: {node: '>=12'} - hasBin: true - dev: true - - /esbuild-wasm@0.19.2: - resolution: {integrity: sha512-ak2XIIJKby+Uo3Iqh8wtw4pn2uZcnfLgtcmBHIgkShpun5ZIJsFigWXp7uLt7gXk3QAOCMmv0TSsIxD5qdn+Vw==} - engines: {node: '>=12'} - hasBin: true - dev: true - - /esbuild@0.18.17: - resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.17 - '@esbuild/android-arm64': 0.18.17 - '@esbuild/android-x64': 0.18.17 - '@esbuild/darwin-arm64': 0.18.17 - '@esbuild/darwin-x64': 0.18.17 - '@esbuild/freebsd-arm64': 0.18.17 - '@esbuild/freebsd-x64': 0.18.17 - '@esbuild/linux-arm': 0.18.17 - '@esbuild/linux-arm64': 0.18.17 - '@esbuild/linux-ia32': 0.18.17 - '@esbuild/linux-loong64': 0.18.17 - '@esbuild/linux-mips64el': 0.18.17 - '@esbuild/linux-ppc64': 0.18.17 - '@esbuild/linux-riscv64': 0.18.17 - '@esbuild/linux-s390x': 0.18.17 - '@esbuild/linux-x64': 0.18.17 - '@esbuild/netbsd-x64': 0.18.17 - '@esbuild/openbsd-x64': 0.18.17 - '@esbuild/sunos-x64': 0.18.17 - '@esbuild/win32-arm64': 0.18.17 - '@esbuild/win32-ia32': 0.18.17 - '@esbuild/win32-x64': 0.18.17 - dev: true - - /esbuild@0.19.2: - resolution: {integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.19.2 - '@esbuild/android-arm64': 0.19.2 - '@esbuild/android-x64': 0.19.2 - '@esbuild/darwin-arm64': 0.19.2 - '@esbuild/darwin-x64': 0.19.2 - '@esbuild/freebsd-arm64': 0.19.2 - '@esbuild/freebsd-x64': 0.19.2 - '@esbuild/linux-arm': 0.19.2 - '@esbuild/linux-arm64': 0.19.2 - '@esbuild/linux-ia32': 0.19.2 - '@esbuild/linux-loong64': 0.19.2 - '@esbuild/linux-mips64el': 0.19.2 - '@esbuild/linux-ppc64': 0.19.2 - '@esbuild/linux-riscv64': 0.19.2 - '@esbuild/linux-s390x': 0.19.2 - '@esbuild/linux-x64': 0.19.2 - '@esbuild/netbsd-x64': 0.19.2 - '@esbuild/openbsd-x64': 0.19.2 - '@esbuild/sunos-x64': 0.19.2 - '@esbuild/win32-arm64': 0.19.2 - '@esbuild/win32-ia32': 0.19.2 - '@esbuild/win32-x64': 0.19.2 - dev: true - optional: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + es-module-lexer@1.2.1: {} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: true + esbuild-wasm@0.23.0: {} - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.23.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.0 + '@esbuild/android-arm': 0.23.0 + '@esbuild/android-arm64': 0.23.0 + '@esbuild/android-x64': 0.23.0 + '@esbuild/darwin-arm64': 0.23.0 + '@esbuild/darwin-x64': 0.23.0 + '@esbuild/freebsd-arm64': 0.23.0 + '@esbuild/freebsd-x64': 0.23.0 + '@esbuild/linux-arm': 0.23.0 + '@esbuild/linux-arm64': 0.23.0 + '@esbuild/linux-ia32': 0.23.0 + '@esbuild/linux-loong64': 0.23.0 + '@esbuild/linux-mips64el': 0.23.0 + '@esbuild/linux-ppc64': 0.23.0 + '@esbuild/linux-riscv64': 0.23.0 + '@esbuild/linux-s390x': 0.23.0 + '@esbuild/linux-x64': 0.23.0 + '@esbuild/netbsd-x64': 0.23.0 + '@esbuild/openbsd-arm64': 0.23.0 + '@esbuild/openbsd-x64': 0.23.0 + '@esbuild/sunos-x64': 0.23.0 + '@esbuild/win32-arm64': 0.23.0 + '@esbuild/win32-ia32': 0.23.0 + '@esbuild/win32-x64': 0.23.0 + + escalade@3.1.1: {} + + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /eventemitter-asyncresource@1.0.0: - resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==} - dev: true + eventemitter3@4.0.7: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true + eventemitter3@5.0.1: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + events@3.3.0: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4275,11 +7571,10 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} + exponential-backoff@3.1.1: {} + + express@4.18.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -4314,85 +7609,44 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true + extend@3.0.2: {} - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: 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.5 - dev: true - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - 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.5 - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-uri@3.0.1: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - dev: true - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} + faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 - dev: true - - /fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true + fecha@4.2.3: {} - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} + finalhandler@1.1.2: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -4403,11 +7657,8 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.2.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -4418,728 +7669,385 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 - dev: true - /find-cache-dir@4.0.0: - resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} - engines: {node: '>=14.16'} + find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /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@6.3.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 - dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flat@5.0.2: {} - /fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - dev: true + flatted@3.2.7: {} - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true + fn.name@1.1.0: {} - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + follow-redirects@1.15.2(debug@4.3.4): + optionalDependencies: + debug: 4.3.4 + + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.0.2 - dev: true - - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true + fraction.js@4.3.7: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - dev: true - /fs-minipass@3.0.1: - resolution: {integrity: sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs-minipass@3.0.1: dependencies: minipass: 4.2.5 - dev: true - /fs-monkey@1.0.3: - resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} - dev: true + fs.realpath@1.0.0: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fsevents@2.3.2: + optional: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.1: {} - /gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true + function-bind@1.1.2: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + get-east-asian-width@1.2.0: {} + + get-intrinsic@1.2.0: dependencies: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 - dev: true - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@10.2.3: - resolution: {integrity: sha512-Kb4rfmBVE3eQTAimgmeqc2LwSnN0wIOkkUL6HmxEFxNJ4fHghYHVbFba/HcGcRjE6s9KoMNK3rSOwkL4PioZjg==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.2.3: dependencies: foreground-child: 3.1.1 jackspeak: 2.2.0 minimatch: 9.0.0 minipass: 5.0.0 path-scurry: 1.8.0 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@10.4.5: 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 - dev: true + foreground-child: 3.1.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.6 + minimatch: 3.1.2 once: 1.4.0 - dev: true - - /glob@9.3.4: - resolution: {integrity: sha512-qaSc49hojMOv1EPM4EuyITjDSgSKI0rthoHnvE81tcOi1SCVndHko7auqxdQ14eiQG2NDBJBE86+2xIrbIvrbA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - fs.realpath: 1.0.0 - minimatch: 8.0.2 - minipass: 4.2.5 - path-scurry: 1.8.0 - dev: true + path-is-absolute: 1.0.1 - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globby@13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@14.0.2: dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.1 + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /google-protobuf@3.21.2: - resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /guess-parser@0.4.22(typescript@5.1.6): - resolution: {integrity: sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==} - peerDependencies: - typescript: '>=3.7.5' - dependencies: - '@wessberg/ts-evaluator': 0.0.27(typescript@5.1.6) - typescript: 5.1.6 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true + google-protobuf@3.21.2: {} - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true + graceful-fs@4.2.11: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + handle-thing@2.0.1: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@3.0.0: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-flag@4.0.0: {} - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true + has-symbols@1.0.3: {} - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + has@1.0.3: dependencies: function-bind: 1.1.1 - dev: true - /hdr-histogram-js@2.0.3: - resolution: {integrity: sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==} + hasown@2.0.2: dependencies: - '@assemblyscript/loader': 0.10.1 - base64-js: 1.5.1 - pako: 1.0.11 - dev: true + function-bind: 1.1.2 - /hdr-histogram-percentiles-obj@3.0.0: - resolution: {integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==} - dev: true - - /hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hosted-git-info@7.0.2: dependencies: - lru-cache: 7.18.3 - dev: true + lru-cache: 10.4.3 - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + hpack.js@2.1.6: dependencies: inherits: 2.0.4 obuf: 1.1.2 readable-stream: 2.3.8 wbuf: 1.7.3 - dev: true - - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - /html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - dev: true + html-entities@2.5.2: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.1.0 entities: 4.5.0 - dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.1.1: {} - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true + http-deceiver@1.2.7: {} - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} + http-errors@1.6.3: dependencies: depd: 1.1.2 inherits: 2.0.3 setprototypeof: 1.1.0 statuses: 1.5.0 - dev: true - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + 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 - dev: true - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true + http-parser-js@0.5.8: {} - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} + http-proxy-agent@7.0.2: dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + http-proxy-middleware@2.0.6(@types/express@4.17.21): dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4 + '@types/http-proxy': 1.17.10 + http-proxy: 1.18.1(debug@4.3.4) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + optionalDependencies: + '@types/express': 4.17.21 transitivePeerDependencies: - - supports-color - dev: true + - debug - /http-proxy-middleware@2.0.6(@types/express@4.17.17): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true + http-proxy-middleware@3.0.0: dependencies: - '@types/express': 4.17.17 '@types/http-proxy': 1.17.10 - http-proxy: 1.18.1 + debug: 4.3.4 + http-proxy: 1.18.1(debug@4.3.4) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.5 transitivePeerDependencies: - - debug - dev: true + - supports-color - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} + http-proxy@1.18.1(debug@4.3.4): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2 + follow-redirects: 1.15.2(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug - dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@7.0.5: dependencies: - agent-base: 6.0.2 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - dev: true + hyperdyperid@1.2.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - /icss-utils@5.1.0(postcss@8.4.27): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + icss-utils@5.1.0(postcss@8.4.41): dependencies: - postcss: 8.4.27 - dev: true + postcss: 8.4.41 - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore-walk@6.0.2: - resolution: {integrity: sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ignore-walk@6.0.5: dependencies: - minimatch: 7.4.4 - dev: true + minimatch: 9.0.0 - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ignore@5.2.4: {} - /image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} - engines: {node: '>=0.10.0'} - hasBin: true - requiresBuild: true - dev: true + image-size@0.5.5: optional: true - /immutable@4.3.0: - resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} - dev: true + immutable@4.3.0: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + imurmurhash@0.1.4: {} - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true + inherits@2.0.3: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + ini@4.1.3: {} - /injection-js@2.4.0: - resolution: {integrity: sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==} + injection-js@2.4.0: dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.6.3 - /inquirer@8.2.4: - resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} - engines: {node: '>=12.0.0'} + ip-address@9.0.5: dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true - - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - dev: true + jsbn: 1.1.0 + sprintf-js: 1.1.3 - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /ipaddr.js@2.0.1: - resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} - engines: {node: '>= 10'} - dev: true + ipaddr.js@2.2.0: {} - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: true + is-arrayish@0.3.2: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + is-core-module@2.11.0: dependencies: has: 1.0.3 - dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-fullwidth-code-point@4.0.0: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - dev: true + is-interactive@1.0.0: {} - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true + is-lambda@1.0.1: {} - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-module@1.0.0: {} - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true + is-network-error@1.1.0: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-number@7.0.0: {} + + is-plain-obj@3.0.0: {} + + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - dev: true - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - dev: true + is-what@3.14.1: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@3.1.0: dependencies: - is-docker: 2.2.1 - dev: true + is-inside-container: 1.0.0 - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + isbinaryfile@4.0.10: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isexe@3.1.1: {} - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true + isobject@3.0.1: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-coverage@3.2.0: {} + + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.22.5 '@babel/parser': 7.22.5 @@ -5148,186 +8056,95 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.25.2 + '@babel/parser': 7.25.4 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.0: dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} + istanbul-reports@3.1.5: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 - dev: true - /jackspeak@2.2.0: - resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} - engines: {node: '>=14'} + jackspeak@2.2.0: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jasmine-core@4.6.0: - resolution: {integrity: sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==} - dev: true + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - /jasmine-core@5.1.0: - resolution: {integrity: sha512-bFMMwpKuTZXCuGd51yClFobw5SOtad1kmdWnYO8dNwYV8i01Xj0C2+nyQpSKl1EKxiPfyd1ZgBl/rsusL3aS6w==} - dev: true + jasmine-core@4.6.0: {} - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jasmine-core@5.1.0: {} + + jest-worker@27.5.1: dependencies: '@types/node': 18.15.11 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - - /jiti@1.18.2: - resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} - hasBin: true - dev: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + jiti@1.21.6: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.8.2 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + jsbn@1.1.0: {} - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + jsesc@0.5.0: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + json-parse-even-better-errors@3.0.0: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true + jsonc-parser@3.3.1: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /karma-chrome-launcher@3.2.0: - resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} + karma-chrome-launcher@3.2.0: dependencies: which: 1.3.1 - dev: true - /karma-coverage@2.2.1: - resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==} - engines: {node: '>=10.0.0'} + karma-coverage@2.2.1: dependencies: istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 @@ -5337,40 +8154,23 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /karma-jasmine-html-reporter@2.1.0(jasmine-core@5.1.0)(karma-jasmine@5.1.0)(karma@6.4.2): - resolution: {integrity: sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==} - peerDependencies: - jasmine-core: ^4.0.0 || ^5.0.0 - karma: ^6.0.0 - karma-jasmine: ^5.0.0 + karma-jasmine-html-reporter@2.1.0(jasmine-core@5.1.0)(karma-jasmine@5.1.0(karma@6.4.2))(karma@6.4.2): dependencies: jasmine-core: 5.1.0 karma: 6.4.2 karma-jasmine: 5.1.0(karma@6.4.2) - dev: true - /karma-jasmine@5.1.0(karma@6.4.2): - resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} - engines: {node: '>=12'} - peerDependencies: - karma: ^6.0.0 + karma-jasmine@5.1.0(karma@6.4.2): dependencies: jasmine-core: 4.6.0 karma: 6.4.2 - dev: true - /karma-source-map-support@1.4.0: - resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} + karma-source-map-support@1.4.0: dependencies: source-map-support: 0.5.21 - dev: true - /karma@6.4.2: - resolution: {integrity: sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==} - engines: {node: '>= 10'} - hasBin: true + karma@6.4.2: dependencies: '@colors/colors': 1.5.0 body-parser: 1.20.2 @@ -5381,7 +8181,7 @@ packages: dom-serialize: 2.2.1 glob: 7.2.3 graceful-fs: 4.2.11 - http-proxy: 1.18.1 + http-proxy: 1.18.1(debug@4.3.4) isbinaryfile: 4.0.10 lodash: 4.17.21 log4js: 6.9.1 @@ -5401,49 +8201,27 @@ packages: - debug - supports-color - utf-8-validate - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: true + kind-of@6.0.3: {} - /kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - dev: true + kuler@2.0.0: {} - /launch-editor@2.6.0: - resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} + launch-editor@2.8.1: dependencies: picocolors: 1.0.0 shell-quote: 1.8.1 - dev: true - /less-loader@11.1.0(less@4.1.3)(webpack@5.88.2): - resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} - engines: {node: '>= 14.15.0'} - peerDependencies: - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 + less-loader@12.2.0(less@4.2.0)(webpack@5.93.0(esbuild@0.23.0)): dependencies: - klona: 2.0.6 - less: 4.1.3 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + less: 4.2.0 + optionalDependencies: + webpack: 5.93.0(esbuild@0.23.0) - /less@4.1.3: - resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} - engines: {node: '>=6'} - hasBin: true + less@4.2.0: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: errno: 0.1.8 graceful-fs: 4.2.11 @@ -5454,78 +8232,75 @@ packages: source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /license-webpack-plugin@4.0.2(webpack@5.88.2): - resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} - peerDependencies: - webpack: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-sources: - optional: true + license-webpack-plugin@4.0.2(webpack@5.93.0(esbuild@0.23.0)): dependencies: - webpack: 5.88.2(esbuild@0.18.17) webpack-sources: 3.2.3 - dev: true + optionalDependencies: + webpack: 5.93.0(esbuild@0.23.0) - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true + listr2@8.2.4: + 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 - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} + lmdb@3.0.13: + dependencies: + msgpackr: 1.11.0 + node-addon-api: 6.1.0 + node-gyp-build-optional-packages: 5.2.2 + ordered-binary: 1.5.1 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 3.0.13 + '@lmdb/lmdb-darwin-x64': 3.0.13 + '@lmdb/lmdb-linux-arm': 3.0.13 + '@lmdb/lmdb-linux-arm64': 3.0.13 + '@lmdb/lmdb-linux-x64': 3.0.13 + '@lmdb/lmdb-win32-x64': 3.0.13 + + loader-runner@4.3.0: {} + + loader-utils@2.0.4: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 - dev: true - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - dev: true + loader-utils@3.3.1: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /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} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: true - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true + lodash.debounce@4.0.8: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log4js@6.9.1: - resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} - engines: {node: '>=8.0'} + 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: dependencies: date-format: 4.0.14 debug: 4.3.4 @@ -5534,10 +8309,8 @@ packages: streamroller: 3.1.5 transitivePeerDependencies: - supports-color - dev: true - /logform@2.5.1: - resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} + logform@2.5.1: dependencies: '@colors/colors': 1.5.0 '@types/triple-beam': 1.3.2 @@ -5545,673 +8318,373 @@ packages: ms: 2.1.3 safe-stable-stringify: 2.4.3 triple-beam: 1.3.0 - dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@10.4.3: {} + + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true - /lru-cache@9.1.1: - resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@9.1.1: {} - /magic-string@0.30.1: - resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} - engines: {node: '>=12'} + magic-string@0.30.11: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true + '@jridgewell/sourcemap-codec': 1.5.0 - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - requiresBuild: true + make-dir@2.1.0: dependencies: pify: 4.0.1 semver: 5.7.1 - dev: true optional: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + make-dir@3.1.0: dependencies: - agentkeepalive: 4.3.0 - cacache: 16.1.3 - http-cache-semantics: 4.1.1 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 2.1.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 9.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true + semver: 6.3.1 - /make-fetch-happen@11.1.1: - resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + make-fetch-happen@13.0.1: dependencies: - agentkeepalive: 4.3.0 - cacache: 17.1.3 + '@npmcli/agent': 2.2.2 + cacache: 18.0.4 http-cache-semantics: 4.1.1 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 5.0.0 + minipass: 7.1.2 minipass-fetch: 3.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 0.6.3 + proc-log: 4.2.0 promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 ssri: 10.0.1 transitivePeerDependencies: - supports-color - dev: true - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /memfs@3.4.13: - resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} - engines: {node: '>= 4.0.0'} + memfs@4.11.1: dependencies: - fs-monkey: 1.0.3 - dev: true + '@jsonjoy.com/json-pack': 1.1.0(tslib@2.6.3) + '@jsonjoy.com/util': 1.3.0(tslib@2.6.3) + tree-dump: 1.0.2(tslib@2.6.3) + tslib: 2.6.3 - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true + merge-descriptors@1.0.1: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /mime@2.5.2: - resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + mime@2.6.0: {} - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + mimic-fn@2.1.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-function@5.0.1: {} - /mini-css-extract-plugin@2.7.6(webpack@5.88.2): - resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + mini-css-extract-plugin@2.9.0(webpack@5.93.0(esbuild@0.23.0)): dependencies: schema-utils: 4.0.0 - webpack: 5.88.2(esbuild@0.18.17) - dev: true - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true + tapable: 2.2.1 + webpack: 5.93.0(esbuild@0.23.0) - /minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} - dependencies: - brace-expansion: 1.1.11 - dev: true + minimalistic-assert@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch@7.4.4: - resolution: {integrity: sha512-T+8B3kNrLP7jDb5eaC4rUIp6DKoeTSb6f9SwF2phcY2gxJUA0GEf1i29/FHxBMEfx0ppWlr434/D0P+6jb8bOQ==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@8.0.2: - resolution: {integrity: sha512-ikHGF67ODxj7vS5NKU2wvTsFLbExee+KXVCnBWh8Cg2hVJfBMQIrlo50qru/09E0EifjnU8dZhJ/iHhyXJM6Mw==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.0: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.0: - resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true + minimist@1.2.8: {} - /minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + minipass-collect@2.0.1: dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: true + minipass: 7.1.2 - /minipass-fetch@3.0.1: - resolution: {integrity: sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + minipass-fetch@3.0.1: dependencies: minipass: 4.2.5 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 - dev: true - - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - /minipass-json-stream@1.0.1: - resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} + minipass-flush@1.0.5: dependencies: - jsonparse: 1.3.1 minipass: 3.3.6 - dev: true - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 - dev: true - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} + minipass-sized@1.0.3: dependencies: minipass: 3.3.6 - dev: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: true - /minipass@4.2.5: - resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} - engines: {node: '>=8'} - dev: true + minipass@4.2.5: {} - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@5.0.0: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minipass@7.1.2: {} + + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp@1.0.4: {} - /mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - dev: true + mrmime@2.0.0: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.0: + optionalDependencies: + msgpackr-extract: 3.0.3 + + multicast-dns@7.2.5: dependencies: dns-packet: 5.5.0 thunky: 1.1.0 - dev: true - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + mute-stream@1.0.0: {} - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.7: {} - /needle@3.2.0: - resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} - engines: {node: '>= 4.4.x'} - hasBin: true - requiresBuild: true + needle@3.2.0: dependencies: debug: 3.2.7 iconv-lite: 0.6.3 sax: 1.2.4 transitivePeerDependencies: - supports-color - dev: true optional: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /ng-packagr@16.2.0(@angular/compiler-cli@16.2.1)(tslib@2.6.2)(typescript@5.1.6): - resolution: {integrity: sha512-3u2FVSpKDa0EJRSGOAhYIZwjtnG7SVFBnUf5fk/VfDOxVV4kFRea6DEK7f/mb1D4WV/yqSZB9JmvBZp0uuIGeA==} - engines: {node: ^16.14.0 || >=18.10.0} - hasBin: true - peerDependencies: - '@angular/compiler-cli': ^16.0.0 || ^16.2.0-next.0 - tailwindcss: ^2.0.0 || ^3.0.0 - tslib: ^2.3.0 - typescript: '>=4.9.3 <5.2' - peerDependenciesMeta: - tailwindcss: - optional: true + ng-packagr@18.2.1(@angular/compiler-cli@18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4))(tslib@2.6.2)(typescript@5.5.4): dependencies: - '@angular/compiler-cli': 16.2.1(@angular/compiler@16.2.1)(typescript@5.1.6) - '@rollup/plugin-json': 6.0.0(rollup@3.25.3) - '@rollup/plugin-node-resolve': 15.0.1(rollup@3.25.3) - ajv: 8.12.0 + '@angular/compiler-cli': 18.2.1(@angular/compiler@18.2.1(@angular/core@18.2.1(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.5.4) + '@rollup/plugin-json': 6.1.0(rollup@4.21.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.21.1) + '@rollup/wasm-node': 4.21.1 + ajv: 8.17.1 ansi-colors: 4.1.3 - autoprefixer: 10.4.14(postcss@8.4.24) - browserslist: 4.21.5 - cacache: 17.1.3 - chokidar: 3.5.3 - commander: 11.0.0 + browserslist: 4.23.3 + cacache: 18.0.4 + chokidar: 3.6.0 + commander: 12.1.0 convert-source-map: 2.0.0 - dependency-graph: 0.11.0 - esbuild-wasm: 0.19.2 - fast-glob: 3.2.12 + dependency-graph: 1.0.0 + esbuild: 0.23.0 + fast-glob: 3.3.2 find-cache-dir: 3.3.2 injection-js: 2.4.0 - jsonc-parser: 3.2.0 - less: 4.1.3 + jsonc-parser: 3.3.1 + less: 4.2.0 ora: 5.4.1 - piscina: 4.1.0 - postcss: 8.4.24 - postcss-url: 10.1.3(postcss@8.4.24) - rollup: 3.25.3 + piscina: 4.6.1 + postcss: 8.4.41 rxjs: 7.8.1 - sass: 1.63.2 + sass: 1.77.6 tslib: 2.6.2 - typescript: 5.1.6 + typescript: 5.5.4 optionalDependencies: - esbuild: 0.19.2 + rollup: 4.21.1 transitivePeerDependencies: - supports-color - dev: true - /nice-napi@1.0.2: - resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} - os: ['!win32'] - requiresBuild: true + nice-napi@1.0.2: dependencies: node-addon-api: 3.2.1 node-gyp-build: 4.6.0 - dev: true optional: true - /node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - requiresBuild: true - dev: true + node-addon-api@3.2.1: optional: true - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true + node-addon-api@6.1.0: {} - /node-gyp-build@4.6.0: - resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} - hasBin: true - requiresBuild: true - dev: true + node-forge@1.3.1: {} + + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.0.3 + + node-gyp-build@4.6.0: optional: true - /node-gyp@9.3.1: - resolution: {integrity: sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==} - engines: {node: ^12.13 || ^14.13 || >=16} - hasBin: true + node-gyp@10.2.0: dependencies: env-paths: 2.2.1 - glob: 7.2.3 + exponential-backoff: 3.1.1 + glob: 10.4.5 graceful-fs: 4.2.11 - make-fetch-happen: 10.2.1 - nopt: 6.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.5.4 - tar: 6.1.13 - which: 2.0.2 + make-fetch-happen: 13.0.1 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.6.3 + tar: 6.2.1 + which: 4.0.0 transitivePeerDependencies: - - bluebird - supports-color - dev: true - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - dev: true + node-releases@2.0.13: {} - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true + node-releases@2.0.18: {} - /nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true + nopt@7.2.1: dependencies: - abbrev: 1.1.1 - dev: true + abbrev: 2.0.0 - /normalize-package-data@5.0.0: - resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + normalize-package-data@6.0.2: dependencies: - hosted-git-info: 6.1.1 - is-core-module: 2.11.0 - semver: 7.5.4 + hosted-git-info: 7.0.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /npm-bundled@3.0.0: - resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-bundled@3.0.0: dependencies: npm-normalize-package-bin: 3.0.0 - dev: true - /npm-install-checks@6.1.0: - resolution: {integrity: sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-install-checks@6.1.0: dependencies: - semver: 7.5.4 - dev: true + semver: 7.6.3 - /npm-normalize-package-bin@3.0.0: - resolution: {integrity: sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + npm-normalize-package-bin@3.0.0: {} - /npm-package-arg@10.1.0: - resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-package-arg@11.0.3: dependencies: - hosted-git-info: 6.1.1 - proc-log: 3.0.0 - semver: 7.5.4 + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.3 validate-npm-package-name: 5.0.0 - dev: true - /npm-packlist@7.0.4: - resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-packlist@8.0.2: dependencies: - ignore-walk: 6.0.2 - dev: true + ignore-walk: 6.0.5 - /npm-pick-manifest@8.0.1: - resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-pick-manifest@9.1.0: dependencies: npm-install-checks: 6.1.0 npm-normalize-package-bin: 3.0.0 - npm-package-arg: 10.1.0 - semver: 7.5.4 - dev: true + npm-package-arg: 11.0.3 + semver: 7.6.3 - /npm-registry-fetch@14.0.3: - resolution: {integrity: sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-registry-fetch@17.1.0: dependencies: - make-fetch-happen: 11.1.1 - minipass: 4.2.5 + '@npmcli/redact': 2.0.1 + jsonparse: 1.3.1 + make-fetch-happen: 13.0.1 + minipass: 7.1.2 minipass-fetch: 3.0.1 - minipass-json-stream: 1.0.1 minizlib: 2.1.2 - npm-package-arg: 10.1.0 - proc-log: 3.0.0 + npm-package-arg: 11.0.3 + proc-log: 4.2.0 transitivePeerDependencies: - supports-color - dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - dev: true - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: true - - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true + object-assign@4.1.1: {} - /object-path@0.11.8: - resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} - engines: {node: '>= 10.12.0'} - dev: true + object-inspect@1.12.3: {} - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true + obuf@1.1.2: {} - /on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} + on-finished@2.3.0: dependencies: ee-first: 1.1.1 - dev: true - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true + on-headers@1.0.2: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + one-time@1.0.0: dependencies: fn.name: 1.1.0 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + onetime@7.0.0: dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true + mimic-function: 5.0.1 - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + 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 + + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -6222,464 +8695,239 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + ordered-binary@1.5.1: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + os-tmpdir@1.0.2: {} + + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /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@4.0.0: dependencies: yocto-queue: 1.0.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /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-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + p-retry@6.2.0: dependencies: - '@types/retry': 0.12.0 + '@types/retry': 0.12.2 + is-network-error: 1.1.0 retry: 0.13.1 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pacote@15.2.0: - resolution: {integrity: sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + package-json-from-dist@1.0.0: {} + + pacote@18.0.6: dependencies: - '@npmcli/git': 4.0.4 + '@npmcli/git': 5.0.8 '@npmcli/installed-package-contents': 2.0.2 - '@npmcli/promise-spawn': 6.0.2 - '@npmcli/run-script': 6.0.0 - cacache: 17.1.3 + '@npmcli/package-json': 5.2.0 + '@npmcli/promise-spawn': 7.0.2 + '@npmcli/run-script': 8.1.0 + cacache: 18.0.4 fs-minipass: 3.0.1 - minipass: 5.0.0 - npm-package-arg: 10.1.0 - npm-packlist: 7.0.4 - npm-pick-manifest: 8.0.1 - npm-registry-fetch: 14.0.3 - proc-log: 3.0.0 + minipass: 7.1.2 + npm-package-arg: 11.0.3 + npm-packlist: 8.0.2 + npm-pick-manifest: 9.1.0 + npm-registry-fetch: 17.1.0 + proc-log: 4.2.0 promise-retry: 2.0.1 - read-package-json: 6.0.1 - read-package-json-fast: 3.0.2 - sigstore: 1.4.0 + sigstore: 2.3.1 ssri: 10.0.1 tar: 6.1.13 transitivePeerDependencies: - bluebird - supports-color - dev: true - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} - engines: {node: '>= 0.10'} - dev: true + parse-node-version@1.0.1: {} - /parse5-html-rewriting-stream@7.0.0: - resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} + parse5-html-rewriting-stream@7.0.0: dependencies: entities: 4.5.0 parse5: 7.1.2 parse5-sax-parser: 7.0.0 - dev: true - /parse5-sax-parser@7.0.0: - resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} + parse5-sax-parser@7.0.0: dependencies: parse5: 7.1.2 - dev: true - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.1.2: dependencies: entities: 4.5.0 - dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@5.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.8.0: - resolution: {integrity: sha512-IjTrKseM404/UAWA8bBbL3Qp6O2wXkanuIE3seCxBH7ctRuvH1QRawy1N3nVDHGkdeZsjOsSe/8AQBL/VQCy2g==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@1.8.0: dependencies: lru-cache: 9.1.1 minipass: 5.0.0 - dev: true - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true + path-to-regexp@0.1.7: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@5.0.0: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picocolors@1.0.1: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - requiresBuild: true - dev: true - optional: true + picomatch@2.3.1: {} - /piscina@4.0.0: - resolution: {integrity: sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==} - dependencies: - eventemitter-asyncresource: 1.0.0 - hdr-histogram-js: 2.0.3 - hdr-histogram-percentiles-obj: 3.0.0 - optionalDependencies: - nice-napi: 1.0.2 - dev: true + picomatch@4.0.2: {} - /piscina@4.1.0: - resolution: {integrity: sha512-sjbLMi3sokkie+qmtZpkfMCUJTpbxJm/wvaPzU28vmYSsTSW8xk9JcFUsbqGJdtPpIQ9tuj+iDcTtgZjwnOSig==} - dependencies: - eventemitter-asyncresource: 1.0.0 - hdr-histogram-js: 2.0.3 - hdr-histogram-percentiles-obj: 3.0.0 + pify@4.0.1: + optional: true + + piscina@4.6.1: optionalDependencies: nice-napi: 1.0.2 - dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} + pkg-dir@7.0.0: dependencies: find-up: 6.3.0 - dev: true - /postcss-loader@7.3.3(postcss@8.4.27)(webpack@5.88.2): - resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 + postcss-loader@8.1.1(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0(esbuild@0.23.0)): dependencies: - cosmiconfig: 8.2.0 - jiti: 1.18.2 - postcss: 8.4.27 - semver: 7.5.4 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + cosmiconfig: 9.0.0(typescript@5.5.4) + jiti: 1.21.6 + postcss: 8.4.41 + semver: 7.6.3 + optionalDependencies: + webpack: 5.93.0(esbuild@0.23.0) + transitivePeerDependencies: + - typescript - /postcss-modules-extract-imports@3.0.0(postcss@8.4.27): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-media-query-parser@0.2.3: {} + + postcss-modules-extract-imports@3.1.0(postcss@8.4.41): dependencies: - postcss: 8.4.27 - dev: true + postcss: 8.4.41 - /postcss-modules-local-by-default@4.0.3(postcss@8.4.27): - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-local-by-default@4.0.5(postcss@8.4.41): dependencies: - icss-utils: 5.1.0(postcss@8.4.27) - postcss: 8.4.27 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 - dev: true - /postcss-modules-scope@3.0.0(postcss@8.4.27): - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-scope@3.2.0(postcss@8.4.41): dependencies: - postcss: 8.4.27 + postcss: 8.4.41 postcss-selector-parser: 6.0.11 - dev: true - /postcss-modules-values@4.0.0(postcss@8.4.27): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-values@4.0.0(postcss@8.4.41): dependencies: - icss-utils: 5.1.0(postcss@8.4.27) - postcss: 8.4.27 - dev: true + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 - /postcss-selector-parser@6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} - engines: {node: '>=4'} + postcss-selector-parser@6.0.11: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - - /postcss-url@10.1.3(postcss@8.4.24): - resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - make-dir: 3.1.0 - mime: 2.5.2 - minimatch: 3.0.8 - postcss: 8.4.24 - xxhashjs: 0.2.2 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - /postcss@8.4.24: - resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.41: dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /prettier@1.19.1: - resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} - engines: {node: '>=4'} - hasBin: true - dev: true + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true + prettier@1.19.1: {} - /proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + proc-log@4.2.0: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true + promise-inflight@1.0.1: {} - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} + promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - dev: true - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - requiresBuild: true - dev: true + prr@1.0.1: optional: true - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true - - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true + punycode@2.3.0: {} - /qjobs@1.2.0: - resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} - engines: {node: '>=0.9'} - dev: true + qjobs@1.2.0: {} - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} + qs@6.11.0: dependencies: side-channel: 1.0.4 - dev: true - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true + queue-microtask@1.2.3: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} + raw-body@2.5.1: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /read-package-json-fast@3.0.2: - resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - json-parse-even-better-errors: 3.0.0 - npm-normalize-package-bin: 3.0.0 - dev: true - - /read-package-json@6.0.1: - resolution: {integrity: sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - glob: 9.3.4 - json-parse-even-better-errors: 3.0.0 - normalize-package-data: 5.0.0 - npm-normalize-package-bin: 3.0.0 - dev: true + unpipe: 1.0.0 - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -6688,56 +8936,34 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /reflect-metadata@0.1.13: - resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} - dev: true + reflect-metadata@0.2.2: {} - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.1.0: dependencies: regenerate: 1.4.2 - dev: true - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + regenerate@1.4.2: {} - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true + regenerator-runtime@0.14.1: {} - /regenerator-transform@0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.22.6 - dev: true + '@babel/runtime': 7.25.0 - /regex-parser@2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: true + regex-parser@2.2.11: {} - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} + regexpu-core@5.3.2: dependencies: '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 @@ -6745,257 +8971,186 @@ packages: regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 - dev: true - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true + regjsparser@0.9.1: dependencies: jsesc: 0.5.0 - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + require-from-string@2.0.2: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + requires-port@1.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@4.0.0: {} - /resolve-url-loader@5.0.0: - resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} - engines: {node: '>=12'} + resolve-url-loader@5.0.0: dependencies: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.27 + postcss: 8.4.41 source-map: 0.6.1 - dev: true - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true + resolve@1.22.2: dependencies: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true + retry@0.12.0: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + retry@0.13.1: {} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rfdc@1.3.0: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rollup@3.25.3: - resolution: {integrity: sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + + rollup@4.20.0: + dependencies: + '@types/estree': 1.0.5 optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.20.0 + '@rollup/rollup-android-arm64': 4.20.0 + '@rollup/rollup-darwin-arm64': 4.20.0 + '@rollup/rollup-darwin-x64': 4.20.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 + '@rollup/rollup-linux-arm-musleabihf': 4.20.0 + '@rollup/rollup-linux-arm64-gnu': 4.20.0 + '@rollup/rollup-linux-arm64-musl': 4.20.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 + '@rollup/rollup-linux-riscv64-gnu': 4.20.0 + '@rollup/rollup-linux-s390x-gnu': 4.20.0 + '@rollup/rollup-linux-x64-gnu': 4.20.0 + '@rollup/rollup-linux-x64-musl': 4.20.0 + '@rollup/rollup-win32-arm64-msvc': 4.20.0 + '@rollup/rollup-win32-ia32-msvc': 4.20.0 + '@rollup/rollup-win32-x64-msvc': 4.20.0 fsevents: 2.3.2 - dev: true - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rollup@4.21.1: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.1 + '@rollup/rollup-android-arm64': 4.21.1 + '@rollup/rollup-darwin-arm64': 4.21.1 + '@rollup/rollup-darwin-x64': 4.21.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.1 + '@rollup/rollup-linux-arm-musleabihf': 4.21.1 + '@rollup/rollup-linux-arm64-gnu': 4.21.1 + '@rollup/rollup-linux-arm64-musl': 4.21.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.1 + '@rollup/rollup-linux-riscv64-gnu': 4.21.1 + '@rollup/rollup-linux-s390x-gnu': 4.21.1 + '@rollup/rollup-linux-x64-gnu': 4.21.1 + '@rollup/rollup-linux-x64-musl': 4.21.1 + '@rollup/rollup-win32-arm64-msvc': 4.21.1 + '@rollup/rollup-win32-ia32-msvc': 4.21.1 + '@rollup/rollup-win32-x64-msvc': 4.21.1 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.6.2 - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} - engines: {node: '>=10'} - dev: true + safe-stable-stringify@2.4.3: {} - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sass-loader@13.3.2(sass@1.64.1)(webpack@5.88.2): - resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} - engines: {node: '>= 14.15.0'} - peerDependencies: - fibers: '>= 3.1.0' - 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: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true + sass-loader@16.0.0(sass@1.77.6)(webpack@5.93.0(esbuild@0.23.0)): dependencies: neo-async: 2.6.2 - sass: 1.64.1 - webpack: 5.88.2(esbuild@0.18.17) - dev: true - - /sass@1.63.2: - resolution: {integrity: sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - chokidar: 3.5.3 - immutable: 4.3.0 - source-map-js: 1.0.2 - dev: true + optionalDependencies: + sass: 1.77.6 + webpack: 5.93.0(esbuild@0.23.0) - /sass@1.64.1: - resolution: {integrity: sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==} - engines: {node: '>=14.0.0'} - hasBin: true + sass@1.77.6: dependencies: chokidar: 3.5.3 immutable: 4.3.0 source-map-js: 1.0.2 - dev: true - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - requiresBuild: true - dev: true + sax@1.2.4: optional: true - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - /schema-utils@4.0.0: - resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} - engines: {node: '>= 12.13.0'} + schema-utils@4.0.0: dependencies: '@types/json-schema': 7.0.11 ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) ajv-keywords: 5.1.0(ajv@8.12.0) - dev: true - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true + schema-utils@4.2.0: + dependencies: + '@types/json-schema': 7.0.11 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) - /selfsigned@2.1.1: - resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} - engines: {node: '>=10'} + select-hose@2.0.0: {} + + selfsigned@2.4.1: dependencies: + '@types/node-forge': 1.3.11 node-forge: 1.3.1 - dev: true - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - requiresBuild: true - dev: true + semver@5.7.1: optional: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true + semver@6.3.0: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.5.3: - resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true + semver@7.6.3: {} - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + send@0.18.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -7012,17 +9167,16 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + serialize-javascript@6.0.1: dependencies: randombytes: 2.1.0 - dev: true - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-index@1.9.1: dependencies: accepts: 1.3.8 batch: 0.6.1 @@ -7033,11 +9187,8 @@ packages: parseurl: 1.3.3 transitivePeerDependencies: - supports-color - dev: true - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.15.0: dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -7045,110 +9196,79 @@ packages: send: 0.18.0 transitivePeerDependencies: - supports-color - dev: true - - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true + setprototypeof@1.1.0: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 object-inspect: 1.12.3 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} - dev: true + signal-exit@4.0.2: {} - /sigstore@1.4.0: - resolution: {integrity: sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + signal-exit@4.1.0: {} + + sigstore@2.3.1: dependencies: - '@sigstore/protobuf-specs': 0.1.0 - make-fetch-happen: 11.1.1 - tuf-js: 1.1.6 + '@sigstore/bundle': 2.3.2 + '@sigstore/core': 1.1.0 + '@sigstore/protobuf-specs': 0.3.2 + '@sigstore/sign': 2.3.2 + '@sigstore/tuf': 2.3.4 + '@sigstore/verify': 1.2.1 transitivePeerDependencies: - supports-color - dev: true - /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - dev: true - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + slash@5.1.0: {} - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 - /socket.io-adapter@2.5.2: - resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} + 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.2: dependencies: ws: 8.11.0 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /socket.io-parser@4.2.2: - resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} - engines: {node: '>=10.0.0'} + socket.io-parser@4.2.2: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /socket.io@4.6.1: - resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} - engines: {node: '>=10.0.0'} + socket.io@4.6.1: dependencies: accepts: 1.3.8 base64id: 2.0.0 @@ -7160,93 +9280,60 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 - dev: true - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} + socks-proxy-agent@8.0.4: dependencies: - agent-base: 6.0.2 + agent-base: 7.1.1 debug: 4.3.4 - socks: 2.7.1 + socks: 2.8.3 transitivePeerDependencies: - supports-color - dev: true - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + socks@2.8.3: dependencies: - ip: 2.0.0 + ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.0.2: {} - /source-map-loader@4.0.1(webpack@5.88.2): - resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.72.1 + source-map-js@1.2.0: {} + + source-map-loader@5.0.0(webpack@5.93.0(esbuild@0.23.0)): dependencies: - abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + webpack: 5.93.0(esbuild@0.23.0) - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map@0.7.4: {} - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 - dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.3.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 - dev: true - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - dev: true + spdx-license-ids@3.0.13: {} - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + spdy-transport@3.0.0: dependencies: debug: 4.3.4 detect-node: 2.1.0 @@ -7256,11 +9343,8 @@ packages: wbuf: 1.7.3 transitivePeerDependencies: - supports-color - dev: true - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} + spdy@4.0.2: dependencies: debug: 4.3.4 handle-thing: 2.0.1 @@ -7269,143 +9353,86 @@ packages: spdy-transport: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.1.3: {} - /ssri@10.0.1: - resolution: {integrity: sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ssri@10.0.1: dependencies: minipass: 4.2.5 - dev: true - - /ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - minipass: 3.3.6 - dev: true - /stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - dev: true + stack-trace@0.0.10: {} - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true + statuses@1.5.0: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /streamroller@3.1.5: - resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} - engines: {node: '>=8.0'} + streamroller@3.1.5: dependencies: date-format: 4.0.14 debug: 4.3.4 fs-extra: 8.1.0 transitivePeerDependencies: - supports-color - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.0.1 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} - engines: {node: '>=12'} + strip-ansi@7.0.1: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + strip-final-newline@2.0.0: {} + + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - /symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true + symbol-observable@4.0.0: {} - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /tar@6.1.13: - resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} - engines: {node: '>=10'} + tar@6.1.13: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -7413,521 +9440,256 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true - /terser-webpack-plugin@5.3.7(esbuild@0.18.17)(webpack@5.88.2): - resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} - 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 + tar@6.2.1: dependencies: - '@jridgewell/trace-mapping': 0.3.17 - esbuild: 0.18.17 + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + terser-webpack-plugin@5.3.10(esbuild@0.23.0)(webpack@5.93.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.19.2 - webpack: 5.88.2(esbuild@0.18.17) - dev: true - - /terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true + terser: 5.31.6 + webpack: 5.93.0(esbuild@0.23.0) + optionalDependencies: + esbuild: 0.23.0 - /text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - dev: true + terser@5.31.6: + dependencies: + '@jridgewell/source-map': 0.3.3 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-hex@1.0.0: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + thingies@1.21.0(tslib@2.6.3): + dependencies: + tslib: 2.6.3 - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true + thunky@1.1.0: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} + tmp@0.2.1: dependencies: rimraf: 3.0.2 - dev: true - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true - - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.3.0 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true + toidentifier@1.0.1: {} - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} + tree-dump@1.0.2(tslib@2.6.3): dependencies: - punycode: 2.3.0 - dev: true + tslib: 2.6.3 - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /triple-beam@1.3.0: - resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} - dev: true + triple-beam@1.3.0: {} - /tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} - dev: true + tslib@2.6.2: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.3: {} - /tuf-js@1.1.6: - resolution: {integrity: sha512-CXwFVIsXGbVY4vFiWF7TJKWmlKJAT8TWkH4RmiohJRcDJInix++F0dznDmoVbtJNzZ8yLprKUG4YrDIhv3nBMg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + tuf-js@2.2.1: dependencies: - '@tufjs/models': 1.0.4 + '@tufjs/models': 2.0.1 debug: 4.3.4 - make-fetch-happen: 11.1.1 + make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color - dev: true - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typed-assert@1.0.9: - resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} - dev: true + typed-assert@1.0.9: {} - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.5.4: {} - /ua-parser-js@0.7.35: - resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==} - dev: true + ua-parser-js@0.7.35: {} - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true + undici-types@6.19.8: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-canonical-property-names-ecmascript@2.0.0: {} + + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 - dev: true - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: true + unicode-match-property-value-ecmascript@2.1.0: {} - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true + unicode-property-aliases-ecmascript@2.1.0: {} - /unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - unique-slug: 3.0.0 - dev: true + unicorn-magic@0.1.0: {} - /unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 - dev: true - - /unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - dev: true - /unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-slug@4.0.0: dependencies: imurmurhash: 0.1.4 - dev: true - - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: true - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + universalify@0.1.2: {} - /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.5 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true + unpipe@1.0.0: {} - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.11(browserslist@4.21.10): dependencies: browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - punycode: 2.3.0 - dev: true + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + uri-js@4.4.1: dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true + punycode: 2.3.0 - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + uuid@8.3.2: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + validate-npm-package-name@5.0.0: dependencies: builtins: 5.0.1 - dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + vary@1.1.2: {} - /vite@4.4.7(less@4.1.3)(sass@1.64.1)(terser@5.19.2): - resolution: {integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@5.4.0(@types/node@22.5.0)(less@4.2.0)(sass@1.77.6)(terser@5.31.6): dependencies: - esbuild: 0.18.17 - less: 4.1.3 - postcss: 8.4.27 - rollup: 3.25.3 - sass: 1.64.1 - terser: 5.19.2 + esbuild: 0.21.5 + postcss: 8.4.41 + rollup: 4.21.1 optionalDependencies: - fsevents: 2.3.2 - dev: true - - /void-elements@2.0.1: - resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} - engines: {node: '>=0.10.0'} - dev: true + '@types/node': 22.5.0 + fsevents: 2.3.3 + less: 4.2.0 + sass: 1.77.6 + terser: 5.31.6 - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true + void-elements@2.0.1: {} - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + wbuf@1.7.3: dependencies: minimalistic-assert: 1.0.1 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - /webpack-dev-middleware@5.3.3(webpack@5.88.2): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.19 - memfs: 3.4.13 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.0.0 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + weak-lru-cache@1.2.2: {} - /webpack-dev-middleware@6.1.1(webpack@5.88.2): - resolution: {integrity: sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack-dev-middleware@7.3.0(webpack@5.93.0): dependencies: colorette: 2.0.19 - memfs: 3.4.13 + memfs: 4.11.1 mime-types: 2.1.35 + on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + optionalDependencies: + webpack: 5.93.0(esbuild@0.23.0) - /webpack-dev-server@4.15.1(webpack@5.88.2): - resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true + webpack-dev-server@5.0.4(webpack@5.93.0): dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.17 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.5 + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.7 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.12 ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 + bonjour-service: 1.2.1 + chokidar: 3.6.0 colorette: 2.0.19 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.18.2 graceful-fs: 4.2.11 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6(@types/express@4.17.17) - ipaddr.js: 2.0.1 - launch-editor: 2.6.0 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.0.0 - selfsigned: 2.1.1 + html-entities: 2.5.2 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.8.1 + open: 10.1.0 + p-retry: 6.2.0 + rimraf: 5.0.10 + schema-utils: 4.2.0 + selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.88.2(esbuild@0.18.17) - webpack-dev-middleware: 5.3.3(webpack@5.88.2) - ws: 8.13.0 + webpack-dev-middleware: 7.3.0(webpack@5.93.0) + ws: 8.18.0 + optionalDependencies: + webpack: 5.93.0(esbuild@0.23.0) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - dev: true - /webpack-merge@5.9.0: - resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} - engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 - wildcard: 2.0.0 - dev: true + flat: 5.0.2 + wildcard: 2.0.1 - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack-subresource-integrity@5.1.0(webpack@5.88.2): - resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} - engines: {node: '>= 12'} - peerDependencies: - html-webpack-plugin: '>= 5.0.0-beta.1 < 6' - webpack: ^5.12.0 - peerDependenciesMeta: - html-webpack-plugin: - optional: true + webpack-subresource-integrity@5.1.0(webpack@5.93.0(esbuild@0.23.0)): dependencies: typed-assert: 1.0.9 - webpack: 5.88.2(esbuild@0.18.17) - dev: true + webpack: 5.93.0(esbuild@0.23.0) - /webpack@5.88.2(esbuild@0.18.17): - resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.93.0(esbuild@0.23.0): dependencies: '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.0 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.8.2 - acorn-import-assertions: 1.9.0(acorn@8.8.2) - browserslist: 4.21.5 + acorn-import-attributes: 1.9.5(acorn@8.8.2) + browserslist: 4.21.10 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.2.1 eslint-scope: 5.1.1 events: 3.3.0 @@ -7939,93 +9701,43 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7(esbuild@0.18.17)(webpack@5.88.2) - watchpack: 2.4.0 + terser-webpack-plugin: 5.3.10(esbuild@0.23.0)(webpack@5.93.0) + watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} + websocket-driver@0.7.4: dependencies: http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 - dev: true - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: true - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true - - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true + websocket-extensions@0.1.4: {} - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@3.0.0: - resolution: {integrity: sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + which@4.0.0: dependencies: - string-width: 4.2.3 - dev: true + isexe: 3.1.1 - /wildcard@2.0.0: - resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} - dev: true + wildcard@2.0.1: {} - /winston-transport@4.5.0: - resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} - engines: {node: '>= 6.4.0'} + winston-transport@4.5.0: dependencies: logform: 2.5.1 readable-stream: 3.6.2 triple-beam: 1.3.0 - dev: true - /winston@3.8.2: - resolution: {integrity: sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==} - engines: {node: '>= 12.0.0'} + winston@3.8.2: dependencies: '@colors/colors': 1.5.0 '@dabh/diagnostics': 2.0.3 @@ -8038,109 +9750,48 @@ packages: stack-trace: 0.0.10 triple-beam: 1.3.0 winston-transport: 4.5.0 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + 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.0.1 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - 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 - dev: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - 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 - dev: true + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true + wrappy@1.0.2: {} - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true + ws@8.11.0: {} - /xxhashjs@0.2.2: - resolution: {integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==} - dependencies: - cuint: 0.2.2 - dev: true + ws@8.18.0: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -8149,11 +9800,8 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -8162,14 +9810,9 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.0.0: {} - /zone.js@0.13.1: - resolution: {integrity: sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==} - dependencies: - tslib: 2.6.2 + yoctocolors-cjs@2.1.2: {} + + zone.js@0.14.10: {} diff --git a/packages/angular/projects/aneoconsultingfr/armonik.api.angular/package.json b/packages/angular/projects/aneoconsultingfr/armonik.api.angular/package.json index d442a0b7d..ca4b708dc 100644 --- a/packages/angular/projects/aneoconsultingfr/armonik.api.angular/package.json +++ b/packages/angular/projects/aneoconsultingfr/armonik.api.angular/package.json @@ -1,6 +1,6 @@ { "name": "@aneoconsultingfr/armonik.api.angular", - "version": "3.19.0", + "version": "3.22.0", "description": "gRPC API to interact with ArmoniK built for Angular", "license": "Apache-2.0", "homepage": "https://github.com/aneoconsulting/ArmoniK.Api#readme", @@ -19,8 +19,8 @@ ], "sideEffects": false, "peerDependencies": { - "@angular/common": "^16.2.1", - "@angular/core": "^16.2.1", + "@angular/common": "^18.2.1", + "@angular/core": "^18.2.1", "@ngx-grpc/common": "^3.1.2", "@ngx-grpc/core": "^3.1.2", "@ngx-grpc/well-known-types": "^3.1.2", diff --git a/packages/cpp/ArmoniK.Api.Client/CMakeLists.txt b/packages/cpp/ArmoniK.Api.Client/CMakeLists.txt index 27d3ccc5b..b84c0e2cb 100644 --- a/packages/cpp/ArmoniK.Api.Client/CMakeLists.txt +++ b/packages/cpp/ArmoniK.Api.Client/CMakeLists.txt @@ -77,7 +77,7 @@ protobuf_generate( set_source_files_properties(${PROTO_GENERATED_FILES} PROPERTIES SKIP_UNITY_BUILD_INCLUSION on) list(APPEND PROTO_GENERATED_FILES ${PROTO_GENERATED_MESSAGES}) -target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++_unsecure ArmoniK.Api.Common) +target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++ ArmoniK.Api.Common) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) setup_options(${PROJECT_NAME}) diff --git a/packages/cpp/ArmoniK.Api.Client/header/channel/ChannelFactory.h b/packages/cpp/ArmoniK.Api.Client/header/channel/ChannelFactory.h new file mode 100644 index 000000000..79f7585e3 --- /dev/null +++ b/packages/cpp/ArmoniK.Api.Client/header/channel/ChannelFactory.h @@ -0,0 +1,42 @@ +#pragma once + +#include "logger/logger.h" +#include "logger/writer.h" +#include "utils/Configuration.h" +#include +#include + +namespace armonik { +namespace api { +namespace client { +class ChannelFactory { +public: + /** + * @brief Creates a channel factory from the given configuration + * @param configuration The channel configuration + * @param logger The logger + */ + explicit ChannelFactory(armonik::api::common::utils::Configuration configuration, common::logger::Logger &logger); + + /** + * @brief Creates the new gRPC channel + * @return New channel + */ + std::shared_ptr<::grpc::Channel> create_channel(); + + /** + * + * @return A bool on whether the gRPC channel is secure or not + */ + bool isSecureChannel() const noexcept; + +private: + armonik::api::common::logger::LocalLogger logger_; + std::shared_ptr<::grpc::ChannelCredentials> credentials_{nullptr}; + std::string endpoint_; + armonik::api::common::utils::Configuration configuration_; + bool is_secure_{false}; +}; +} // namespace client +} // namespace api +} // namespace armonik \ No newline at end of file diff --git a/packages/cpp/ArmoniK.Api.Client/source/channel/ChannelFactory.cpp b/packages/cpp/ArmoniK.Api.Client/source/channel/ChannelFactory.cpp new file mode 100644 index 000000000..e2155367b --- /dev/null +++ b/packages/cpp/ArmoniK.Api.Client/source/channel/ChannelFactory.cpp @@ -0,0 +1,175 @@ +#include "channel/ChannelFactory.h" + +#include "exceptions/ArmoniKApiException.h" +#include "options/ControlPlane.h" +#include "utils/ChannelArguments.h" +#include +#include +#include + +#include +#include +#include + +namespace armonik { +namespace api { +namespace client { + +using namespace grpc::experimental; + +/** + * In TLS without SSL validation, this certificate is used for the function TlsCredentials options when a root + * certificate is not provided + */ +const std::string root_self_signed = R"(-----BEGIN CERTIFICATE REQUEST----- +MIIEhjCCAm4CAQAwQTELMAkGA1UEBhMCRlIxEzARBgNVBAgMClNvbWUtU3RhdGUx +DjAMBgNVBAcMBVBhcmlzMQ0wCwYDVQQKDARBbmVvMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA3lBl8so+JRen+tfbrytXMmYAvjt/WquctbkbFIN6prdp +uShiRb6kX9jobcOQCleQ08LBLPPoQ7AemymPxT0dq+YPFw33LgrIBpKe0JWYzujB +Ujj39b1EmKonnsx+C6DL2KSkIf7ayoBNdjDgunWkVC4M6hoJE7XYyZ78HKndfuvL +C4zs3o1EizvSpp+O/IzD/y5pnZEBoxMLCRNB8vD7w7mQMhx+6Amx7KkfCDKLOQO4 +/K2x8r4Y65+IvxFMyxUsR1Z5XPVv37u7u2akbh3HlUE+m0xzVOk+BmHFYxm/eEAF +4p1Jt3bZWu03eF4f8tmgN31Rv0uV+BRN7na44inXNnyd+2qczaCI1IQmsy23Vu0A +eX61Gu06ifViJAybbcWll3VQjWqj5XtsN2+yr2bGfZw8fpjGXVWTL0+nZSqZPWSo +IYlXMHjcygWyMJXTMVTTN+fV7dd9s1LFVnpdHFFOtmRzY8FlRRSpOoqG8XQXXsk0 +pE9904wHaXcwSEe4KtuzgZgNngRCtT61G6k+onhrGa6UVCKpfvMYtS3NEsMNNYsY +I5Hn7Unj/0xBO6IM5Os6PImWWMk8rLSXC3IdtEAHgShS+/xbh2ZVOveSeMXWaecm +u2RIe5wQa5ZXLr03XtkdMB1pebJbdoFrs0ev/sklk1dZfbX06vJSd8eokM9oIIcC +AwEAAaAAMA0GCSqGSIb3DQEBCwUAA4ICAQCr75dBYjypzqDqQ6TiKWuYO8rq6TIh +pdZHw5ystwvD6sn+tPbc7iNbnvDF6GeTgMdKAuwNz0YJMZq9v39hZzTCyMqRLNlT +TU3kYaTWGHDK0HE2O3pHKppHAc2YbAsSxuS8KMHx0wW0abVHiEeudc/nULJppX1/ +ObouzLGSJJwZctXEzk/Ye7bD1sneSqVnrdFD1IOBVQVRGoJznAt7WWxvGk9LPW51 ++MybzTilL4rk5+ezA4UCIMrQCDwZcI+UCcKqDajDz+7kn81f1K4g1G6dTh+M8qIV +lx6/Bfy3P6DHF1ww0i/hRQht1O9cyUo3mDZzAq20OsIDvkhjNGma/IEbkZ9z0P5C +/5YwAW+GuwG2GrD016y5OjZVrAG/KIfyS6FLQfgN/ww5Y9tK6vO5XkelED7zNPrq +em1zkId2H0Az5dIC2OpnAg3+NuGrehfIXziiY+8MGIivqI/Rulnv7m2l2vjHi66K +GztDm5ohMdfjitFIfPDFYPMH7KES4vivic8zlq9FJYNp8tUYEBR1wW7W03IJPm6e +pUwvXHPjId/qBjlBixZt2ZqC8X4S95wAfVjtS3O33Zsm4oevwlvywfYIK8nTG5SD +bDCNVTg3w/OQLQQdWUl6FunmYinukBgmqnsJnwgrhzBENbmgbgfOZZWGtG5ODENb +wc+KqiSg9c9iqA== +-----END CERTIFICATE REQUEST-----)"; + +/** + * + * @param path The path to the file to be read + * @return content of the file as a std::string + */ +std::string read_file(const absl::string_view &path) { + std::ifstream file(path.data(), std::ios::in | std::ios::binary); + if (file.is_open()) { + std::ostringstream sstr; + sstr << file.rdbuf(); + return sstr.str(); + } else { + return {}; + } +} + +/** + * @brief Check if it's https connexion + * @param controlPlane The control plane object for the current configuration + * @param endpoint The endpoint + * @return a boolean on wether http or https connexion + */ +bool initialize_protocol_endpoint(const common::options::ControlPlane &controlPlane, std::string &endpoint) { + absl::string_view endpoint_view = controlPlane.getEndpoint(); + const auto delim = endpoint_view.find("://"); + const auto http_delim = endpoint_view.find("http://"); + const auto https_delim = endpoint_view.find("https://"); + if ((endpoint_view.find("unix") == 0) || + (endpoint_view[0] == '/' && endpoint_view.find(':') == absl::string_view::npos)) { + endpoint = {endpoint_view.cbegin(), endpoint_view.cend()}; + if (endpoint[0] == '/') { + endpoint.insert(0, "unix://"); + } else { + endpoint.insert(0, "unix:"); + } + return false; + } + if (https_delim != absl::string_view::npos) { + const auto tmp = endpoint_view.substr(https_delim + 8); + endpoint = {tmp.cbegin(), tmp.cend()}; + return true; + } else { + if (http_delim != absl::string_view::npos) { + const auto tmp = endpoint_view.substr(http_delim + 7); + endpoint = {tmp.cbegin(), tmp.cend()}; + } else { + endpoint = {endpoint_view.cbegin(), endpoint_view.cend()}; + } + return false; + } +} + +/** + * + * @param rootCertificate The root certificate to validate the server one against + * @param userPublicPem The client certificate for mTLS + * @param userPrivatePem The client key for mTLS + * @return a pointer to a certificate provider interface + */ +std::shared_ptr create_certificate_provider(absl::string_view rootCertificate, + absl::string_view userPublicPem, + absl::string_view userPrivatePem) { + if (rootCertificate.empty()) { + return std::make_shared( + std::vector{IdentityKeyCertPair{userPrivatePem.data(), userPublicPem.data()}}); + } else if (userPrivatePem.empty() || userPublicPem.empty()) { + return std::make_shared(rootCertificate.data()); + } else { + return std::make_shared( + rootCertificate.data(), + std::vector{IdentityKeyCertPair{userPrivatePem.data(), userPublicPem.data()}}); + } +} + +std::shared_ptr ChannelFactory::create_channel() { + auto channel = grpc::CreateCustomChannel(endpoint_, credentials_, common::utils::getChannelArguments(configuration_)); + logger_.log(common::logger::Level::Debug, "Created new channel "); + + return channel; +} + +ChannelFactory::ChannelFactory(armonik::api::common::utils::Configuration configuration, common::logger::Logger &logger) + : logger_(logger.local()), configuration_(std::move(configuration)) { + const auto control_plane = configuration_.get_control_plane(); + const bool is_https = initialize_protocol_endpoint(control_plane, endpoint_); + + auto root_cert_pem = read_file(control_plane.getCaCertPemPath()); + auto user_private_pem = read_file(control_plane.getUserKeyPemPath()); + auto user_public_pem = read_file(control_plane.getUserCertPemPath()); + + if (is_https) { + if (!user_private_pem.empty() && !user_public_pem.empty()) { + if (control_plane.isSslValidation()) { + credentials_ = grpc::SslCredentials(grpc::SslCredentialsOptions{ + std::move(root_cert_pem), std::move(user_private_pem), std::move(user_public_pem)}); + } else { + throw common::exceptions::ArmoniKApiException("mTLS without SSL validation is not supported."); + } + } else { + if (control_plane.isSslValidation()) { + credentials_ = grpc::SslCredentials(grpc::SslCredentialsOptions{std::move(root_cert_pem)}); + } else { + TlsChannelCredentialsOptions tls_options; + // Set up TLS credentials options by setting root certificate to random certificate + tls_options.set_certificate_provider( + create_certificate_provider(root_self_signed, user_public_pem, user_private_pem)); + // Disable SSL certificate validation by setting verify_server to false + tls_options.set_verify_server_certs(control_plane.isSslValidation()); + // Create TLS credentials with the specified options + credentials_ = TlsCredentials(tls_options); + } + } + is_secure_ = true; + } else { + // Create gRPC insecure credentials + credentials_ = grpc::InsecureChannelCredentials(); + } +} + +bool ChannelFactory::isSecureChannel() const noexcept { return is_secure_; } + +} // namespace client +} // namespace api +} // namespace armonik diff --git a/packages/cpp/ArmoniK.Api.Client/source/events/EventsClient.cpp b/packages/cpp/ArmoniK.Api.Client/source/events/EventsClient.cpp index 84ffe4e81..f224a0d3e 100644 --- a/packages/cpp/ArmoniK.Api.Client/source/events/EventsClient.cpp +++ b/packages/cpp/ArmoniK.Api.Client/source/events/EventsClient.cpp @@ -25,6 +25,7 @@ void EventsClient::wait_for_result_availability(std::string session_id, std::vec filter_field.mutable_field()->mutable_result_raw_field()->set_field( armonik::api::grpc::v1::results::RESULT_RAW_ENUM_FIELD_RESULT_ID); filter_field.mutable_filter_string()->set_operator_(grpc::v1::FILTER_STRING_OPERATOR_EQUAL); + for (auto &&result_id : result_ids) { filter_field.mutable_filter_string()->set_value(result_id); *filters.mutable_or_()->Add()->mutable_and_()->Add() = filter_field; @@ -32,47 +33,53 @@ void EventsClient::wait_for_result_availability(std::string session_id, std::vec *request.mutable_session_id() = std::move(session_id); *request.mutable_results_filters() = filters; - request.add_returned_events(static_cast(EventSubscriptionResponse::UpdateCase::kResultStatusUpdate)); - request.add_returned_events(static_cast(EventSubscriptionResponse::UpdateCase::kNewResult)); + request.mutable_returned_events()->Add(EventsEnum::EVENTS_ENUM_RESULT_STATUS_UPDATE); + request.mutable_returned_events()->Add(EventsEnum::EVENTS_ENUM_NEW_RESULT); auto stream = stub->GetEvents(&context, request); if (!stream) { - throw armonik::api::common::exceptions::ArmoniKApiException("Result has been aborted"); + throw armonik::api::common::exceptions::ArmoniKApiException("Could not get events "); } while (stream->Read(&response)) { - std::string update_or_new; - switch (response.update_case()) { - case EventSubscriptionResponse::UpdateCase::kResultStatusUpdate: - switch (response.mutable_result_status_update()->status()) { - case ResultStatus::RESULT_STATUS_COMPLETED: - update_or_new = response.mutable_result_status_update()->result_id(); - break; - case ResultStatus::RESULT_STATUS_ABORTED: - throw armonik::api::common::exceptions::ArmoniKApiException("Result has been aborted"); - default: + try { + std::string update_or_new; + switch (response.update_case()) { + case EventSubscriptionResponse::UpdateCase::kResultStatusUpdate: + switch (response.mutable_result_status_update()->status()) { + case ResultStatus::RESULT_STATUS_COMPLETED: + update_or_new = response.mutable_result_status_update()->result_id(); + break; + case ResultStatus::RESULT_STATUS_ABORTED: + throw armonik::api::common::exceptions::ArmoniKApiException( + "Result " + response.mutable_result_status_update()->result_id() + " has been aborted"); + default: + break; + } break; - } - break; - case EventSubscriptionResponse::UpdateCase::kNewResult: - switch (response.mutable_new_result()->status()) { - case ResultStatus::RESULT_STATUS_COMPLETED: - update_or_new = response.mutable_new_result()->result_id(); + case EventSubscriptionResponse::UpdateCase::kNewResult: + switch (response.mutable_new_result()->status()) { + case ResultStatus::RESULT_STATUS_COMPLETED: + update_or_new = response.mutable_new_result()->result_id(); + break; + case ResultStatus::RESULT_STATUS_ABORTED: + throw armonik::api::common::exceptions::ArmoniKApiException( + "Result " + response.mutable_new_result()->result_id() + " has been aborted"); + default: + break; + } break; - case ResultStatus::RESULT_STATUS_ABORTED: - throw armonik::api::common::exceptions::ArmoniKApiException("Result has been aborted"); default: break; } - break; - default: - break; - } - if (!update_or_new.empty()) { - result_ids.erase(std::remove(result_ids.begin(), result_ids.end(), update_or_new), result_ids.end()); - if (result_ids.empty()) { - break; + if (!update_or_new.empty()) { + result_ids.erase(std::remove(result_ids.begin(), result_ids.end(), update_or_new), result_ids.end()); + if (result_ids.empty()) { + break; + } } + } catch (const std::exception &e) { + std::cerr << "Error while reading event response: " << e.what() << std::endl; } } } diff --git a/packages/cpp/ArmoniK.Api.Common/CMakeLists.txt b/packages/cpp/ArmoniK.Api.Common/CMakeLists.txt index b57c565c0..068f85419 100644 --- a/packages/cpp/ArmoniK.Api.Common/CMakeLists.txt +++ b/packages/cpp/ArmoniK.Api.Common/CMakeLists.txt @@ -69,7 +69,7 @@ file(MAKE_DIRECTORY ${PROJECT_BUILD_DIR}) add_library(${PROJECT_NAME} ${PROTO_GENERATED_FILES} ${SRC_CLIENT_FILES} ${HEADER_CLIENT_FILES} ${simdjson_SOURCE_DIR}/singleheader/simdjson.cpp ${simdjson_SOURCE_DIR}/singleheader/simdjson.h) -target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++_unsecure) +target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++) target_compile_definitions(${PROJECT_NAME} PUBLIC FMT_HEADER_ONLY=1) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) diff --git a/packages/cpp/ArmoniK.Api.Common/header/options/ControlPlane.h b/packages/cpp/ArmoniK.Api.Common/header/options/ControlPlane.h index 661e4b238..8ef324e37 100644 --- a/packages/cpp/ArmoniK.Api.Common/header/options/ControlPlane.h +++ b/packages/cpp/ArmoniK.Api.Common/header/options/ControlPlane.h @@ -27,21 +27,24 @@ class ControlPlane { const google::protobuf::Duration &getInitialBackoff() const { return initial_backoff_; } const google::protobuf::Duration &getMaxBackoff() const { return max_backoff_; } const google::protobuf::Duration &getRequestTimeout() const { return request_timeout_; } + bool hasClientCertificate() const { + return !user_p12_path_.empty() || !(user_cert_pem_path_.empty() || user_key_pem_path_.empty()); + } - static constexpr char EndpointKey[] = "Grpc__EndPoint"; - static constexpr char UserCertKey[] = "Grpc__ClientCert"; - static constexpr char UserKeyKey[] = "Grpc__ClientKey"; - static constexpr char UserP12Key[] = "Grpc__ClientP12"; - static constexpr char CaCertKey[] = "Grpc__CaCert"; - static constexpr char SSLValidationKey[] = "Grpc__SSLValidation"; - static constexpr char KeepAliveTimeKey[] = "Grpc__KeepAliveTime"; - static constexpr char KeepAliveTimeIntervalKey[] = "Grpc__KeepAliveTimeInterval"; - static constexpr char MaxIdleTimeKey[] = "Grpc__MaxIdleTime"; - static constexpr char MaxAttemptsKey[] = "Grpc__MaxAttempts"; - static constexpr char BackoffMultiplierKey[] = "Grpc__BackoffMultiplier"; - static constexpr char InitialBackOffKey[] = "Grpc__InitialBackOff"; - static constexpr char MaxBackOffKey[] = "Grpc__MaxBackOff"; - static constexpr char RequestTimeoutKey[] = "Grpc__RequestTimeout"; + static constexpr char EndpointKey[] = "GrpcClient__Endpoint"; + static constexpr char UserCertKey[] = "GrpcClient__CertPem"; + static constexpr char UserKeyKey[] = "GrpcClient__KeyPem"; + static constexpr char UserP12Key[] = "GrpcClient__CertP12"; + static constexpr char CaCertKey[] = "GrpcClient__CaCert"; + static constexpr char AllowUnsafeConnectionKey[] = "GrpcClient__AllowUnsafeConnection"; + static constexpr char KeepAliveTimeKey[] = "GrpcClient__KeepAliveTime"; + static constexpr char KeepAliveTimeIntervalKey[] = "GrpcClient__KeepAliveTimeInterval"; + static constexpr char MaxIdleTimeKey[] = "GrpcClient__MaxIdleTime"; + static constexpr char MaxAttemptsKey[] = "GrpcClient__MaxAttempts"; + static constexpr char BackoffMultiplierKey[] = "GrpcClient__BackoffMultiplier"; + static constexpr char InitialBackOffKey[] = "GrpcClient__InitialBackOff"; + static constexpr char MaxBackOffKey[] = "GrpcClient__MaxBackOff"; + static constexpr char RequestTimeoutKey[] = "GrpcClient__RequestTimeout"; private: std::string endpoint_; diff --git a/packages/cpp/ArmoniK.Api.Common/source/options/ControlPlane.cpp b/packages/cpp/ArmoniK.Api.Common/source/options/ControlPlane.cpp index e600c4f34..9ff0e0ba1 100644 --- a/packages/cpp/ArmoniK.Api.Common/source/options/ControlPlane.cpp +++ b/packages/cpp/ArmoniK.Api.Common/source/options/ControlPlane.cpp @@ -8,7 +8,7 @@ armonik::api::common::options::ControlPlane::ControlPlane(const utils::Configura user_key_pem_path_ = config.get(UserKeyKey); user_p12_path_ = config.get(UserP12Key); ca_cert_pem_path_ = config.get(CaCertKey); - sslValidation_ = config.get(SSLValidationKey) != "disable"; + sslValidation_ = config.get(AllowUnsafeConnectionKey) != "true"; keep_alive_time_ = config.get(KeepAliveTimeKey).empty() ? utils::duration_from_values(0, 0, 0, 30) : utils::duration_from_timespan(config.get(KeepAliveTimeKey)); diff --git a/packages/cpp/ArmoniK.Api.Common/source/utils/Configuration.cpp b/packages/cpp/ArmoniK.Api.Common/source/utils/Configuration.cpp index 31ffa4bbd..8d8cfd4c4 100644 --- a/packages/cpp/ArmoniK.Api.Common/source/utils/Configuration.cpp +++ b/packages/cpp/ArmoniK.Api.Common/source/utils/Configuration.cpp @@ -6,7 +6,7 @@ constexpr char armonik::api::common::options::ControlPlane::CaCertKey[]; constexpr char armonik::api::common::options::ControlPlane::EndpointKey[]; -constexpr char armonik::api::common::options::ControlPlane::SSLValidationKey[]; +constexpr char armonik::api::common::options::ControlPlane::AllowUnsafeConnectionKey[]; constexpr char armonik::api::common::options::ControlPlane::UserCertKey[]; constexpr char armonik::api::common::options::ControlPlane::UserKeyKey[]; constexpr char armonik::api::common::options::ControlPlane::UserP12Key[]; diff --git a/packages/cpp/ArmoniK.Api.Tests/CMakeLists.txt b/packages/cpp/ArmoniK.Api.Tests/CMakeLists.txt index 931ea3406..87880979e 100644 --- a/packages/cpp/ArmoniK.Api.Tests/CMakeLists.txt +++ b/packages/cpp/ArmoniK.Api.Tests/CMakeLists.txt @@ -4,6 +4,7 @@ set(PROJECT_NAME ArmoniK.Api.Tests) find_package(Protobuf REQUIRED) find_package(gRPC CONFIG REQUIRED) find_package(Threads) +find_package(CURL REQUIRED) SET(SOURCES_FILES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/source") SET(HEADER_FILES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/header") @@ -17,7 +18,8 @@ add_executable(${PROJECT_NAME} ${SRC_CLIENT_FILES} ${HEADER_CLIENT_FILES}) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) -target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++_unsecure ArmoniK.Api.Client ArmoniK.Api.Common GTest::gtest_main GTest::gmock_main) +target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++ ArmoniK.Api.Client ArmoniK.Api.Common GTest::gtest_main GTest::gmock_main CURL::libcurl) +target_link_options(${PROJECT_NAME} PUBLIC "-Wl,--copy-dt-needed-entries") if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /W4) diff --git a/packages/cpp/ArmoniK.Api.Tests/Dockerfile b/packages/cpp/ArmoniK.Api.Tests/Dockerfile new file mode 100644 index 000000000..abdeb309f --- /dev/null +++ b/packages/cpp/ArmoniK.Api.Tests/Dockerfile @@ -0,0 +1,52 @@ +# Start with the latest Alpine base image for the build stage +FROM alpine:3.18.6 AS builder + +# Install all the necessary dependencies required for the build process +# These include tools and libraries for building and compiling the source code +RUN apk update && apk add --no-cache \ + git \ + gcc \ + g++ \ + build-base \ + libtool \ + curl \ + c-ares \ + c-ares-dev \ + make \ + cmake \ + linux-headers \ + grpc \ + grpc-dev \ + protobuf \ + protobuf-dev \ + curl-dev \ + ca-certificates + +# Set environment variables for protobuf +ENV protobuf_BUILD_TESTS=OFF + +# Update PATH with the new directories +ENV PATH="/app/install/lib:$PATH" +ENV PATH="/app/install/bin:$PATH" + +# Print the PATH variable +RUN echo $PATH + +# Copy the application source files into the image +WORKDIR /app/source +COPY packages/cpp/tools/packaging/common/. ./tools/packaging/common/ +COPY Protos/V1/. ./Protos/ +COPY packages/cpp/ArmoniK.Api.Common/. ./ArmoniK.Api.Common/ +COPY packages/cpp/ArmoniK.Api.Client/. ./ArmoniK.Api.Client/ +COPY packages/cpp/ArmoniK.Api.Tests/. ./ArmoniK.Api.Tests/ +COPY packages/cpp/CMakeLists.txt . +COPY packages/cpp/Packaging.cmake . +COPY packages/cpp/Dependencies.cmake . + +WORKDIR /app/build +RUN cmake -DCMAKE_BUILD_TYPE=Debug -DPROTO_FILES_DIR=/app/source/Protos -DCMAKE_INSTALL_PREFIX=/app/install -DBUILD_WORKER=OFF -DBUILD_TEST=ON /app/source/ && make -j $(nproc) install +# Set the default command to build the client using CMake and make +# CMD ["sh", "-c", "cmake -DCMAKE_BUILD_TYPE=Debug -DPROTO_FILES_DIR=/app/proto -DCMAKE_INSTALL_PREFIX=/app/install -DBUILD_TEST=OFF /app/source/ -DCPACK_GENERATOR=TGZ && make -j $(nproc) install && make package -j"] + +# Uncomment the line below if you want the container to start in the bash shell by default +ENTRYPOINT ["sh", "-c", "update-ca-certificates && /app/install/bin/ArmoniK.Api.Tests"] diff --git a/packages/cpp/ArmoniK.Api.Tests/header/common.h b/packages/cpp/ArmoniK.Api.Tests/header/common.h index ad7b3656c..225b661f7 100644 --- a/packages/cpp/ArmoniK.Api.Tests/header/common.h +++ b/packages/cpp/ArmoniK.Api.Tests/header/common.h @@ -1,8 +1,9 @@ #pragma once -#include "logger/base.h" +#include "logger/logger.h" #include "objects.pb.h" #include +#include #include /** @@ -12,4 +13,43 @@ * @param default_task_options The default task options. */ void init(std::shared_ptr &channel, armonik::api::grpc::v1::TaskOptions &task_options, - armonik::api::common::logger::ILogger &logger); + armonik::api::common::logger::Logger &logger); + +/** + * + * @param service_name the name of the service providing the rpc methods + * @param rpc_name the specific rpc to be checked + * @param endpoint the call endpoint + * @param num_calls the number of call of rpc + * @return + */ +bool rpcCalled(absl::string_view service_name, absl::string_view rpc_name, int num_calls = 1); + +/** + * + * @param service_name the service name + * @param endpoint the call endpoint + * @return + */ +bool all_rpc_called(absl::string_view service_name, const std::vector &missings = {}); + +/** + * + * @param endpoint The reset endpoint + */ +void clean_up(); + +/** + * A fixture class to reset the RPC calls + */ +class MockFixture : public ::testing::Test { +protected: + static void TearDownTestSuite() { clean_up(); } + + /** + * Clean up the calls.json file + */ + void TearDown() override { + // clean_up(); + } +}; diff --git a/packages/cpp/ArmoniK.Api.Tests/source/ChannelOptionsTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/ChannelOptionsTest.cpp index bb322d23f..608b4c309 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/ChannelOptionsTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/ChannelOptionsTest.cpp @@ -1,4 +1,8 @@ +#include "channel/ChannelFactory.h" #include "common.h" +#include "logger/formatter.h" +#include "logger/logger.h" +#include "logger/writer.h" #include "options/ControlPlane.h" #include "utils/Configuration.h" #include @@ -7,6 +11,8 @@ #include "submitter/SubmitterClient.h" #include "utils/ChannelArguments.h" +using Logger = armonik::api::common::logger::Logger; + armonik::api::grpc::v1::TaskOptions default_task_options() { armonik::api::grpc::v1::TaskOptions default_task_options; default_task_options.mutable_options()->insert({"key1", "value1"}); @@ -24,41 +30,58 @@ armonik::api::grpc::v1::TaskOptions default_task_options() { return default_task_options; } -TEST(Options, no_options) { +size_t num_create_session_submitter = 0; + +/** + * Fixture class for Options, inherit from MockFixture + */ +class Options : public MockFixture {}; + +TEST_F(Options, no_options) { + Logger logger{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; armonik::api::common::utils::Configuration configuration; configuration.add_json_configuration("appsettings.json").add_env_configuration(); std::string server_address = configuration.get("Grpc__EndPoint"); - auto channel = ::grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials()); + armonik::api::client::ChannelFactory channel_factory(configuration, logger); + + auto channel = channel_factory.create_channel(); armonik::api::client::SubmitterClient client(armonik::api::grpc::v1::submitter::Submitter::NewStub(channel)); ASSERT_NO_THROW(client.create_session(default_task_options(), {})); + num_create_session_submitter++; + ASSERT_TRUE(rpcCalled("Submitter", "CreateSession", num_create_session_submitter)); } -TEST(Options, default_options) { +TEST_F(Options, default_options) { + Logger logger{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; armonik::api::common::utils::Configuration configuration; configuration.add_json_configuration("appsettings.json").add_env_configuration(); std::string server_address = configuration.get("Grpc__EndPoint"); - auto args = armonik::api::common::utils::getChannelArguments(configuration); - auto channel = ::grpc::CreateCustomChannel(server_address, grpc::InsecureChannelCredentials(), args); + armonik::api::client::ChannelFactory channel_factory(configuration, logger); + + auto channel = channel_factory.create_channel(); armonik::api::client::SubmitterClient client(armonik::api::grpc::v1::submitter::Submitter::NewStub(channel)); ASSERT_NO_THROW(client.create_session(default_task_options(), {})); + num_create_session_submitter++; + ASSERT_TRUE(rpcCalled("Submitter", "CreateSession", num_create_session_submitter)); } -TEST(Options, test_timeout) { +TEST_F(Options, test_timeout) { + Logger logger{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; armonik::api::common::utils::Configuration configuration; configuration.add_json_configuration("appsettings.json").add_env_configuration(); std::string server_address = configuration.get("Grpc__EndPoint"); configuration.set(armonik::api::common::options::ControlPlane::RequestTimeoutKey, "0:0:0.001"); // 1ms, way too short armonik::api::client::SubmitterClient client(armonik::api::grpc::v1::submitter::Submitter::NewStub( - ::grpc::CreateCustomChannel(server_address, grpc::InsecureChannelCredentials(), - armonik::api::common::utils::getChannelArguments(configuration)))); + armonik::api::client::ChannelFactory(configuration, logger).create_channel())); ASSERT_ANY_THROW(client.create_session(default_task_options(), {})); configuration.set(armonik::api::common::options::ControlPlane::RequestTimeoutKey, "0:0:10"); // 10s, should have finished by now client = armonik::api::client::SubmitterClient(armonik::api::grpc::v1::submitter::Submitter::NewStub( - ::grpc::CreateCustomChannel(server_address, grpc::InsecureChannelCredentials(), - armonik::api::common::utils::getChannelArguments(configuration)))); + armonik::api::client::ChannelFactory(configuration, logger).create_channel())); ASSERT_NO_THROW(client.create_session(default_task_options(), {})); + num_create_session_submitter++; + ASSERT_TRUE(rpcCalled("Submitter", "CreateSession", num_create_session_submitter)); } diff --git a/packages/cpp/ArmoniK.Api.Tests/source/EventsClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/EventsClientTest.cpp index 6a998f49a..df3cb26f5 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/EventsClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/EventsClientTest.cpp @@ -12,7 +12,13 @@ using Logger = armonik::api::common::logger::Logger; -TEST(Events, getEvents) { +/** + * Fixture class for versions, inherit from MockFixture + */ +class Events : public MockFixture {}; + +TEST_F(Events, getEvents) { + GTEST_SKIP() << "Mock server must return something "; Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -31,4 +37,13 @@ TEST(Events, getEvents) { ASSERT_NO_THROW(result_client.upload_result_data(session_id, result_id, "name")); ASSERT_NO_THROW(client.wait_for_result_availability(session_id, {result_id, payload_id})); ASSERT_EQ(result_client.download_result_data(session_id, result_id), "name"); + ASSERT_TRUE(rpcCalled("Events", "GetEvents")); +} + +/** + * This test should be the last to run in the suit, which is why its name is prefixed with "z". + */ +TEST_F(Events, z_service_fully_implemented) { + std::vector missing_rpcs{"GetEvents"}; + ASSERT_TRUE(all_rpc_called("Events", missing_rpcs)); } diff --git a/packages/cpp/ArmoniK.Api.Tests/source/MockTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/MockTest.cpp new file mode 100644 index 000000000..ec63cfce6 --- /dev/null +++ b/packages/cpp/ArmoniK.Api.Tests/source/MockTest.cpp @@ -0,0 +1,177 @@ +#include +#include +#include +#include + +#include "common.h" +#include "exceptions/ArmoniKApiException.h" +#include "logger/formatter.h" +#include "logger/logger.h" +#include "logger/writer.h" +#include "options/ControlPlane.h" + +#include "channel/ChannelFactory.h" +#include "sessions/SessionsClient.h" + +using Logger = armonik::api::common::logger::Logger; +using namespace simdjson; + +size_t WriteCallback(void *ptr, size_t size, size_t num_elt, std::string *data) { + data->append((char *)ptr, size * num_elt); + return size * num_elt; +} + +bool rpcCalled(absl::string_view service_name, absl::string_view rpc_name, int num_calls) { + + armonik::api::common::utils::Configuration config; + config.add_json_configuration("appsettings.json").add_env_configuration(); + std::string call_endpoint = config.get("Http__Endpoint") + "/calls.json"; + auto curl = curl_easy_init(); + std::string read_buffer; + if (curl) { + curl_easy_setopt(curl, CURLOPT_URL, call_endpoint.c_str()); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); + if (!config.get("GrpcClient__CaCert").empty()) { + curl_easy_setopt(curl, CURLOPT_CAINFO, config.get("GrpcClient__CaCert").c_str()); + } else { + curl_easy_setopt(curl, CURLOPT_CAINFO, NULL); + } + if (config.get_control_plane().hasClientCertificate()) { + curl_easy_setopt(curl, CURLOPT_SSLCERT, config.get("GrpcClient__CertPem").c_str()); + curl_easy_setopt(curl, CURLOPT_SSLKEY, config.get("GrpcClient__KeyPem").c_str()); + } + curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &read_buffer); + + auto res = curl_easy_perform(curl); + + if (res != CURLE_OK) { + std::cout << "Request failed: " << curl_easy_strerror(res) << std::endl; + } + curl_easy_cleanup(curl); + } + + dom::parser parser; + + try { + dom::element response_json = parser.parse(read_buffer); + if (response_json[service_name.data()][rpc_name.data()].get_int64() == num_calls) { + return true; + } + std::cout << "Given number of RPC calls " << num_calls << std::endl; + std::cout << "Actual number of RPC calls " << response_json[service_name.data()][rpc_name.data()] << std::endl; + } catch (const simdjson_error &e) { + std::cerr << "Failed to parse JSON: " << e.what() << std::endl; + } + return false; +} + +bool all_rpc_called(absl::string_view service_name, const std::vector &missings) { + armonik::api::common::utils::Configuration config; + config.add_json_configuration("appsettings.json").add_env_configuration(); + std::string call_endpoint = config.get("Http__Endpoint") + "/calls.json"; + auto curl = curl_easy_init(); + std::string read_buffer; + if (curl) { + curl_easy_setopt(curl, CURLOPT_URL, call_endpoint.c_str()); + if (!config.get("GrpcClient__CaCert").empty()) { + curl_easy_setopt(curl, CURLOPT_CAINFO, config.get("GrpcClient__CaCert").c_str()); + } else { + curl_easy_setopt(curl, CURLOPT_CAINFO, NULL); + } + if (config.get_control_plane().hasClientCertificate()) { + curl_easy_setopt(curl, CURLOPT_SSLCERT, config.get("GrpcClient__CertPem").c_str()); + curl_easy_setopt(curl, CURLOPT_SSLKEY, config.get("GrpcClient__KeyPem").c_str()); + } + curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &read_buffer); + + auto res = curl_easy_perform(curl); + + if (res != CURLE_OK) { + std::cout << "Request failed: " << curl_easy_strerror(res) << std::endl; + } + curl_easy_cleanup(curl); + } + + dom::parser parser; + + try { + dom::element response_json = parser.parse(read_buffer); + + std::vector missing_rpcs; + for (auto rpc_name : response_json[service_name.data()].get_array()) { + if (response_json[service_name.data()][rpc_name].get_int64() == 0) { + missing_rpcs.emplace_back(rpc_name.get_string().value().data()); + } + } + if (!missing_rpcs.empty()) { + if (missing_rpcs == missings) { + return true; + } + std::cout << "RPCs not implemented in " << service_name << " service: \n"; + for (const auto &str : missing_rpcs) { + std::cout << str << '\n'; + } + return false; + } + + } catch (const simdjson_error &e) { + std::cerr << "Failed to parse JSON: " << e.what() << std::endl; + } + return true; +} + +void clean_up() { + armonik::api::common::utils::Configuration config; + config.add_json_configuration("appsettings.json").add_env_configuration(); + std::string reset_endpoint = config.get("Http__Endpoint") + "/reset"; + auto curl = curl_easy_init(); + std::string read_buffer; + if (curl) { + curl_easy_setopt(curl, CURLOPT_URL, reset_endpoint.c_str()); + if (!config.get("GrpcClient__CaCert").empty()) { + curl_easy_setopt(curl, CURLOPT_CAINFO, config.get("GrpcClient__CaCert").c_str()); + } else { + curl_easy_setopt(curl, CURLOPT_CAINFO, NULL); + } + if (config.get_control_plane().hasClientCertificate()) { + curl_easy_setopt(curl, CURLOPT_SSLCERT, config.get("GrpcClient__CertPem").c_str()); + curl_easy_setopt(curl, CURLOPT_SSLKEY, config.get("GrpcClient__KeyPem").c_str()); + } + curl_easy_setopt(curl, CURLOPT_POST, 1L); + curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + auto res = curl_easy_perform(curl); + if (res != CURLE_OK) { + std::cout << "Request failed: " << curl_easy_strerror(res) << std::endl; + } + curl_easy_cleanup(curl); + } +} + +using Logger = armonik::api::common::logger::Logger; + +TEST_F(MockFixture, connect) { + Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; + std::shared_ptr<::grpc::Channel> channel; + armonik::api::grpc::v1::TaskOptions task_options; + armonik::api::common::utils::Configuration configuration; + // auto server = std::make_shared(configuration_t); + + configuration.add_json_configuration("appsettings.json").add_env_configuration(); + + std::string server_address = configuration.get("Grpc__EndPoint"); + + armonik::api::client::ChannelFactory channel_factory(configuration, log); + + channel = channel_factory.create_channel(); + + armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); + + std::string response; + ASSERT_NO_THROW(response = client.create_session(task_options)); + ASSERT_FALSE(response.empty()); + ASSERT_TRUE(rpcCalled("Sessions", "CreateSession")); +} diff --git a/packages/cpp/ArmoniK.Api.Tests/source/PartitionsClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/PartitionsClientTest.cpp index f5ea9eca2..333c49dd7 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/PartitionsClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/PartitionsClientTest.cpp @@ -10,7 +10,12 @@ using Logger = armonik::api::common::logger::Logger; -TEST(Partitions, can_get_partition) { +/** + * Fixture class for partition, inherit from MockFixture + */ +class Partitions : public MockFixture {}; + +TEST_F(Partitions, can_get_partition) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -21,13 +26,10 @@ TEST(Partitions, can_get_partition) { armonik::api::grpc::v1::partitions::PartitionRaw partition; ASSERT_NO_THROW(partition = client.get_partition(task_options.partition_id())); - ASSERT_EQ(partition.id(), task_options.partition_id()); - ASSERT_EQ(partition.pod_max(), 100); - ASSERT_EQ(partition.pod_reserved(), 1); - ASSERT_EQ(partition.priority(), 1); + ASSERT_TRUE(rpcCalled("Partitions", "GetPartition")); } -TEST(Partitions, can_list_partitions) { +TEST_F(Partitions, can_list_partitions) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -46,11 +48,15 @@ TEST(Partitions, can_list_partitions) { int total; - std::vector partitions = client.list_partitions(filters, total); + std::vector partitions; + ASSERT_NO_THROW(partitions = client.list_partitions(filters, total)); for (auto &&partition : partitions) { std::cout << *partition.mutable_id() << std::endl; } - ASSERT_TRUE(!partitions.empty()); - ASSERT_EQ(partitions.size(), 1); - ASSERT_EQ(partitions.size(), total); + ASSERT_TRUE(rpcCalled("Partitions", "ListPartitions")); } + +/** + * This test should be the last to run in the suit, which is why its name is prefixed with "z". + */ +TEST_F(Partitions, z_service_fully_implemented) { all_rpc_called("Partitions"); } diff --git a/packages/cpp/ArmoniK.Api.Tests/source/ResultsClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/ResultsClientTest.cpp index e5231ec83..4b798f776 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/ResultsClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/ResultsClientTest.cpp @@ -11,7 +11,15 @@ using Logger = armonik::api::common::logger::Logger; -TEST(Results, test_results_created) { +size_t num_list_result = 0; +size_t num_create_result = 0; + +/** + * Fixture class for result, inherit from MockFixture + */ +class Results : public MockFixture {}; + +TEST_F(Results, test_results_created) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -21,12 +29,11 @@ TEST(Results, test_results_created) { auto client = armonik::api::client::ResultsClient(armonik::api::grpc::v1::results::Results::NewStub(channel)); auto session_id = armonik::api::client::SessionsClient(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)) .create_session(task_options); - auto map = client.create_results_metadata(session_id, std::vector{"0", "1", "2", "3"}); - ASSERT_TRUE(!map.empty()); - ASSERT_EQ(map.size(), 4); + ASSERT_NO_THROW(client.create_results_metadata(session_id, std::vector{"0", "1", "2", "3"})); + ASSERT_TRUE(rpcCalled("Results", "CreateResultsMetaData")); } -TEST(Results, test_results_list) { +TEST_F(Results, test_results_list) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -36,9 +43,7 @@ TEST(Results, test_results_list) { auto client = armonik::api::client::ResultsClient(armonik::api::grpc::v1::results::Results::NewStub(channel)); auto session_id = armonik::api::client::SessionsClient(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)) .create_session(task_options); - auto map = client.create_results_metadata(session_id, std::vector{"0", "1", "2", "3"}); - ASSERT_TRUE(!map.empty()); - ASSERT_EQ(map.size(), 4); + ASSERT_NO_THROW(client.create_results_metadata(session_id, std::vector{"0", "1", "2", "3"})); armonik::api::grpc::v1::results::Filters filters; armonik::api::grpc::v1::results::FilterField filter_field; @@ -48,12 +53,12 @@ TEST(Results, test_results_list) { filter_field.mutable_filter_string()->set_operator_(armonik::api::grpc::v1::FILTER_STRING_OPERATOR_EQUAL); *filters.mutable_or_()->Add()->mutable_and_()->Add() = filter_field; int total; - auto list = client.list_results(filters, total); - ASSERT_EQ(list.size(), 4); - ASSERT_EQ(list.size(), total); + ASSERT_NO_THROW(client.list_results(filters, total)); + num_list_result++; + ASSERT_TRUE(rpcCalled("Results", "ListResults", num_list_result)); } -TEST(Results, test_results_list_small_page) { +TEST_F(Results, test_results_list_small_page) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -63,9 +68,7 @@ TEST(Results, test_results_list_small_page) { auto client = armonik::api::client::ResultsClient(armonik::api::grpc::v1::results::Results::NewStub(channel)); auto session_id = armonik::api::client::SessionsClient(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)) .create_session(task_options); - auto map = client.create_results_metadata(session_id, std::vector{"0", "1", "2", "3", "4"}); - ASSERT_TRUE(!map.empty()); - ASSERT_EQ(map.size(), 5); + ASSERT_NO_THROW(client.create_results_metadata(session_id, std::vector{"0", "1", "2", "3", "4"})); armonik::api::grpc::v1::results::Filters filters; armonik::api::grpc::v1::results::FilterField filter_field; @@ -75,16 +78,16 @@ TEST(Results, test_results_list_small_page) { filter_field.mutable_filter_string()->set_operator_(armonik::api::grpc::v1::FILTER_STRING_OPERATOR_EQUAL); *filters.mutable_or_()->Add()->mutable_and_()->Add() = filter_field; int total; - auto list = client.list_results(filters, total, 0, 2); - ASSERT_EQ(list.size(), 2); - ASSERT_EQ(total, 5); + ASSERT_NO_THROW(client.list_results(filters, total, 0, 2)); + num_list_result++; - list = client.list_results(filters, total, -1, 2); - ASSERT_EQ(list.size(), 5); - ASSERT_EQ(total, 5); + ASSERT_NO_THROW(client.list_results(filters, total, -1, 2)); + num_list_result++; + + ASSERT_TRUE(rpcCalled("Results", "ListResults", num_list_result)); } -TEST(Results, test_results_create_with_data_vector) { +TEST_F(Results, test_results_create_with_data_vector) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -95,13 +98,12 @@ TEST(Results, test_results_create_with_data_vector) { auto session_id = armonik::api::client::SessionsClient(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)) .create_session(task_options); std::vector> vec{{"0", "TestPayload"}}; - auto map = client.create_results(session_id, vec); - ASSERT_EQ(map.size(), 1); - ASSERT_NO_THROW(map.at("0")); - ASSERT_EQ(client.download_result_data(session_id, map.at("0")), "TestPayload"); + ASSERT_NO_THROW(client.create_results(session_id, vec)); + num_create_result++; + ASSERT_TRUE(rpcCalled("Results", "CreateResults", num_create_result)); } -TEST(Results, test_results_create_with_data_map) { +TEST_F(Results, test_results_create_with_data_map) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -113,13 +115,12 @@ TEST(Results, test_results_create_with_data_map) { .create_session(task_options); std::map name_payload; name_payload["0"] = "TestPayload"; - auto map = client.create_results(session_id, std::move(name_payload)); - ASSERT_EQ(map.size(), 1); - ASSERT_NO_THROW(map.at("0")); - ASSERT_EQ(client.download_result_data(session_id, map.at("0")), "TestPayload"); + ASSERT_NO_THROW(client.create_results(session_id, std::move(name_payload))); + num_create_result++; + ASSERT_TRUE(rpcCalled("Results", "CreateResults", num_create_result)); } -TEST(Results, test_results_create_with_data_unordered_map) { +TEST_F(Results, test_results_create_with_data_unordered_map) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -131,13 +132,12 @@ TEST(Results, test_results_create_with_data_unordered_map) { .create_session(task_options); std::unordered_map name_payload; name_payload["0"] = "TestPayload"; - auto map = client.create_results(session_id, std::move(name_payload)); - ASSERT_EQ(map.size(), 1); - ASSERT_NO_THROW(map.at("0")); - ASSERT_EQ(client.download_result_data(session_id, map.at("0")), "TestPayload"); + ASSERT_NO_THROW(client.create_results(session_id, std::move(name_payload))); + num_create_result++; + ASSERT_TRUE(rpcCalled("Results", "CreateResults", num_create_result)); } -TEST(Results, test_results_create_with_data_string_view) { +TEST_F(Results, test_results_create_with_data_string_view) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -151,15 +151,13 @@ TEST(Results, test_results_create_with_data_string_view) { std::string fill_str = "TestPayloadTestPayload2"; name_payload.emplace_back("0", absl::string_view(fill_str.c_str(), 11)); name_payload.emplace_back("1", absl::string_view(fill_str.c_str() + 11, 12)); - auto map = client.create_results(session_id, name_payload.begin(), name_payload.end()); - ASSERT_EQ(map.size(), 2); - ASSERT_NO_THROW(map.at("0")); - ASSERT_NO_THROW(map.at("1")); - ASSERT_EQ(client.download_result_data(session_id, map.at("0")), std::string("TestPayload", 0, 11)); - ASSERT_EQ(client.download_result_data(session_id, map.at("1")), std::string("TestPayload2", 0, 12)); + ASSERT_NO_THROW(client.create_results(session_id, name_payload.begin(), name_payload.end())); + num_create_result++; + ASSERT_TRUE(rpcCalled("Results", "CreateResults", num_create_result)); } -TEST(Results, test_results_upload_download) { +TEST_F(Results, test_results_upload_download) { + GTEST_SKIP() << "Mock server must return something "; Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -175,3 +173,12 @@ TEST(Results, test_results_upload_download) { ASSERT_NO_THROW(client.upload_result_data(session_id, map.at("0"), "TestPayload")); ASSERT_EQ(client.download_result_data(session_id, map.at("0")), "TestPayload"); } + +/** + * This test should be the last to run in the suit, which is why its name is prefixed with "z". + */ +TEST_F(Results, z_service_fully_implemented) { + std::vector missing_rpcs{"DeleteResultsData", "DownloadResultData", "GetOwnerTaskId", "GetResult", + "GetServiceConfiguration", "UploadResultData", "WatchResults"}; + ASSERT_TRUE(all_rpc_called("Results", missing_rpcs)); +} diff --git a/packages/cpp/ArmoniK.Api.Tests/source/SessionClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/SessionClientTest.cpp index a48ba9829..657d9a1e9 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/SessionClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/SessionClientTest.cpp @@ -9,7 +9,15 @@ using Logger = armonik::api::common::logger::Logger; -TEST(Sessions, can_create_session) { +size_t num_create_session = 0; +size_t num_list_session = 0; + +/** + * Fixture class for session, inherit from MockFixture + */ +class Sessions : public MockFixture {}; + +TEST_F(Sessions, can_create_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -19,12 +27,12 @@ TEST(Sessions, can_create_session) { std::string response; ASSERT_NO_THROW(response = client.create_session(task_options)); + num_create_session++; ASSERT_FALSE(response.empty()); - - ASSERT_TRUE(client.get_session(response).status() == armonik::api::grpc::v1::session_status::SESSION_STATUS_RUNNING); + ASSERT_TRUE(rpcCalled("Sessions", "CreateSession", num_create_session)); } -TEST(Sessions, can_cancel_session) { +TEST_F(Sessions, can_cancel_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -33,17 +41,15 @@ TEST(Sessions, can_cancel_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); - ASSERT_TRUE(client.get_session(session_id).status() == - armonik::api::grpc::v1::session_status::SESSION_STATUS_RUNNING); + num_create_session++; armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.cancel_session(session_id)); ASSERT_EQ(response.session_id(), session_id); - ASSERT_TRUE(client.get_session(session_id).status() == - armonik::api::grpc::v1::session_status::SESSION_STATUS_CANCELLED); + ASSERT_TRUE(rpcCalled("Sessions", "CancelSession")); } -TEST(Sessions, can_get_session) { +TEST_F(Sessions, can_get_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -52,13 +58,15 @@ TEST(Sessions, can_get_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.get_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "GetSession")); } -TEST(Sessions, can_list_sessions) { +TEST_F(Sessions, can_list_sessions) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -69,16 +77,17 @@ TEST(Sessions, can_list_sessions) { size_t expected_n_sessions = 5; for (size_t i = 0; i < expected_n_sessions; i++) { ASSERT_NO_THROW(client.create_session(task_options)); + num_create_session++; } armonik::api::grpc::v1::sessions::Filters filters; int total; - auto list = client.list_sessions(filters, total); - ASSERT_GE(list.size(), expected_n_sessions); - ASSERT_GE(total, expected_n_sessions); + ASSERT_NO_THROW(client.list_sessions(filters, total)); + num_list_session++; + ASSERT_TRUE(rpcCalled("Sessions", "ListSessions", num_list_session)); } -TEST(Sessions, can_list_sessions_small_page) { +TEST_F(Sessions, can_list_sessions_small_page) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -89,20 +98,20 @@ TEST(Sessions, can_list_sessions_small_page) { size_t expected_n_sessions = 5; for (size_t i = 0; i < expected_n_sessions; i++) { ASSERT_NO_THROW(client.create_session(task_options)); + num_create_session++; } armonik::api::grpc::v1::sessions::Filters filters; int total; - auto list = client.list_sessions(filters, total, 0, 2); - ASSERT_EQ(list.size(), 2); - ASSERT_GE(total, expected_n_sessions); - - list = client.list_sessions(filters, total, -1, 2); - ASSERT_GE(list.size(), expected_n_sessions); - ASSERT_GE(total, expected_n_sessions); + // auto list = client.list_sessions(filters, total, 0, 2); + ASSERT_NO_THROW(client.list_sessions(filters, total, 0, 2)); + num_list_session++; + ASSERT_NO_THROW(client.list_sessions(filters, total, -1, 2)); + num_list_session++; + ASSERT_TRUE(rpcCalled("Sessions", "ListSessions", num_list_session)); } -TEST(Sessions, can_pause_session) { +TEST_F(Sessions, can_pause_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -111,13 +120,15 @@ TEST(Sessions, can_pause_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.pause_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "PauseSession")); } -TEST(Sessions, can_resume_session) { +TEST_F(Sessions, can_resume_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -126,15 +137,17 @@ TEST(Sessions, can_resume_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; ASSERT_NO_THROW(client.pause_session(session_id)); armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.resume_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "ResumeSession")); } -TEST(Sessions, can_purge_session) { +TEST_F(Sessions, can_purge_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -143,15 +156,17 @@ TEST(Sessions, can_purge_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; ASSERT_NO_THROW(client.close_session(session_id)); armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.purge_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "PurgeSession")); } -TEST(Sessions, can_delete_session) { +TEST_F(Sessions, can_delete_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -160,13 +175,15 @@ TEST(Sessions, can_delete_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.delete_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "DeleteSession")); } -TEST(Sessions, can_stop_submission) { +TEST_F(Sessions, can_stop_submission) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -175,13 +192,15 @@ TEST(Sessions, can_stop_submission) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.stop_submission_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "StopSubmission")); } -TEST(Sessions, can_close_session) { +TEST_F(Sessions, can_close_session) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -190,8 +209,15 @@ TEST(Sessions, can_close_session) { armonik::api::client::SessionsClient client(armonik::api::grpc::v1::sessions::Sessions::NewStub(channel)); std::string session_id = client.create_session(task_options); + num_create_session++; armonik::api::grpc::v1::sessions::SessionRaw response; ASSERT_NO_THROW(response = client.close_session(session_id)); ASSERT_EQ(response.session_id(), session_id); + ASSERT_TRUE(rpcCalled("Sessions", "CloseSession", 2)); } + +/** + * This test should be the last to run in the suit, which is why its name is prefixed with "z". + */ +TEST_F(Sessions, z_service_fully_implemented) { ASSERT_TRUE(all_rpc_called("Sessions")); } diff --git a/packages/cpp/ArmoniK.Api.Tests/source/SubmitterClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/SubmitterClientTest.cpp index f603a578f..2cd0001f3 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/SubmitterClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/SubmitterClientTest.cpp @@ -40,7 +40,12 @@ using ::testing::AtLeast; namespace logger = armonik::api::common::logger; -TEST(testMock, createSession) { +/** + * Fixture class for submitter, inherit from MockFixture + */ +class testMock : public MockFixture {}; + +TEST_F(testMock, createSessionSubmitter) { // MockStubInterface stub; std::shared_ptr channel; logger::Logger log{logger::writer_console(), logger::formatter_plain(true)}; @@ -64,9 +69,11 @@ TEST(testMock, createSession) { std::cout << "create_session response: " << session_id << std::endl; ASSERT_FALSE(session_id.empty()); + ASSERT_TRUE(rpcCalled("Submitter", "CreateSession")); } -TEST(testMock, submitTask) { +TEST_F(testMock, submitTask) { + GTEST_SKIP() << "Testing Mock server"; logger::Logger log{logger::writer_console(), logger::formatter_plain(true)}; @@ -156,7 +163,8 @@ TEST(testMock, submitTask) { log.info("Stopping client...OK"); } -TEST(testMock, testWorker) { +TEST_F(testMock, testWorker) { + GTEST_SKIP() << "Testing Mock server"; logger::Logger log{logger::writer_console(), logger::formatter_plain(true)}; std::shared_ptr channel; @@ -209,7 +217,8 @@ TEST(testMock, testWorker) { ASSERT_TRUE(!result_payload.empty()); } -TEST(testMock, getResult) { +TEST_F(testMock, getResult) { + GTEST_SKIP() << "Testing Mock server"; logger::Logger log{logger::writer_console(), logger::formatter_plain(true)}; // MockStubInterface stub; std::shared_ptr channel; diff --git a/packages/cpp/ArmoniK.Api.Tests/source/TasksClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/TasksClientTest.cpp index bd8553e4b..52c7a505d 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/TasksClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/TasksClientTest.cpp @@ -25,7 +25,12 @@ armonik::api::grpc::v1::tasks::Filters get_session_id_filter(std::string session return filters; } -TEST(Tasks, submit_tasks_test) { +/** + * Fixture class for task, inherit from MockFixture + */ +class Tasks : public MockFixture {}; + +TEST_F(Tasks, submit_tasks_test) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -48,32 +53,23 @@ TEST(Tasks, submit_tasks_test) { std::vector tasks_simple; ASSERT_NO_THROW(tasks_simple = client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {{result_id}}}})); - ASSERT_EQ(tasks_simple.size(), 1); + // ASSERT_EQ(tasks_simple.size(), 1); std::vector tasks_submit_override; ASSERT_NO_THROW(tasks_submit_override = client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {{result_id}}}}, task_options_submit)); - ASSERT_EQ(tasks_submit_override.size(), 1); + // ASSERT_EQ(tasks_submit_override.size(), 1); std::vector tasks_submit_unique_override; ASSERT_NO_THROW(tasks_submit_unique_override = client.submit_tasks( session_id, {armonik::api::common::TaskCreation{payload_id, {{result_id}}, {}, task_options_unique}}, task_options_submit)); - ASSERT_NO_THROW(tasks_submit_unique_override.push_back(client.submit_tasks( - session_id, {armonik::api::common::TaskCreation{payload_id, {{result_id}}, {}, task_options_unique}})[0])); - ASSERT_EQ(tasks_submit_unique_override.size(), 2); - - ASSERT_EQ(client.get_task(tasks_simple[0].task_id).options().priority(), task_options.priority()); - ASSERT_EQ(client.get_task(tasks_submit_override[0].task_id).options().priority(), task_options_submit.priority()); - ASSERT_EQ(client.get_task(tasks_submit_unique_override[0].task_id).options().priority(), - task_options_unique.priority()); - ASSERT_EQ(client.get_task(tasks_submit_unique_override[1].task_id).options().priority(), - task_options_unique.priority()); + ASSERT_TRUE(rpcCalled("Tasks", "SubmitTasks", 3)); } -TEST(Tasks, count_tasks_test) { +TEST_F(Tasks, count_tasks_test) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -92,23 +88,14 @@ TEST(Tasks, count_tasks_test) { std::map status_count; ASSERT_NO_THROW(status_count = client.count_tasks_by_status(filters)); - ASSERT_EQ(std::accumulate(status_count.begin(), status_count.end(), 0, - [](int a, std::pair p) { - return a + p.second; - }), - 0); client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {{result_id}}}}); ASSERT_NO_THROW(status_count = client.count_tasks_by_status(filters)); - ASSERT_EQ(std::accumulate(status_count.begin(), status_count.end(), 0, - [](int a, std::pair p) { - return a + p.second; - }), - 1); + ASSERT_TRUE(rpcCalled("Tasks", "CountTasksByStatus", 2)); } -TEST(Tasks, get_result_ids_test) { +TEST_F(Tasks, get_result_ids_test) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -123,16 +110,14 @@ TEST(Tasks, get_result_ids_test) { auto result_id = result_client.create_results_metadata(session_id, {"result"})["result"]; auto client = armonik::api::client::TasksClient(armonik::api::grpc::v1::tasks::Tasks::NewStub(channel)); - auto task_id = - client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {result_id}}})[0].task_id; + auto task_id = client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {result_id}}}); std::map> tid_rids; - ASSERT_NO_THROW(tid_rids = client.get_result_ids({task_id})); - ASSERT_EQ(tid_rids.at(task_id).size(), 1); - ASSERT_EQ(tid_rids.at(task_id).at(0), result_id); + ASSERT_NO_THROW(tid_rids = client.get_result_ids({"task_id"})); + ASSERT_TRUE(rpcCalled("Tasks", "GetResultIds")); } -TEST(Tasks, get_task_test) { +TEST_F(Tasks, get_task_test) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -147,15 +132,14 @@ TEST(Tasks, get_task_test) { auto result_id = result_client.create_results_metadata(session_id, {"result"})["result"]; auto client = armonik::api::client::TasksClient(armonik::api::grpc::v1::tasks::Tasks::NewStub(channel)); - auto task_id = - client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {result_id}}})[0].task_id; + auto task_id = client.submit_tasks(session_id, {armonik::api::common::TaskCreation{payload_id, {result_id}}}); armonik::api::grpc::v1::tasks::TaskDetailed details; - ASSERT_NO_THROW(details = client.get_task(task_id)); - ASSERT_EQ(details.id(), task_id); + ASSERT_NO_THROW(details = client.get_task("task_id")); + ASSERT_TRUE(rpcCalled("Tasks", "GetTask")); } -TEST(Tasks, cancel_tasks_test) { +TEST_F(Tasks, cancel_tasks_test) { GTEST_SKIP() << "Core bug #523"; Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; @@ -181,7 +165,8 @@ TEST(Tasks, cancel_tasks_test) { ASSERT_EQ(client.cancel_tasks({task_id}).at(0).status(), armonik::api::grpc::v1::task_status::TASK_STATUS_CANCELLED); } -TEST(Tasks, list_tasks_test) { +TEST_F(Tasks, list_tasks_test) { + GTEST_SKIP() << "Mock must return something "; Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -201,9 +186,11 @@ TEST(Tasks, list_tasks_test) { int total; ASSERT_EQ(client.list_tasks(get_session_id_filter(session_id), total).size(), 1); ASSERT_EQ(total, 1); + ASSERT_TRUE(rpcCalled("Tasks", "ListTasks")); } -TEST(Tasks, list_tasks_detailed_test) { +TEST_F(Tasks, list_tasks_detailed_test) { + GTEST_SKIP() << "Mock must return something "; Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -223,4 +210,13 @@ TEST(Tasks, list_tasks_detailed_test) { int total; ASSERT_EQ(client.list_tasks_detailed(get_session_id_filter(session_id), total).size(), 1); ASSERT_EQ(total, 1); + ASSERT_TRUE(rpcCalled("Tasks", "ListTasksDetailed")); +} + +/** + * This test should be the last to run in the suit, which is why its name is prefixed with "z". + */ +TEST_F(Tasks, z_service_fully_implemented) { + std::vector missing_rpcs{"CancelTasks", "ListTasks", "ListTasksDetailed"}; + ASSERT_TRUE(all_rpc_called("Tasks", missing_rpcs)); } diff --git a/packages/cpp/ArmoniK.Api.Tests/source/VersionsClientTest.cpp b/packages/cpp/ArmoniK.Api.Tests/source/VersionsClientTest.cpp index 5d98832cc..90f5b9c0a 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/VersionsClientTest.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/VersionsClientTest.cpp @@ -9,7 +9,12 @@ using Logger = armonik::api::common::logger::Logger; -TEST(Versions, can_list_versions) { +/** + * Fixture class for versions, inherit from MockFixture + */ +class Versions : public MockFixture {}; + +TEST_F(Versions, can_list_versions) { Logger log{armonik::api::common::logger::writer_console(), armonik::api::common::logger::formatter_plain(true)}; std::shared_ptr<::grpc::Channel> channel; armonik::api::grpc::v1::TaskOptions task_options; @@ -22,7 +27,10 @@ TEST(Versions, can_list_versions) { std::cout << "API version: " << versions.api << "\n" << "Core version: " << versions.core << std::endl; - - ASSERT_NE(versions.api, "Unknown"); - ASSERT_NE(versions.core, "Unknown"); + ASSERT_TRUE(rpcCalled("Versions", "ListVersions")); } + +/** + * This test should be the last to run in the suit, which is why its name is prefixed with "z". + */ +TEST_F(Versions, z_service_fully_implemented) { all_rpc_called("Versions"); } diff --git a/packages/cpp/ArmoniK.Api.Tests/source/common.cpp b/packages/cpp/ArmoniK.Api.Tests/source/common.cpp index 0a404bc5c..588ff75d0 100644 --- a/packages/cpp/ArmoniK.Api.Tests/source/common.cpp +++ b/packages/cpp/ArmoniK.Api.Tests/source/common.cpp @@ -1,4 +1,5 @@ #include "common.h" +#include "channel/ChannelFactory.h" #include "utils/Configuration.h" #include @@ -9,20 +10,17 @@ * @param default_task_options The default task options. */ void init(std::shared_ptr<::grpc::Channel> &channel, armonik::api::grpc::v1::TaskOptions &default_task_options, - armonik::api::common::logger::ILogger &logger) { + armonik::api::common::logger::Logger &logger) { armonik::api::common::utils::Configuration configuration; - // auto server = std::make_shared(configuration_t); configuration.add_json_configuration("appsettings.json").add_env_configuration(); - std::string server_address = configuration.get("Grpc__EndPoint"); + armonik::api::client::ChannelFactory channel_factory(configuration, logger); - logger.info(" Server address {address}", {{"address", server_address}}); + channel = channel_factory.create_channel(); - channel = ::grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials()); - - // stub_ = Submitter::NewStub(channel); + logger.info(" Server address {address}", {{"address", configuration.get("GrpcClient__Endpoint")}}); default_task_options.mutable_options()->insert({"key1", "value1"}); default_task_options.mutable_options()->insert({"key2", "value2"}); diff --git a/packages/cpp/ArmoniK.Api.Worker/CMakeLists.txt b/packages/cpp/ArmoniK.Api.Worker/CMakeLists.txt index 9f0821f53..4a1523e48 100644 --- a/packages/cpp/ArmoniK.Api.Worker/CMakeLists.txt +++ b/packages/cpp/ArmoniK.Api.Worker/CMakeLists.txt @@ -33,7 +33,8 @@ endif() find_package(gRPC CONFIG REQUIRED) find_package(Threads) -target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++_unsecure ArmoniK.Api.Common ${PROTO_TARGET}) +target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf gRPC::grpc++ ArmoniK.Api.Common ${PROTO_TARGET}) +target_link_options(${PROJECT_NAME} PUBLIC "-Wl,--copy-dt-needed-entries") target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/packages/cpp/CMakeLists.txt b/packages/cpp/CMakeLists.txt index 3afd2550c..92f11bf40 100644 --- a/packages/cpp/CMakeLists.txt +++ b/packages/cpp/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.22) if (POLICY CMP0135) cmake_policy(SET CMP0135 OLD) endif () -set(version 3.19.0) +set(version 3.22.0) string(REGEX MATCHALL "[0-9]+" version_list ${version}) list(GET version_list 0 version_major) list(GET version_list 1 version_minor) diff --git a/packages/cpp/tools/BuildEnv.Dockerfile b/packages/cpp/tools/BuildEnv.Dockerfile index 30cea8377..5a4fe4d3b 100644 --- a/packages/cpp/tools/BuildEnv.Dockerfile +++ b/packages/cpp/tools/BuildEnv.Dockerfile @@ -20,6 +20,7 @@ RUN apt-get update && DEBIAN_FRONTEND="noninteractive" TZ="Europe/London" apt-ge libgrpc++-dev \ libprotobuf-dev \ libfmt-dev \ + libcurl4-openssl-dev \ && apt-get clean ENV protobuf_BUILD_TESTS=OFF diff --git a/packages/cpp/tools/build_test.sh b/packages/cpp/tools/build_test.sh new file mode 100755 index 000000000..b829bad2e --- /dev/null +++ b/packages/cpp/tools/build_test.sh @@ -0,0 +1,7 @@ +#! /bin/sh + +script_path="$(dirname "${BASH_SOURCE:-$0}")" +working_dir="$(realpath "${script_path}/../../../" )" +dockerfile="${1:-"${working_dir}/packages/cpp/ArmoniK.Api.Tests/Dockerfile"}" +image_tag="${2:-"armonik-api-cpp:0.1.0"}" +docker build --rm -t "$image_tag" -f "$dockerfile" --progress plain "$working_dir" diff --git a/packages/cpp/tools/run_test.sh b/packages/cpp/tools/run_test.sh new file mode 100755 index 000000000..6da7ac84a --- /dev/null +++ b/packages/cpp/tools/run_test.sh @@ -0,0 +1,13 @@ +#! /bin/sh + +set -x +script_path="$(dirname "${BASH_SOURCE:-$0}")" +CertFolder="$(realpath "$script_path/../../csharp/certs" )" +docker run --rm -t --network host -v "$CertFolder:/app/source/certs" -v "/usr/local/share/ca-certificates/:/usr/local/share/ca-certificates" \ + -e GrpcClient__Endpoint \ + -e Http__Endpoint="${Http__Endpoint:-$Grpc__Endpoint}" \ + ${GrpcClient__AllowUnsafeConnection:+-e GrpcClient__AllowUnsafeConnection} \ + ${GrpcClient__CaCert:+-e GrpcClient__CaCert="/app/source/certs/server1-ca.pem"} \ + ${GrpcClient__CertPem:+-e GrpcClient__CertPem="/app/source/certs/client.pem"} \ + ${GrpcClient__KeyPem:+-e GrpcClient__KeyPem="/app/source/certs/client.key"} \ + "armonik-api-cpp:0.1.0" diff --git a/packages/csharp/ArmoniK.Api.Client.Test/ArmoniK.Api.Client.Tests.csproj b/packages/csharp/ArmoniK.Api.Client.Test/ArmoniK.Api.Client.Tests.csproj index 02978a8a6..03b1540d3 100644 --- a/packages/csharp/ArmoniK.Api.Client.Test/ArmoniK.Api.Client.Tests.csproj +++ b/packages/csharp/ArmoniK.Api.Client.Test/ArmoniK.Api.Client.Tests.csproj @@ -9,8 +9,8 @@ true Embedded true - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 enable @@ -20,17 +20,20 @@ - - - + + + + + + - + - + diff --git a/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityKind.cs b/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityKind.cs deleted file mode 100644 index d054313e3..000000000 --- a/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityKind.cs +++ /dev/null @@ -1,123 +0,0 @@ -// This file is part of the ArmoniK project -// -// Copyright (C) ANEO, 2021-2024. All rights reserved. -// W. Kirschenmann -// J. Gurhem -// D. Dubuc -// L. Ziane Khodja -// F. Lemaitre -// S. Djebbar -// J. Fonseca -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published -// by the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY, without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -using System; -using System.IO; -using System.Runtime.InteropServices; - -using ArmoniK.Api.Client.Options; -using ArmoniK.Api.Client.Submitter; - -using Grpc.Net.Client; - -namespace ArmoniK.Api.Client.Tests; - -public enum ConnectivityKind -{ - Unencrypted, - TlsInsecure, - TlsCert, - TlsStore, - MTlsInsecure, - MTlsCert, - MTlsStore, -} - -internal static class ConnectivityKindExt -{ - private static string CertFolder - => Environment.GetEnvironmentVariable("CertFolder") ?? "../../../../certs"; - - private static string MessageHandler - => Environment.GetEnvironmentVariable("GrpcClient__HttpMessageHandler") ?? ""; - - internal static bool IsTls(this ConnectivityKind kind) - => kind switch - { - ConnectivityKind.Unencrypted => false, - _ => true, - }; - - internal static bool IsInsecure(this ConnectivityKind kind) - => kind switch - { - ConnectivityKind.Unencrypted or ConnectivityKind.TlsInsecure or ConnectivityKind.MTlsInsecure => true, - _ => false, - }; - - internal static bool IsMTls(this ConnectivityKind kind) - => kind switch - { - ConnectivityKind.MTlsInsecure => true, - ConnectivityKind.MTlsCert => true, - ConnectivityKind.MTlsStore => true, - _ => false, - }; - - internal static string? GetCaCertPath(this ConnectivityKind kind) - => kind switch - { - ConnectivityKind.TlsCert or ConnectivityKind.MTlsCert => Path.Combine(CertFolder, - "server1-ca.pem"), - _ => null, - }; - - internal static (string?, string?) GetClientCertPath(this ConnectivityKind kind) - => kind.IsMTls() - ? (Path.Combine(CertFolder, - "client.pem"), Path.Combine(CertFolder, - "client.key")) - : (null, null); - - internal static string GetEndpoint(this ConnectivityKind kind) - => kind switch - { - ConnectivityKind.Unencrypted => RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework") || MessageHandler.ToLower() - .Contains("web") - ? "http://localhost:4999" - : "http://localhost:5000", - ConnectivityKind.TlsInsecure => "https://localhost:5001", - ConnectivityKind.TlsCert => "https://localhost:5001", - ConnectivityKind.TlsStore => "https://localhost:5002", - ConnectivityKind.MTlsInsecure => "https://localhost:5003", - ConnectivityKind.MTlsCert => "https://localhost:5003", - ConnectivityKind.MTlsStore => "https://localhost:5004", - _ => "http://localhost:4999", - }; - - internal static GrpcChannel GetChannel(this ConnectivityKind kind) - { - var (certPath, keyPath) = kind.GetClientCertPath(); - - return GrpcChannelFactory.CreateChannel(new GrpcClient - { - Endpoint = kind.GetEndpoint(), - AllowUnsafeConnection = kind.IsInsecure(), - CertPem = certPath ?? "", - KeyPem = keyPath ?? "", - CaCert = kind.GetCaCertPath() ?? "", - HttpMessageHandler = MessageHandler, - }); - } -} diff --git a/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityTest.cs b/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityTest.cs index 6552692a9..e60f8b101 100644 --- a/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityTest.cs +++ b/packages/csharp/ArmoniK.Api.Client.Test/ConnectivityTest.cs @@ -21,13 +21,19 @@ // See the License for the specific language governing permissions and // limitations under the License. +using System; using System.Linq; +using System.Runtime.InteropServices; using System.Threading.Tasks; +using ArmoniK.Api.Client.Options; +using ArmoniK.Api.Client.Submitter; using ArmoniK.Api.gRPC.V1; using ArmoniK.Api.gRPC.V1.Results; using ArmoniK.Utils; +using Microsoft.Extensions.Configuration; + using NUnit.Framework; namespace ArmoniK.Api.Client.Tests; @@ -35,10 +41,27 @@ namespace ArmoniK.Api.Client.Tests; [TestFixture] public class ConnectivityTests { + [SetUp] + public void SetUp() + { + var builder = new ConfigurationBuilder().AddEnvironmentVariables(); + var configuration = builder.Build(); + options_ = configuration.GetRequiredSection(GrpcClient.SettingSection) + .Get()!; + if (RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework") || options_.HttpMessageHandler.ToLower() + .Contains("web")) + { + options_!.Endpoint = Environment.GetEnvironmentVariable("Http__Endpoint"); + } + } + + private GrpcClient? options_; + [Test] - public void ResultsGetServiceConfiguration([Values] ConnectivityKind connectivityKind) + public void ResultsGetServiceConfiguration() { - var channel = connectivityKind.GetChannel(); + var channel = GrpcChannelFactory.CreateChannel(options_!); + var resultClient = new Results.ResultsClient(channel); Assert.That(() => resultClient.GetServiceConfiguration(new Empty()), @@ -46,8 +69,7 @@ public void ResultsGetServiceConfiguration([Values] ConnectivityKind connectivit } [Test] - public async Task MultipleChannels([Values] ConnectivityKind connectivityKind, - [Values(1, + public async Task MultipleChannels([Values(1, 2, 10, 100)] @@ -56,7 +78,7 @@ public async Task MultipleChannels([Values] ConnectivityKind connectivityKind, var channels = await Enumerable.Range(0, concurrency) .ParallelSelect(new ParallelTaskOptions(-1), - i => Task.FromResult(connectivityKind.GetChannel())) + i => Task.FromResult(GrpcChannelFactory.CreateChannel(options_!))) .ToListAsync() .ConfigureAwait(false); diff --git a/packages/csharp/ArmoniK.Api.Client/ArmoniK.Api.Client.csproj b/packages/csharp/ArmoniK.Api.Client/ArmoniK.Api.Client.csproj index 8694416de..f85d43f29 100644 --- a/packages/csharp/ArmoniK.Api.Client/ArmoniK.Api.Client.csproj +++ b/packages/csharp/ArmoniK.Api.Client/ArmoniK.Api.Client.csproj @@ -14,8 +14,8 @@ enable ../kp.snk true - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 True diff --git a/packages/csharp/ArmoniK.Api.Common.Channel/ArmoniK.Api.Common.Channel.csproj b/packages/csharp/ArmoniK.Api.Common.Channel/ArmoniK.Api.Common.Channel.csproj index e4ceb467f..8ffbdec95 100644 --- a/packages/csharp/ArmoniK.Api.Common.Channel/ArmoniK.Api.Common.Channel.csproj +++ b/packages/csharp/ArmoniK.Api.Common.Channel/ArmoniK.Api.Common.Channel.csproj @@ -4,8 +4,8 @@ net6.0 enable enable - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 ../publish True True diff --git a/packages/csharp/ArmoniK.Api.Common/ArmoniK.Api.Common.csproj b/packages/csharp/ArmoniK.Api.Common/ArmoniK.Api.Common.csproj index 25aea784d..d5e9ee152 100755 --- a/packages/csharp/ArmoniK.Api.Common/ArmoniK.Api.Common.csproj +++ b/packages/csharp/ArmoniK.Api.Common/ArmoniK.Api.Common.csproj @@ -14,8 +14,8 @@ enable ../kp.snk true - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 True diff --git a/packages/csharp/ArmoniK.Api.Core/ArmoniK.Api.Core.csproj b/packages/csharp/ArmoniK.Api.Core/ArmoniK.Api.Core.csproj index fbfd2f30f..1597def43 100644 --- a/packages/csharp/ArmoniK.Api.Core/ArmoniK.Api.Core.csproj +++ b/packages/csharp/ArmoniK.Api.Core/ArmoniK.Api.Core.csproj @@ -16,8 +16,8 @@ true snupkg ../kp.snk - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 True True diff --git a/packages/csharp/ArmoniK.Api.Mock/ArmoniK.Api.Mock.csproj b/packages/csharp/ArmoniK.Api.Mock/ArmoniK.Api.Mock.csproj index 53eec4677..447d2bc28 100644 --- a/packages/csharp/ArmoniK.Api.Mock/ArmoniK.Api.Mock.csproj +++ b/packages/csharp/ArmoniK.Api.Mock/ArmoniK.Api.Mock.csproj @@ -14,8 +14,8 @@ true snupkg ../kp.snk - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 True diff --git a/packages/csharp/ArmoniK.Api.Tests/ArmoniK.Api.Worker.Tests.csproj b/packages/csharp/ArmoniK.Api.Tests/ArmoniK.Api.Worker.Tests.csproj index 63cf58c90..934d02637 100644 --- a/packages/csharp/ArmoniK.Api.Tests/ArmoniK.Api.Worker.Tests.csproj +++ b/packages/csharp/ArmoniK.Api.Tests/ArmoniK.Api.Worker.Tests.csproj @@ -9,8 +9,8 @@ true Embedded true - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 diff --git a/packages/csharp/ArmoniK.Api.Worker/ArmoniK.Api.Worker.csproj b/packages/csharp/ArmoniK.Api.Worker/ArmoniK.Api.Worker.csproj index 960ed6f7c..1036e2a21 100644 --- a/packages/csharp/ArmoniK.Api.Worker/ArmoniK.Api.Worker.csproj +++ b/packages/csharp/ArmoniK.Api.Worker/ArmoniK.Api.Worker.csproj @@ -16,8 +16,8 @@ true snupkg ../kp.snk - 3.19.0 - 3.19.0 + 3.22.0 + 3.22.0 True True diff --git a/packages/java/pom.xml b/packages/java/pom.xml index 45c41e740..33dd41140 100644 --- a/packages/java/pom.xml +++ b/packages/java/pom.xml @@ -4,10 +4,43 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.aneo + fr.aneo armonik-java GRPC java binding for the Armonik orchestrator API - 0.1.0 + 3.22.0 + + armonik-java + https://github.com/aneoconsulting/ArmoniK.Api + + + + Junior DONGO + jdongo@aneo.fr + + + Hassan EL-MZABI + elmzabi.hassan18@gmail.com + + + Salah Eddine BOUKHETTA + sboukhetta@aneo.fr + + + + + + Apache License, Version 2.0 + http://www.apache.org/licenses/ + repo + + + + + https://github.com/aneoconsulting/ArmoniK.Api + scm:git:https://github.com/aneoconsulting/ArmoniK.Api.git + scm:git:https://github.com/aneoconsulting/ArmoniK.Api.git + HEAD + 17 @@ -131,7 +164,73 @@ + + org.codehaus.mojo + versions-maven-plugin + 2.17.1 + + + org.sonatype.central + central-publishing-maven-plugin + 0.5.0 + true + + central + true + true + + + + org.apache.maven.plugins + maven-source-plugin + 3.3.0 + + + attach-sources + verify + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.6.3 + + + attach-javadoc + + jar + + + + + java + none + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.1.0 + + + sign-artifacts + verify + + sign + + + + + + --pinentry-mode + loopback + + + - diff --git a/packages/python/.gitignore b/packages/python/.gitignore index 53df0df6c..ef891def6 100644 --- a/packages/python/.gitignore +++ b/packages/python/.gitignore @@ -4,3 +4,4 @@ build/ *.egg-info **/_version.py **/.pytest_cache +**/*.pem diff --git a/packages/python/README.md b/packages/python/README.md index 2627607b0..691964f44 100644 --- a/packages/python/README.md +++ b/packages/python/README.md @@ -81,6 +81,68 @@ The test environment utilizes a mock endpoint to assert if the ArmoniK service h curl localhost:5000/calls.json | jq ``` +In prevision of the API test, run the following command: + +```bash +curl localhost:5000/calls.json | jq '.Tasks' +``` + +You should have as output: + +```json +{ + "GetTask": 0, + "ListTasks": 0, + "GetResultIds": 0, + "CancelTasks": 0, + "CountTasksByStatus": 0, + "ListTasksDetailed": 0, + "SubmitTasks": 0 +} +``` + +### Configure gRPC channel and test API calls + +Once the endpoint runs, you can initiate a gRPC channel to it with a Python client. + +Below is an example using a Tasks client and calling the `list_tasks` method: + +```python +import grpc +import armonik.client +with grpc.insecure_channel("localhost:5001") as channel: + tasks_client = ArmoniKTasks(channel) + tasks.client.list_tasks() +``` + +Port `5001` is actually ArmoniK's control-plane endpoint. + +For the sake of simplicity, the example gRPC channel here is an insecure one. **You should never do that in production environment.** + +### **Check if API call was successful** + +Execute the Python code snippet above and re-run command: + +```bash +curl localhost:5000/calls.json | jq '.Tasks' +``` + +You should have as output: + +```json +{ + "GetTask": 0, + "ListTasks": 0, + "GetResultIds": 0, + "CancelTasks": 0, + "CountTasksByStatus": 0, + "ListTasksDetailed": 1, + "SubmitTasks": 0 +} +``` + +You can see that attribute `ListTasksDetailed` was incremented, meaning that the API effectively handled your call ! + ## WARNING ### Note for Users diff --git a/packages/python/proto2python.sh b/packages/python/proto2python.sh index bc00d0068..52b43902e 100755 --- a/packages/python/proto2python.sh +++ b/packages/python/proto2python.sh @@ -32,7 +32,7 @@ mkdir -p $ARMONIK_WORKER $ARMONIK_CLIENT $ARMONIK_COMMON $PACKAGE_PATH python -m venv $PYTHON_VENV source $PYTHON_VENV/bin/activate python -m pip install uv -python -m uv pip install build "grpcio==1.62.3" "grpcio-tools==1.62.3" setuptools_scm[toml] "setuptools>=61" deprecation +python -m uv pip install build "grpcio==1.62.3" "grpcio-tools==1.62.3" setuptools_scm[toml] "setuptools>=61" deprecation "cryptography>=36" unset proto_files for proto in ${armonik_worker_files[@]}; do diff --git a/packages/python/pyproject.toml b/packages/python/pyproject.toml index d860a9202..48e69c775 100644 --- a/packages/python/pyproject.toml +++ b/packages/python/pyproject.toml @@ -17,7 +17,8 @@ classifiers = [ dependencies = [ "grpcio==1.62.3", "grpcio-tools==1.62.3", - "deprecation" + "deprecation", + "cryptography>=36" ] [project.urls] "Homepage" = "https://github.com/aneoconsulting/ArmoniK.Api" diff --git a/packages/python/ruff.toml b/packages/python/ruff.toml index e887df321..eee059e7d 100644 --- a/packages/python/ruff.toml +++ b/packages/python/ruff.toml @@ -35,9 +35,6 @@ exclude = ["*.pyi"] # By default all rules are considered fixable. fixable = ["ALL"] -# Avoid automatically removing unused imports in `__init__.py` files. -ignore-init-module-imports = false - [format] # Like Black, indent with spaces, rather than tabs. indent-style = "space" diff --git a/packages/python/src/armonik/client/events.py b/packages/python/src/armonik/client/events.py index bf95b9489..3430ee440 100644 --- a/packages/python/src/armonik/client/events.py +++ b/packages/python/src/armonik/client/events.py @@ -1,9 +1,11 @@ from __future__ import annotations -from typing import Callable, cast, Iterable, List, Optional, Union + +import concurrent.futures +from concurrent.futures.thread import ThreadPoolExecutor +from typing import Callable, cast, Iterable, List, Optional, Union, Collection from grpc import Channel, RpcError -from .results import ArmoniKResults from ..common import ( EventTypes, NewTaskEvent, @@ -14,6 +16,7 @@ ResultStatus, Event, Result, + batched, ) from ..common.filter import Filter from ..protogen.client.events_service_pb2_grpc import EventsStub @@ -38,7 +41,6 @@ def __init__(self, grpc_channel: Channel): grpc_channel: gRPC channel to use """ self._client = EventsStub(grpc_channel) - self._results_client = ArmoniKResults(grpc_channel) def get_events( self, @@ -91,48 +93,82 @@ def get_events( break def wait_for_result_availability( - self, result_ids: Union[str, List[str]], session_id: str + self, + result_ids: Union[str, List[str]], + session_id: str, + bucket_size: int = 100, + parallelism: int = 1, ) -> None: """Wait until a result is ready i.e its status updates to COMPLETED. Args: result_ids: The IDs of the results. session_id: The ID of the session. - + bucket_size: Batch size + parallelism: Parallelism Raises: RuntimeError: If the result status is ABORTED. """ if isinstance(result_ids, str): result_ids = [result_ids] + result_ids = set(result_ids) if len(result_ids) == 0: return - results_not_found = set(result_ids) - - results_filter = Result.result_id == result_ids[0] - for result_id in result_ids[1:]: - results_filter = results_filter | (Result.result_id == result_id) - - def handler(_, _2, event: Event) -> bool: - event = cast(Union[NewResultEvent, ResultStatusUpdateEvent], event) - if event.result_id in results_not_found: - if event.status == ResultStatus.COMPLETED: - results_not_found.remove(event.result_id) - if not results_not_found: - return True - elif event.status == ResultStatus.ABORTED: - raise RuntimeError(f"Result {event.result_id} has been aborted.") - return False - - while results_not_found: + + if parallelism > 1: + pool = ThreadPoolExecutor(max_workers=parallelism) try: - self.get_events( - session_id, - [EventTypes.RESULT_STATUS_UPDATE, EventTypes.NEW_RESULT], - [handler], - None, - results_filter, - ) - except RpcError: - pass - else: - break + futures = [ + pool.submit(_wait_all, self, session_id, batch) + for batch in batched(result_ids, bucket_size) + ] + for i, future in enumerate(concurrent.futures.as_completed(futures)): + exp = future.exception() + if exp is not None: + for f in futures: + f.cancel() + raise exp + finally: + pool.shutdown(wait=False) + else: + for batch in batched(result_ids, bucket_size): + _wait_all(self, session_id, batch) + + +def _wait_all(event_client: ArmoniKEvents, session_id: str, results: Collection[str]): + if len(results) == 0: + return + results_filter = None + for result_id in results: + results_filter = ( + Result.result_id == result_id + if results_filter is None + else (results_filter | (Result.result_id == result_id)) + ) + + not_found = set(results) + + def handler(_, _2, event: Event) -> bool: + event = cast(Union[NewResultEvent, ResultStatusUpdateEvent], event) + if event.result_id in not_found: + if event.status == ResultStatus.COMPLETED: + not_found.remove(event.result_id) + if not not_found: + return True + elif event.status == ResultStatus.ABORTED: + raise RuntimeError(f"Result {event.result_id} has been aborted.") + return False + + while not_found: + try: + event_client.get_events( + session_id, + [EventTypes.RESULT_STATUS_UPDATE, EventTypes.NEW_RESULT], + [handler], + None, + results_filter, + ) + except RpcError: + pass + else: + break diff --git a/packages/python/src/armonik/client/tasks.py b/packages/python/src/armonik/client/tasks.py index 57a326784..baa68e3a5 100644 --- a/packages/python/src/armonik/client/tasks.py +++ b/packages/python/src/armonik/client/tasks.py @@ -114,7 +114,7 @@ def list_tasks( page_size: size of a page, defaults to 1000 sort_field: field on which to sort the resulting list, defaults to the task_id sort_direction: direction of the sort, defaults to ascending - detailed: Wether to retrieve the detailed description of the task. + detailed: Whether to retrieve the detailed description of the task. Returns: A tuple containing : @@ -134,7 +134,7 @@ def list_tasks( response: ListTasksDetailedResponse = self._client.ListTasksDetailed(request) return response.total, [Task.from_message(t) for t in response.tasks] response: ListTasksResponse = self._client.ListTasks(request) - return response.total, [Task.from_message(t) for t in response.tasks] + return response.total, [Task.from_summary(t) for t in response.tasks] def cancel_tasks(self, task_ids: List[str], chunk_size: Optional[int] = 500): """Cancel tasks. @@ -231,7 +231,7 @@ def submit_tasks( Task( id=t.task_id, session_id=session_id, - expected_output_ids=list(t.expected_output_keys), + expected_output_ids=list(t.expected_output_ids), data_dependencies=list(t.data_dependencies), payload_id=t.payload_id, ) diff --git a/packages/python/src/armonik/common/__init__.py b/packages/python/src/armonik/common/__init__.py index b8b853524..02c7e3c76 100644 --- a/packages/python/src/armonik/common/__init__.py +++ b/packages/python/src/armonik/common/__init__.py @@ -1,3 +1,4 @@ +from .channel import create_channel from .enumwrapper import ( Direction, EventTypes, @@ -36,6 +37,7 @@ from .filter import Filter __all__ = [ + "create_channel", "datetime_to_timestamp", "timestamp_to_datetime", "duration_to_timedelta", diff --git a/packages/python/src/armonik/common/channel.py b/packages/python/src/armonik/common/channel.py new file mode 100644 index 000000000..276203395 --- /dev/null +++ b/packages/python/src/armonik/common/channel.py @@ -0,0 +1,126 @@ +import os +from os import PathLike +from typing import Union, Tuple, Optional +from urllib.parse import urlparse + +from grpc import Channel, secure_channel, insecure_channel, ssl_channel_credentials +from cryptography.hazmat.primitives.serialization import ( + pkcs12, + Encoding, + PrivateFormat, + NoEncryption, +) + + +def _read_file(path: Union[str, PathLike]) -> bytes: + with open(path, "rb") as f: + return f.read() + + +_ca_cert_locations = [ + "/etc/ssl/certs/ca-certificates.crt", # Debian/Ubuntu/Gentoo etc. + "/etc/pki/tls/certs/ca-bundle.crt", # Fedora/RHEL 6 + "/etc/ssl/ca-bundle.pem", # OpenSUSE + "/etc/pki/tls/cacert.pem", # OpenELEC + "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", # CentOS/RHEL 7 + "/etc/ssl/cert.pem", # Alpine Linux +] + +_cached_ca_cert_location: Optional[str] = "" + + +def _find_bundle_path() -> Optional[str]: + global _cached_ca_cert_location + if _cached_ca_cert_location is not None and len(_cached_ca_cert_location) > 0: + return _cached_ca_cert_location + # Look if one exists + for location in _ca_cert_locations: + if os.path.exists(location): + _cached_ca_cert_location = location + return location + # Not found, will use the default provided + _cached_ca_cert_location = None + + +def _load_certificates( + certificate_authority: Union[str, PathLike, bytes, None] = None, + client_certificate: Union[str, PathLike, bytes, None] = None, + client_key: Union[str, PathLike, bytes, None] = None, +) -> Tuple[bytes, bytes, bytes]: + if certificate_authority is None: + certificate_authority = _find_bundle_path() # Otherwise it uses the ca bundle of certifi. We want to find the installed ca bundle instead + + if certificate_authority is not None: + if not isinstance(certificate_authority, bytes): + certificate_authority = _read_file(certificate_authority) + + if client_certificate is not None: + if not isinstance(client_certificate, bytes): + client_certificate = _read_file(client_certificate) + if client_key is None: + # client and key are in the same file + try: + # Try to parse p12 if it's a p12 + pfx = pkcs12.load_pkcs12(client_certificate, b"") + client_certificate = pfx.cert.certificate.public_bytes(Encoding.PEM) + client_key = pfx.key.private_bytes( + Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption() + ) + except ValueError: + # Probably a PEM file + client_key = client_certificate + else: + if not isinstance(client_key, bytes): + client_key = _read_file(client_key) + + return certificate_authority, client_certificate, client_key + + +def create_channel( + uri: str, + *, + options: Union[Tuple[Tuple[str, str]]] = None, + certificate_authority: Union[str, PathLike, bytes, None] = None, + client_certificate: Union[str, PathLike, bytes, None] = None, + client_key: Union[str, PathLike, bytes, None] = None, +) -> Channel: + """ + Create a gRPC channel for communication with the ArmoniK control plane + Args: + uri: URI of the channel. Will start a secure channel if the scheme contains "https". If it contains "unix", uses a unix socket. + options: Options to pass to the channel + certificate_authority: Certificate authority path to read, or content as bytes + client_certificate: Client certificate path to read, or content as bytes + client_key: Client key path to read, or content as bytes. If set to None but client_certificate is not None, assumes the key is included with the certificate (p12 or PEM certificate) + Returns: + Channel: gRPC channel for communication + """ + parsed = urlparse(uri) + scheme = parsed.scheme if parsed.scheme != "" else "http" + endpoint = ( + parsed.netloc + parsed.path + ) # To support with or without scheme, and for paths for unix + + if "unix" in scheme: + # gRPC supports unix:path and the path is then relative, if the scheme is unix://, then the path is absolute + if endpoint.startswith("/"): + endpoint = "unix://" + endpoint + else: + endpoint = "unix:" + endpoint + + if "https" in scheme: + certificate_authority, client_certificate, client_key = _load_certificates( + certificate_authority, client_certificate, client_key + ) + + return secure_channel( + endpoint, + ssl_channel_credentials( + root_certificates=certificate_authority, + private_key=client_key, + certificate_chain=client_certificate, + ), + options=options, + ) + else: + return insecure_channel(endpoint, options=options) diff --git a/packages/python/src/armonik/common/enumwrapper.py b/packages/python/src/armonik/common/enumwrapper.py index 5868031f4..b9d5eac85 100644 --- a/packages/python/src/armonik/common/enumwrapper.py +++ b/packages/python/src/armonik/common/enumwrapper.py @@ -14,6 +14,8 @@ TASK_STATUS_PROCESSING, TASK_STATUS_PROCESSED, TASK_STATUS_RETRIED, + TASK_STATUS_PENDING, + TASK_STATUS_PAUSED, ) from ..protogen.common.events_common_pb2 import ( EVENTS_ENUM_UNSPECIFIED, @@ -69,9 +71,11 @@ class TaskStatus(IntEnum): PROCESSING = TASK_STATUS_PROCESSING PROCESSED = TASK_STATUS_PROCESSED RETRIED = TASK_STATUS_RETRIED + PENDING = TASK_STATUS_PENDING + PAUSED = TASK_STATUS_PAUSED -class EventTypes: +class EventTypes(IntEnum): UNSPECIFIED = EVENTS_ENUM_UNSPECIFIED NEW_TASK = EVENTS_ENUM_NEW_TASK TASK_STATUS_UPDATE = EVENTS_ENUM_TASK_STATUS_UPDATE @@ -84,7 +88,7 @@ def from_string(cls, name: str): return getattr(cls, name.upper()) -class SessionStatus: +class SessionStatus(IntEnum): @staticmethod def name_from_value(status: RawSessionStatus) -> str: return _SESSIONSTATUS.values_by_number[status].name @@ -98,7 +102,7 @@ def name_from_value(status: RawSessionStatus) -> str: DELETED = SESSION_STATUS_DELETED -class ResultStatus: +class ResultStatus(IntEnum): @staticmethod def name_from_value(status: RawResultStatus) -> str: return _RESULTSTATUS.values_by_number[status].name @@ -111,19 +115,19 @@ def name_from_value(status: RawResultStatus) -> str: NOTFOUND = RESULT_STATUS_NOTFOUND -class ServiceHealthCheckStatus: +class ServiceHealthCheckStatus(IntEnum): UNSPECIFIED = HEALTH_STATUS_ENUM_UNSPECIFIED HEALTHY = HEALTH_STATUS_ENUM_HEALTHY DEGRADED = HEALTH_STATUS_ENUM_DEGRADED UNHEALTHY = HEALTH_STATUS_ENUM_UNHEALTHY -class HealthCheckStatus: +class HealthCheckStatus(IntEnum): UNKNOWN = HealthCheckReply.UNKNOWN SERVING = HealthCheckReply.SERVING NOT_SERVING = HealthCheckReply.NOT_SERVING -class Direction: +class Direction(IntEnum): ASC = SORT_DIRECTION_ASC DESC = SORT_DIRECTION_DESC diff --git a/packages/python/src/armonik/common/filter/_filter_field.py b/packages/python/src/armonik/common/filter/_filter_field.py index 87e4dc053..8a8427cd7 100644 --- a/packages/python/src/armonik/common/filter/_filter_field.py +++ b/packages/python/src/armonik/common/filter/_filter_field.py @@ -14,6 +14,7 @@ TASK_SUMMARY_ENUM_FIELD_SESSION_ID, TASK_SUMMARY_ENUM_FIELD_OWNER_POD_ID, TASK_SUMMARY_ENUM_FIELD_INITIAL_TASK_ID, + TASK_SUMMARY_ENUM_FIELD_CREATED_BY, TASK_SUMMARY_ENUM_FIELD_STATUS, TASK_SUMMARY_ENUM_FIELD_CREATED_AT, TASK_SUMMARY_ENUM_FIELD_SUBMITTED_AT, @@ -78,6 +79,7 @@ RESULT_RAW_ENUM_FIELD_COMPLETED_AT, RESULT_RAW_ENUM_FIELD_CREATED_AT, RESULT_RAW_ENUM_FIELD_SESSION_ID, + RESULT_RAW_ENUM_FIELD_CREATED_BY, RESULT_RAW_ENUM_FIELD_OWNER_TASK_ID, ) @@ -207,6 +209,7 @@ class TaskFilter(FilterWrapper): "session_id": (FType.STR, TASK_SUMMARY_ENUM_FIELD_SESSION_ID), "owner_pod_id": (FType.STR, TASK_SUMMARY_ENUM_FIELD_OWNER_POD_ID), "initial_task_id": (FType.STR, TASK_SUMMARY_ENUM_FIELD_INITIAL_TASK_ID), + "created_by": (FType.STR, TASK_SUMMARY_ENUM_FIELD_CREATED_BY), "parent_task_ids": (FType.NA, "parent_task_ids"), "data_dependencies": (FType.NA, "data_dependencies"), "expected_output_ids": (FType.NA, "expected_output_ids"), @@ -333,6 +336,7 @@ class ResultFilter(FilterWrapper): "completed_at": (FType.DATE, RESULT_RAW_ENUM_FIELD_COMPLETED_AT), "result_id": (FType.STR, RESULT_RAW_ENUM_FIELD_RESULT_ID), "size": (FType.NUM, RESULT_RAW_ENUM_FIELD_SIZE), + "created_by": (FType.STR, RESULT_RAW_ENUM_FIELD_CREATED_BY), "owner_task_id": (FType.STR, RESULT_RAW_ENUM_FIELD_OWNER_TASK_ID), } diff --git a/packages/python/src/armonik/common/helpers.py b/packages/python/src/armonik/common/helpers.py index c7abc9d80..c4caca1d3 100644 --- a/packages/python/src/armonik/common/helpers.py +++ b/packages/python/src/armonik/common/helpers.py @@ -130,7 +130,7 @@ def batched(iterable: Iterable[T], n: int) -> Iterable[List[T]]: batch.append(c) if len(batch) == n: yield batch - batch.clear() + batch = [] c = next(it, sentinel) if len(batch) > 0: yield batch diff --git a/packages/python/src/armonik/common/objects.py b/packages/python/src/armonik/common/objects.py index a7ca8bda4..52999613f 100644 --- a/packages/python/src/armonik/common/objects.py +++ b/packages/python/src/armonik/common/objects.py @@ -8,7 +8,7 @@ from ..protogen.common.agent_common_pb2 import ResultMetaData from ..protogen.common.applications_common_pb2 import ApplicationRaw -from ..protogen.common.tasks_common_pb2 import TaskDetailed +from ..protogen.common.tasks_common_pb2 import TaskDetailed, TaskSummary from .filter import ( FilterDescriptor, GenericTaskOptionsFilter, @@ -64,7 +64,7 @@ def from_message(cls, task_options): application_namespace=task_options.application_namespace, application_service=task_options.application_service, engine_type=task_options.engine_type, - options=task_options.options, + options={k: v for k, v in task_options.options.items()}, ) def to_message(self) -> RawTaskOptions: @@ -135,6 +135,7 @@ class Task: owner_pod_id = FilterDescriptor(_task_filter) initial_task_id = FilterDescriptor(_task_filter) + created_by = FilterDescriptor(_task_filter) parent_task_ids = FilterDescriptor(_task_filter) data_dependencies = FilterDescriptor(_task_filter) expected_output_ids = FilterDescriptor(_task_filter) @@ -169,6 +170,7 @@ def __init__( session_id: Optional[str] = None, owner_pod_id: Optional[str] = None, initial_task_id: Optional[str] = None, + created_by: Optional[str] = None, parent_task_ids: Optional[List[str]] = None, data_dependencies: Optional[List[str]] = None, expected_output_ids: Optional[List[str]] = None, @@ -196,10 +198,21 @@ def __init__( self.session_id = session_id self.owner_pod_id = owner_pod_id self.initial_task_id = initial_task_id - self.parent_task_ids = parent_task_ids if parent_task_ids is not None else [] - self.data_dependencies = data_dependencies if data_dependencies is not None else [] - self.expected_output_ids = expected_output_ids if expected_output_ids is not None else [] - self.retry_of_ids = retry_of_ids if retry_of_ids is not None else [] + self.created_by = created_by + self.parent_task_ids = parent_task_ids + self.count_parent_task_ids = ( + len(self.parent_task_ids) if self.parent_task_ids is not None else None + ) + self.data_dependencies = data_dependencies + self.count_data_dependencies = ( + len(self.data_dependencies) if self.data_dependencies is not None else None + ) + self.expected_output_ids = expected_output_ids + self.count_expected_output_ids = ( + len(self.expected_output_ids) if self.expected_output_ids is not None else None + ) + self.retry_of_ids = retry_of_ids + self.count_retry_of_ids = len(self.retry_of_ids) if self.retry_of_ids is not None else None self.status = status self.status_message = status_message self.options = options @@ -230,6 +243,7 @@ def refresh(self, task_client) -> None: self.owner_pod_id = result.owner_pod_id self.initial_task_id = result.initial_task_id + self.created_by = result.created_by self.parent_task_ids = result.parent_task_ids self.data_dependencies = result.data_dependencies self.expected_output_ids = result.expected_output_ids @@ -266,6 +280,7 @@ def from_message(cls, task_raw: TaskDetailed) -> "Task": session_id=task_raw.session_id, owner_pod_id=task_raw.owner_pod_id, initial_task_id=task_raw.initial_task_id, + created_by=task_raw.created_by, parent_task_ids=list(task_raw.parent_task_ids), data_dependencies=list(task_raw.data_dependencies), expected_output_ids=list(task_raw.expected_output_ids), @@ -290,12 +305,56 @@ def from_message(cls, task_raw: TaskDetailed) -> "Task": payload_id=task_raw.payload_id, ) + @staticmethod + def from_summary(task_raw: TaskSummary) -> "Task": + task = Task( + id=task_raw.id, + session_id=task_raw.session_id, + owner_pod_id=task_raw.owner_pod_id, + initial_task_id=task_raw.initial_task_id, + created_by=task_raw.created_by, + parent_task_ids=None, + data_dependencies=None, + expected_output_ids=None, + retry_of_ids=None, + status=task_raw.status, + status_message=task_raw.status_message, + options=TaskOptions.from_message(task_raw.options), + created_at=timestamp_to_datetime(task_raw.created_at), + submitted_at=timestamp_to_datetime(task_raw.submitted_at), + received_at=timestamp_to_datetime(task_raw.received_at), + acquired_at=timestamp_to_datetime(task_raw.acquired_at), + fetched_at=timestamp_to_datetime(task_raw.fetched_at), + started_at=timestamp_to_datetime(task_raw.started_at), + processed_at=timestamp_to_datetime(task_raw.processed_at), + ended_at=timestamp_to_datetime(task_raw.ended_at), + pod_ttl=timestamp_to_datetime(task_raw.pod_ttl), + creation_to_end_duration=duration_to_timedelta(task_raw.creation_to_end_duration), + processing_to_end_duration=duration_to_timedelta(task_raw.processing_to_end_duration), + received_to_end_duration=duration_to_timedelta(task_raw.received_to_end_duration), + output=Output( + error=( + task_raw.error + if task_raw.error is not None and len(task_raw.error) > 0 + else None + ) + ), + pod_hostname=task_raw.pod_hostname, + payload_id=task_raw.payload_id, + ) + task.count_parent_task_ids = task_raw.count_parent_task_ids + task.count_data_dependencies = task_raw.count_data_dependencies + task.count_expected_output_ids = task_raw.count_expected_output_ids + task.count_retry_of_ids = task_raw.count_retry_of_ids + return task + def __eq__(self, other: "Task") -> bool: return ( self.id == other.id and self.session_id == other.session_id and self.owner_pod_id == other.owner_pod_id and self.initial_task_id == other.initial_task_id + and self.created_by == other.created_by and self.parent_task_ids == other.parent_task_ids and self.data_dependencies == other.data_dependencies and self.expected_output_ids == other.expected_output_ids @@ -415,6 +474,7 @@ def __eq__(self, other: "Session") -> bool: class Result: session_id = FilterDescriptor(_resultFilter) name = FilterDescriptor(_resultFilter) + created_by = FilterDescriptor(_resultFilter) owner_task_id = FilterDescriptor(_resultFilter) status = FilterDescriptor(_resultFilter) created_at = FilterDescriptor(_resultFilter) @@ -426,6 +486,7 @@ def __init__( self, session_id: Optional[str] = None, name: Optional[str] = None, + created_by: Optional[str] = None, owner_task_id: Optional[str] = None, status: RawResultStatus = ResultStatus.UNSPECIFIED, created_at: Optional[datetime] = None, @@ -435,6 +496,7 @@ def __init__( ): self.session_id = session_id self.name = name + self.created_by = created_by self.owner_task_id = owner_task_id self.status = status self.created_at = created_at @@ -447,6 +509,7 @@ def from_message(cls, result_raw: ResultRaw) -> "Result": return cls( session_id=result_raw.session_id, name=result_raw.name, + created_by=result_raw.created_by, owner_task_id=result_raw.owner_task_id, status=result_raw.status, created_at=timestamp_to_datetime(result_raw.created_at), diff --git a/packages/python/src/armonik/worker/__init__.py b/packages/python/src/armonik/worker/__init__.py index cc0259557..453696d66 100644 --- a/packages/python/src/armonik/worker/__init__.py +++ b/packages/python/src/armonik/worker/__init__.py @@ -1,4 +1,4 @@ -from .worker import ArmoniKWorker +from .worker import ArmoniKWorker, armonik_worker from .taskhandler import TaskHandler from .seqlogger import ClefLogger @@ -6,4 +6,5 @@ "ArmoniKWorker", "TaskHandler", "ClefLogger", + "armonik_worker", ] diff --git a/packages/python/src/armonik/worker/taskhandler.py b/packages/python/src/armonik/worker/taskhandler.py index 4fa518f16..79ea09279 100644 --- a/packages/python/src/armonik/worker/taskhandler.py +++ b/packages/python/src/armonik/worker/taskhandler.py @@ -1,7 +1,8 @@ from __future__ import annotations import os -from typing import Optional, Dict, List, Union +from collections.abc import Mapping +from typing import Optional, Dict, List, Union, Iterator from ..common import TaskOptions, TaskDefinition, Result, Task from ..common.helpers import batched @@ -20,6 +21,32 @@ from ..protogen.worker.agent_service_pb2_grpc import AgentStub +class LazyLoadDict(Mapping): + def __init__(self, data_folder: str, ids: List[str]): + self.__data_folder = data_folder + self._data: Dict[str, Optional[bytes]] = {k: None for k in ids} + + def __iter__(self) -> Iterator[str, bytes]: + for k in self._data.keys(): + yield k, self[k] + + def keys(self): + # Overridden to prevent loading + for k in self._data.keys(): + yield k + + def __getitem__(self, __key) -> bytes: + if __key not in self._data: + raise KeyError(__key) + if self._data[__key] is None: + with open(os.path.join(self.__data_folder, __key), "rb") as f: + self._data[__key] = f.read() + return self._data[__key] + + def __len__(self) -> int: + return len(self._data) + + class TaskHandler: def __init__(self, request: ProcessRequest, agent_client: AgentStub): self._client: AgentStub = agent_client @@ -32,15 +59,15 @@ def __init__(self, request: ProcessRequest, agent_client: AgentStub): self.payload_id: str = request.payload_id self.data_folder: str = request.data_folder - # TODO: Lazy load - with open(os.path.join(self.data_folder, self.payload_id), "rb") as f: - self.payload = f.read() + self._payload = None + self.data_dependencies = LazyLoadDict(self.data_folder, list(request.data_dependencies)) - # TODO: Lazy load - self.data_dependencies: Dict[str, bytes] = {} - for dd in request.data_dependencies: - with open(os.path.join(self.data_folder, dd), "rb") as f: - self.data_dependencies[dd] = f.read() + @property + def payload(self) -> bytes: + if self._payload is None: + with open(os.path.join(self.data_folder, self.payload_id), "rb") as f: + self._payload = f.read() + return self._payload def submit_tasks( self, diff --git a/packages/python/src/armonik/worker/worker.py b/packages/python/src/armonik/worker/worker.py index 3596b80a6..5f0560624 100644 --- a/packages/python/src/armonik/worker/worker.py +++ b/packages/python/src/armonik/worker/worker.py @@ -1,11 +1,17 @@ from __future__ import annotations + +import logging +import os import traceback from concurrent import futures -from typing import Callable, Union +from contextlib import nullcontext +from logging import Logger +from typing import Callable, Union, Optional, Tuple, Iterable import grpc from grpc import Channel +from ..common.channel import create_channel from .seqlogger import ClefLogger from ..common import Output, HealthCheckStatus from ..protogen.common.objects_pb2 import Empty @@ -68,9 +74,129 @@ def Process(self, request: ProcessRequest, context) -> Union[ProcessReply, None] return ProcessReply(output=self.processing_function(task_handler).to_message()) except Exception as e: self._logger.exception( - f"Failed task {''.join(traceback.format_exception(type(e) ,e, e.__traceback__))}", + f"Failed task {''.join(traceback.format_exception(type(e), e, e.__traceback__))}", exc_info=e, ) def HealthCheck(self, request: Empty, context) -> HealthCheckReply: return HealthCheckReply(status=self.health_check()) + + +class ArmoniKWorkerWrapper: + def __init__( + self, + *, + processor: Callable[[TaskHandler], Output], + logger: Optional[Logger] = None, + worker_endpoint: Optional[str] = None, + agent_endpoint: Optional[str] = None, + channel_options: Optional[Iterable[Tuple[str, str]]] = None, + ): + if logger is None: + ClefLogger.setup_logging(logging.INFO) + logger = ClefLogger.getLogger("ArmoniKWorker") + if worker_endpoint is None: + worker_scheme = ( + "unix://" + if os.getenv("ComputePlane__WorkerChannel__SocketType", "unixdomainsocket") + == "unixdomainsocket" + else "http://" + ) + worker_endpoint = worker_scheme + os.getenv( + "ComputePlane__WorkerChannel__Address", "/cache/armonik_worker.sock" + ) + if agent_endpoint is None: + agent_scheme = ( + "unix://" + if os.getenv("ComputePlane__AgentChannel__SocketType", "unixdomainsocket") + == "unixdomainsocket" + else "http://" + ) + agent_endpoint = agent_scheme + os.getenv( + "ComputePlane__AgentChannel__Address", "/cache/armonik_agent.sock" + ) + if channel_options is None: + channel_options = (("grpc.default_authority", "localhost"),) + self.logger = logger + self.worker_endpoint = worker_endpoint + self.agent_endpoint = agent_endpoint + self.channel_options = channel_options + self.processor = processor + + def __call__(self, *args, **kwargs): + return self.processor(*args, **kwargs) + + def run( + self, + agent_channel: Optional[Channel] = None, + logger: Optional[Logger] = None, + worker_endpoint: Optional[str] = None, + ): + """ + Run the server + Args: + agent_channel: Agent channel + logger: Logger + worker_endpoint: Worker endpoint + + Returns: + None + """ + logger = self.logger if logger is None else logger + worker_endpoint = self.worker_endpoint if worker_endpoint is None else worker_endpoint + # Start worker + logger.info("Worker Started") + agent_channel = ( + create_channel(self.agent_endpoint, options=self.channel_options) + if agent_channel is None + else nullcontext(agent_channel) + ) + + with agent_channel as channel: + worker = ArmoniKWorker(channel, self.processor, logger=logger) + logger.info("Worker Connected") + worker.start(worker_endpoint) + + +def armonik_worker( + *, + autorun: bool = False, + logger: Optional[Logger] = None, + worker_endpoint: Optional[str] = None, + agent_endpoint: Optional[str] = None, + channel_options: Optional[Iterable[Tuple[str, str]]] = None, +): + """ + Transforms the function into an ArmoniK Worker + Args: + autorun: if True, runs the processor instead of returning the function + logger: Logger to use, if None will use the default ClefLogger + worker_endpoint: Worker endpoint, if None will use the default from ComputePlane__WorkerChannel__SocketType and ComputePlane__WorkerChannel__Address + agent_endpoint: Agent endpoint, if None will use the default from ComputePlane__AgentChannel__SocketType and ComputePlane__AgentChannel__Address + channel_options: Options for the gRPC channel + + Returns: + Worker function + + Example: + >>> @armonik_worker() + >>> def processor(task_handler: TaskHandler) -> Output: + >>> ... + >>> return Output() + """ + + def decorator( + processor: Callable[[TaskHandler], Output], + ) -> ArmoniKWorkerWrapper: + worker = ArmoniKWorkerWrapper( + processor=processor, + logger=logger, + worker_endpoint=worker_endpoint, + agent_endpoint=agent_endpoint, + channel_options=channel_options, + ) + if autorun: + worker.run() + return worker + + return decorator diff --git a/packages/python/tests/conftest.py b/packages/python/tests/conftest.py index 9741e0898..96f15a03d 100644 --- a/packages/python/tests/conftest.py +++ b/packages/python/tests/conftest.py @@ -1,4 +1,3 @@ -import grpc import os import pytest import requests @@ -12,16 +11,37 @@ ArmoniKTasks, ArmoniKVersions, ) +from armonik.common.channel import create_channel, _find_bundle_path, _load_certificates from armonik.protogen.worker.agent_service_pb2_grpc import AgentStub from typing import List, Union - +ca_cert = os.getenv("Grpc__CaCert") +client_cert = os.getenv("Grpc__ClientCert") +client_key = os.getenv("Grpc__ClientKey") +scheme = os.getenv("AK_SCHEME", "http") # Mock server endpoints used for the tests. -grpc_endpoint = "localhost:5001" -calls_endpoint = "http://localhost:5000/calls.json" -reset_endpoint = "http://localhost:5000/reset" +grpc_endpoint = os.getenv("Grpc__Endpoint", scheme + "://localhost:5001") +http_endpoint = os.getenv("Http__Endpoint", scheme + "://localhost:5000") +calls_endpoint = http_endpoint + "/calls.json" +reset_endpoint = http_endpoint + "/reset" data_folder = os.getcwd() +request_ca = ca_cert if ca_cert is not None else _find_bundle_path() +if client_cert is not None: + _, request_cert, request_key = _load_certificates(request_ca, client_cert, client_key) + cert_path, key_path = ( + os.path.join(data_folder, "cert.pem"), + os.path.join(data_folder, "key.pem"), + ) + with open(cert_path, "wb") as f: + f.write(request_cert) + with open(key_path, "wb") as f: + f.write(request_key) + + request_certs = (cert_path, key_path) +else: + request_certs = None + @pytest.fixture(scope="session", autouse=True) def clean_up(request): @@ -57,7 +77,7 @@ def clean_up(request): # Reset the mock server counters try: - response = requests.post(reset_endpoint) + response = requests.post(reset_endpoint, verify=request_ca, cert=request_certs) response.raise_for_status() print("\nMock server resetted.") except requests.exceptions.HTTPError as e: @@ -94,7 +114,12 @@ def get_client( >>> result_service = get_client("Results") >>> submitter_service = get_client("Submitter", "custom_endpoint") """ - channel = grpc.insecure_channel(endpoint).__enter__() + channel = create_channel( + endpoint, + certificate_authority=ca_cert, + client_certificate=client_cert, + client_key=client_key, + ).__enter__() if client_name == "Agent": return AgentStub(channel) if client_name == "Events": @@ -137,7 +162,7 @@ def rpc_called( >>> rpc_called("http://localhost:5000/calls.json", "Versions", "ListVersionss", 0) True """ - response = requests.get(endpoint) + response = requests.get(endpoint, verify=request_ca, cert=request_certs) response.raise_for_status() data = response.json() @@ -170,7 +195,7 @@ def all_rpc_called( >>> all_rpc_called("http://localhost:5000/calls.json", "Versions") False """ - response = requests.get(endpoint) + response = requests.get(endpoint, verify=request_ca, cert=request_certs) response.raise_for_status() data = response.json() diff --git a/packages/python/tests/test_taskhandler.py b/packages/python/tests/test_taskhandler.py index bf602b530..d9bbcdbbd 100644 --- a/packages/python/tests/test_taskhandler.py +++ b/packages/python/tests/test_taskhandler.py @@ -50,7 +50,7 @@ def test_taskhandler_init(self): assert task_handler.payload_id == "payload-id" assert task_handler.data_folder == data_folder assert task_handler.payload == "payload".encode() - assert task_handler.data_dependencies == {"dd-id": "dd".encode()} + assert dict(task_handler.data_dependencies) == {"dd-id": "dd".encode()} def test_submit_tasks(self): task_handler = TaskHandler(self.request, get_client("Agent")) @@ -87,6 +87,17 @@ def test_create_results(self): assert rpc_called("Agent", "CreateResults") assert results == {} + def test_lazy_load(self): + handler = TaskHandler(self.request, None) + assert handler.data_dependencies._data["dd-id"] is None + assert len(handler.data_dependencies._data) == 1 + for _ in handler.data_dependencies.keys(): + pass + assert handler.data_dependencies._data["dd-id"] is None + for _ in handler.data_dependencies: + pass + assert handler.data_dependencies._data["dd-id"] == b"dd" + def test_service_fully_implemented(self): assert all_rpc_called( "Agent", missings=["CreateTask", "GetCommonData", "GetDirectData", "GetResourceData"] diff --git a/packages/python/tests/test_tasks.py b/packages/python/tests/test_tasks.py index 383fee529..0711cecf5 100644 --- a/packages/python/tests/test_tasks.py +++ b/packages/python/tests/test_tasks.py @@ -11,6 +11,7 @@ class TestArmoniKTasks: session_id="session-id", owner_pod_id="", initial_task_id="", + created_by="", parent_task_ids=[], data_dependencies=[], expected_output_ids=[], diff --git a/packages/python/tests/test_wait_availability.py b/packages/python/tests/test_wait_availability.py new file mode 100644 index 000000000..eb39de74f --- /dev/null +++ b/packages/python/tests/test_wait_availability.py @@ -0,0 +1,109 @@ +from datetime import timedelta +import time +from threading import Thread + +import grpc +import pytest +from armonik.client import ArmoniKTasks, ArmoniKResults, ArmoniKSessions, ArmoniKEvents +from armonik.common import TaskOptions, TaskDefinition + +endpoint = "" + + +def wait_and_unpause(session_id: str): + time.sleep(1) + with grpc.insecure_channel(endpoint) as channel: + ArmoniKSessions(channel).resume_session(session_id) + print("Session resumed") + + +class TestWaitAvailability: + def test_wait_availability(self): + pytest.skip() + n_tasks = 10000 + with grpc.insecure_channel(endpoint) as channel: + task_client = ArmoniKTasks(channel) + result_client = ArmoniKResults(channel) + session_client = ArmoniKSessions(channel) + events_client = ArmoniKEvents(channel) + session_id = session_client.create_session(TaskOptions(timedelta(seconds=60), 1, 1, "")) + print(f"Created session {session_id}") + session_client.pause_session(session_id) + payload_ids = list( + r.result_id + for r in result_client.create_results( + {str(r): str(r).encode() for r in range(n_tasks)}, session_id + ).values() + ) + print(f"Submitted payloads {len(payload_ids)}") + result_ids = list( + r.result_id + for r in result_client.create_results_metadata( + [str(r) for r in range(n_tasks)], session_id + ).values() + ) + print(f"Submitted results {len(result_ids)}") + tasks = task_client.submit_tasks( + session_id, + [ + TaskDefinition(payload_id=p, expected_output_ids=[r]) + for p, r in zip(payload_ids, result_ids) + ], + ) + print(f"Submitted tasks {len(tasks)}") + t = Thread(target=wait_and_unpause, args=(session_id,)) + start = time.time() + t.start() + print("Waiting on results") + events_client.wait_for_result_availability(result_ids, session_id, bucket_size=100) + end = time.time() + print(end - start) + session_client.close_session(session_id) + session_client.purge_session(session_id) + session_client.delete_session(session_id) + + def test_wait_availability2(self): + pytest.skip() + n_tasks = 10000 + with grpc.insecure_channel(endpoint) as channel: + task_client = ArmoniKTasks(channel) + result_client = ArmoniKResults(channel) + session_client = ArmoniKSessions(channel) + events_client = ArmoniKEvents(channel) + session_id = session_client.create_session(TaskOptions(timedelta(seconds=60), 1, 1, "")) + print(f"Created session {session_id}") + session_client.pause_session(session_id) + payload_ids = list( + r.result_id + for r in result_client.create_results( + {str(r): str(r).encode() for r in range(n_tasks)}, session_id + ).values() + ) + print(f"Submitted payloads {len(payload_ids)}") + result_ids = list( + r.result_id + for r in result_client.create_results_metadata( + [str(r) for r in range(n_tasks)], session_id + ).values() + ) + print(f"Submitted results {len(result_ids)}") + tasks = task_client.submit_tasks( + session_id, + [ + TaskDefinition(payload_id=p, expected_output_ids=[r]) + for p, r in zip(payload_ids, result_ids) + ], + ) + print(f"Submitted tasks {len(tasks)}") + t = Thread(target=wait_and_unpause, args=(session_id,)) + start = time.time() + t.start() + print("Waiting on results") + events_client.wait_for_result_availability( + result_ids, session_id, bucket_size=100, parallelism=10 + ) + end = time.time() + print(end - start) + session_client.close_session(session_id) + session_client.purge_session(session_id) + session_client.delete_session(session_id) diff --git a/packages/python/tests/test_worker.py b/packages/python/tests/test_worker.py index ef20fb1cf..fdac3f6a0 100644 --- a/packages/python/tests/test_worker.py +++ b/packages/python/tests/test_worker.py @@ -1,9 +1,10 @@ import datetime -import grpc import logging import os -from .conftest import data_folder, grpc_endpoint +from armonik.common.channel import create_channel + +from .conftest import data_folder, grpc_endpoint, ca_cert, client_cert, client_key from armonik.worker import ArmoniKWorker, TaskHandler, ClefLogger from armonik.common import Output, TaskOptions from armonik.protogen.common.objects_pb2 import Empty, Configuration @@ -43,7 +44,12 @@ class TestWorker: ) def test_do_nothing(self): - with grpc.insecure_channel(grpc_endpoint) as agent_channel: + with create_channel( + grpc_endpoint, + certificate_authority=ca_cert, + client_certificate=client_cert, + client_key=client_key, + ) as agent_channel: worker = ArmoniKWorker( agent_channel, do_nothing, @@ -56,7 +62,12 @@ def test_do_nothing(self): worker.HealthCheck(Empty(), None) def test_should_return_none(self): - with grpc.insecure_channel(grpc_endpoint) as agent_channel: + with create_channel( + grpc_endpoint, + certificate_authority=ca_cert, + client_certificate=client_cert, + client_key=client_key, + ) as agent_channel: worker = ArmoniKWorker( agent_channel, throw_error, @@ -66,7 +77,12 @@ def test_should_return_none(self): assert reply is None def test_should_error(self): - with grpc.insecure_channel(grpc_endpoint) as agent_channel: + with create_channel( + grpc_endpoint, + certificate_authority=ca_cert, + client_certificate=client_cert, + client_key=client_key, + ) as agent_channel: worker = ArmoniKWorker( agent_channel, return_error, @@ -80,7 +96,12 @@ def test_should_error(self): assert output.error == "TestError" def test_should_write_result(self): - with grpc.insecure_channel(grpc_endpoint) as agent_channel: + with create_channel( + grpc_endpoint, + certificate_authority=ca_cert, + client_certificate=client_cert, + client_key=client_key, + ) as agent_channel: worker = ArmoniKWorker( agent_channel, return_and_send, diff --git a/packages/rust/armonik/Cargo.lock b/packages/rust/armonik/Cargo.lock new file mode 100644 index 000000000..5ffcdc1e8 --- /dev/null +++ b/packages/rust/armonik/Cargo.lock @@ -0,0 +1,1848 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f37166d7d48a0284b99dd824694c26119c700b53bf0d1540cdb147dbdaaf13" + +[[package]] +name = "armonik" +version = "3.21.0-beta-0" +dependencies = [ + "async-trait", + "eyre", + "futures", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "prost", + "prost-types", + "rustls", + "serde_json", + "serial_test", + "snafu", + "tokio", + "tonic", + "tonic-build", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "aws-lc-rs" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd82dba44d209fddb11c190e0a94b78651f95299598e472215667417a03ff1d" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df7a4168111d7eb622a31b214057b8509c0a7e1794f44c546d742330dc793972" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] + +[[package]] +name = "axum" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 1.0.1", + "tower 0.5.1", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.1", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which", +] + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "cc" +version = "1.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f57c4b4da2a9d619dd035f27316d7a426305b75be93d09e92f2b9229c34feaf" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "cmake" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +dependencies = [ + "cc", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "log", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.161" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + +[[package]] +name = "multimap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.6.0", +] + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15" +dependencies = [ + "bytes", + "heck", + "itertools 0.13.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +dependencies = [ + "prost", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scc" +version = "2.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d25269dd3a12467afe2e510f69fb0b46b698e5afb296b59f2145259deaf8e8" +dependencies = [ + "sdd", +] + +[[package]] +name = "schannel" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sdd" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.214" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.214" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serial_test" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "tempfile" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tokio" +version = "1.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64", + "bytes", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tonic-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build", + "prost-types", + "quote", + "syn", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "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_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/packages/rust/armonik/Cargo.toml b/packages/rust/armonik/Cargo.toml new file mode 100644 index 000000000..4754f4f30 --- /dev/null +++ b/packages/rust/armonik/Cargo.toml @@ -0,0 +1,41 @@ +[package] +authors = ["Florian Lemaitre "] +description = "Rust bindings for the ArmoniK API" +edition = "2021" +include = ["**/*.rs", "Cargo.toml", "LICENSE", "README.md", "protos/**"] +license = "Apache-2.0" +readme = "README.md" +name = "armonik" +repository = "https://github.com/aneoconsulting/ArmoniK.Api" +version = "3.21.0-beta-0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tonic = "0.12" +prost = "0.13" +prost-types = "0.13" +futures = "0.3" +async-trait = "0.1" +snafu = "0.8" +tracing = "0.1" +hyper = { version = "1.5", features = ["client", "http1", "http2"] } +hyper-rustls = { version = "0.27", features = ["http1", "http2"] } +rustls = { version = "0.23", features = ["ring"] } + +[dev-dependencies] +eyre = "0.6" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +hyper-util = { version = "0.1", features = ["client", "http1"] } +http-body-util = "0.1" +serde_json = "1.0" +serial_test = "3.1" +tokio = { version = "1.41", features = [ + "rt-multi-thread", + "macros", + "sync", + "time", +] } + +[build-dependencies] +tonic-build = "0.12" diff --git a/packages/rust/armonik/LICENSE b/packages/rust/armonik/LICENSE new file mode 120000 index 000000000..5853aaea5 --- /dev/null +++ b/packages/rust/armonik/LICENSE @@ -0,0 +1 @@ +../../../LICENSE \ No newline at end of file diff --git a/packages/rust/armonik/README.md b/packages/rust/armonik/README.md new file mode 120000 index 000000000..8a33348c7 --- /dev/null +++ b/packages/rust/armonik/README.md @@ -0,0 +1 @@ +../../../README.md \ No newline at end of file diff --git a/packages/rust/armonik/build.rs b/packages/rust/armonik/build.rs new file mode 100644 index 000000000..801f43a43 --- /dev/null +++ b/packages/rust/armonik/build.rs @@ -0,0 +1,49 @@ +fn main() -> Result<(), Box> { + tonic_build::configure() + .build_client(true) + .build_server(true) + .compile_protos( + &[ + "protos/V1/agent_common.proto", + "protos/V1/agent_service.proto", + "protos/V1/applications_common.proto", + "protos/V1/applications_fields.proto", + "protos/V1/applications_filters.proto", + "protos/V1/applications_service.proto", + "protos/V1/auth_common.proto", + "protos/V1/auth_service.proto", + "protos/V1/events_common.proto", + "protos/V1/events_service.proto", + "protos/V1/filters_common.proto", + "protos/V1/objects.proto", + "protos/V1/partitions_common.proto", + "protos/V1/partitions_fields.proto", + "protos/V1/partitions_filters.proto", + "protos/V1/partitions_service.proto", + "protos/V1/result_status.proto", + "protos/V1/results_common.proto", + "protos/V1/results_fields.proto", + "protos/V1/results_filters.proto", + "protos/V1/results_service.proto", + "protos/V1/session_status.proto", + "protos/V1/sessions_common.proto", + "protos/V1/sessions_fields.proto", + "protos/V1/sessions_filters.proto", + "protos/V1/sessions_service.proto", + "protos/V1/sort_direction.proto", + "protos/V1/submitter_common.proto", + "protos/V1/submitter_service.proto", + "protos/V1/task_status.proto", + "protos/V1/tasks_common.proto", + "protos/V1/tasks_fields.proto", + "protos/V1/tasks_filters.proto", + "protos/V1/tasks_service.proto", + "protos/V1/versions_common.proto", + "protos/V1/versions_service.proto", + "protos/V1/worker_common.proto", + "protos/V1/worker_service.proto", + ], + &["protos/V1"], + )?; + Ok(()) +} diff --git a/packages/rust/armonik/protos b/packages/rust/armonik/protos new file mode 120000 index 000000000..4514a38a7 --- /dev/null +++ b/packages/rust/armonik/protos @@ -0,0 +1 @@ +../../../Protos \ No newline at end of file diff --git a/packages/rust/armonik/src/api/mod.rs b/packages/rust/armonik/src/api/mod.rs new file mode 100644 index 000000000..3c0bc30dd --- /dev/null +++ b/packages/rust/armonik/src/api/mod.rs @@ -0,0 +1 @@ +pub mod v3; diff --git a/packages/rust/armonik/src/api/v3.rs b/packages/rust/armonik/src/api/v3.rs new file mode 100644 index 000000000..8d1636d9d --- /dev/null +++ b/packages/rust/armonik/src/api/v3.rs @@ -0,0 +1,49 @@ +#![allow(non_snake_case)] + +tonic::include_proto!("armonik.api.grpc.v1"); + +pub mod agent { + tonic::include_proto!("armonik.api.grpc.v1.agent"); +} +pub mod applications { + tonic::include_proto!("armonik.api.grpc.v1.applications"); +} +pub mod auth { + tonic::include_proto!("armonik.api.grpc.v1.auth"); +} +pub mod events { + tonic::include_proto!("armonik.api.grpc.v1.events"); +} +pub mod partitions { + tonic::include_proto!("armonik.api.grpc.v1.partitions"); +} +pub mod result_status { + tonic::include_proto!("armonik.api.grpc.v1.result_status"); +} +pub mod results { + tonic::include_proto!("armonik.api.grpc.v1.results"); +} +pub mod session_status { + tonic::include_proto!("armonik.api.grpc.v1.session_status"); +} +pub mod sessions { + tonic::include_proto!("armonik.api.grpc.v1.sessions"); +} +pub mod sort_direction { + tonic::include_proto!("armonik.api.grpc.v1.sort_direction"); +} +pub mod submitter { + tonic::include_proto!("armonik.api.grpc.v1.submitter"); +} +pub mod task_status { + tonic::include_proto!("armonik.api.grpc.v1.task_status"); +} +pub mod tasks { + tonic::include_proto!("armonik.api.grpc.v1.tasks"); +} +pub mod versions { + tonic::include_proto!("armonik.api.grpc.v1.versions"); +} +pub mod worker { + tonic::include_proto!("armonik.api.grpc.v1.worker"); +} diff --git a/packages/rust/armonik/src/client/agent.rs b/packages/rust/armonik/src/client/agent.rs new file mode 100644 index 000000000..74632c271 --- /dev/null +++ b/packages/rust/armonik/src/client/agent.rs @@ -0,0 +1,432 @@ +use std::collections::HashMap; + +use futures::{Stream, StreamExt}; +use snafu::ResultExt; + +use crate::agent::{ + create_results, create_results_metadata, create_tasks, get_common_data, get_direct_data, + get_resource_data, notify_result_data, submit_tasks, ResultMetaData, +}; +use crate::api::v3; +use crate::utils::IntoCollection; +use crate::TaskOptions; + +use super::{GrpcCall, GrpcCallStream}; + +/// The ResultsService provides methods for interacting with results. +#[derive(Clone)] +pub struct AgentClient { + inner: v3::agent::agent_client::AgentClient, +} + +impl AgentClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::agent::agent_client::AgentClient::new(channel), + } + } + + /// Create the metadata of multiple results at once. + /// Data have to be uploaded separately. + pub async fn create_results_metadata( + &mut self, + token: impl Into, + session_id: impl Into, + names: impl std::iter::IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(create_results_metadata::Request { + communication_token: token.into(), + names: names.into_collect(), + session_id: session_id.into(), + }) + .await? + .results) + } + + /// Create multiple results with data included in the request. + pub async fn create_results( + &mut self, + token: impl Into, + session_id: impl Into, + results: impl std::iter::IntoIterator, impl Into>)>, + ) -> Result, super::RequestError> { + Ok(self + .call(create_results::Request { + communication_token: token.into(), + results: results + .into_iter() + .map(|(name, data)| (name.into(), data.into())) + .collect(), + session_id: session_id.into(), + }) + .await? + .results) + } + + /// Notify results data are available in files. + pub async fn notify_result_data( + &mut self, + token: impl Into, + session_id: impl Into, + result_ids: impl std::iter::IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(notify_result_data::Request { + communication_token: token.into(), + session_id: session_id.into(), + result_ids: result_ids.into_collect(), + }) + .await? + .result_ids) + } + + /// Create tasks metadata and submit task for processing. + pub async fn submit_tasks( + &mut self, + token: impl Into, + session_id: impl Into, + task_options: Option, + items: impl IntoIterator, + ) -> Result, super::RequestError> { + Ok(self + .call(submit_tasks::Request { + communication_token: token.into(), + session_id: session_id.into(), + task_options, + items: items.into_collect(), + }) + .await? + .items) + } + + pub async fn create_tasks( + &mut self, + request: impl Stream + Send + 'static, + ) -> Result, super::RequestError> { + let response = self.call(request).await?; + + match response { + create_tasks::Response::Status { + communication_token: _, + statuses, + } => Ok(statuses), + create_tasks::Response::Error { + communication_token: _, + error, + } => Err(tonic::Status::internal(error)).context(super::GrpcSnafu {}), + } + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + AgentClient { + async fn call(self, request: create_results_metadata::Request) -> Result { + Ok(self + .inner + .create_results_meta_data(request) + .await + .context(super::GrpcSnafu{})? + .into_inner() + .into()) + } + + async fn call(self, request: create_results::Request) -> Result { + Ok(self + .inner + .create_results(request) + .await + .context(super::GrpcSnafu{})? + .into_inner() + .into()) + } + + async fn call(self, request: notify_result_data::Request) -> Result { + Ok(self + .inner + .notify_result_data(request) + .await + .context(super::GrpcSnafu{})? + .into_inner() + .into()) + } + + async fn call(self, request: submit_tasks::Request) -> Result { + Ok(self + .inner + .submit_tasks(request) + .await + .context(super::GrpcSnafu{})? + .into_inner() + .into()) + } + + async fn call(self, request: get_resource_data::Request) -> Result { + Ok(self + .inner + .get_resource_data(request) + .await + .context(super::GrpcSnafu{})? + .into_inner().into()) + } + + async fn call(self, request: get_common_data::Request) -> Result { + Ok(self + .inner + .get_common_data(request) + .await + .context(super::GrpcSnafu{})? + .into_inner().into()) + } + + async fn call(self, request: get_direct_data::Request) -> Result { + Ok(self + .inner + .get_direct_data(request) + .await + .context(super::GrpcSnafu{})? + .into_inner().into()) + } + } +} + +#[async_trait::async_trait(?Send)] +impl GrpcCallStream for &'_ mut AgentClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, + S: Stream + Send + 'static, +{ + type Response = create_tasks::Response; + type Error = super::RequestError; + + async fn call(self, request: S) -> Result { + Ok(self + .inner + .create_task(request.map(Into::into)) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } +} + +#[cfg(test)] +#[serial_test::serial(agent)] +mod tests { + use std::collections::HashMap; + + use crate::Client; + + // Named methods + + #[tokio::test] + async fn create_results_metadata() { + let before = Client::get_nb_request("Agent", "CreateResultsMetaData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .create_results_metadata("token", "session-id", ["result1", "result2"]) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "CreateResultsMetaData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_results() { + let before = Client::get_nb_request("Agent", "CreateResults").await; + let mut client = Client::new().await.unwrap().agent(); + client + .create_results("token", "session-id", [("result1", "payload")]) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "CreateResults").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn notify_result_data() { + let before = Client::get_nb_request("Agent", "NotifyResultData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .notify_result_data("token", "session-id", ["result1", "result2"]) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "NotifyResultData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn submit() { + let before = Client::get_nb_request("Agent", "SubmitTasks").await; + let mut client = Client::new().await.unwrap().agent(); + client + .submit_tasks("token", "session-id", None, []) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "SubmitTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_tasks() { + let before = Client::get_nb_request("Agent", "CreateTask").await; + let mut client = Client::new().await.unwrap().agent(); + + client + .create_tasks(futures::stream::iter([ + crate::agent::create_tasks::Request::Invalid, + ])) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "CreateTask").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn create_results_metadata_call() { + let before = Client::get_nb_request("Agent", "CreateResultsMetaData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::create_results_metadata::Request { + communication_token: String::from("token"), + session_id: String::from("session-id"), + names: Vec::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "CreateResultsMetaData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_results_call() { + let before = Client::get_nb_request("Agent", "CreateResults").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::create_results::Request { + communication_token: String::from("token"), + session_id: String::from("session-id"), + results: HashMap::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "CreateResults").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn notify_result_data_call() { + let before = Client::get_nb_request("Agent", "NotifyResultData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::notify_result_data::Request { + communication_token: String::from("token"), + session_id: String::from("session-id"), + result_ids: vec![], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "NotifyResultData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn submit_tasks_call() { + let before = Client::get_nb_request("Agent", "SubmitTasks").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::submit_tasks::Request { + communication_token: String::from("token"), + session_id: String::from("session-id"), + task_options: None, + items: vec![], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "SubmitTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_resource_data_call() { + let before = Client::get_nb_request("Agent", "GetResourceData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::get_resource_data::Request { + communication_token: String::from("token"), + result_id: String::from("result-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "GetResourceData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_common_data_call() { + let before = Client::get_nb_request("Agent", "GetCommonData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::get_common_data::Request { + communication_token: String::from("token"), + result_id: String::from("result-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "GetCommonData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_direct_data_call() { + let before = Client::get_nb_request("Agent", "GetDirectData").await; + let mut client = Client::new().await.unwrap().agent(); + client + .call(crate::agent::get_direct_data::Request { + communication_token: String::from("token"), + result_id: String::from("result-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "GetDirectData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_tasks_call() { + let before = Client::get_nb_request("Agent", "CreateTask").await; + let mut client = Client::new().await.unwrap().agent(); + + client + .call(futures::stream::iter([ + crate::agent::create_tasks::Request::Invalid, + ])) + .await + .unwrap(); + let after = Client::get_nb_request("Agent", "CreateTask").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/applications.rs b/packages/rust/armonik/src/client/applications.rs new file mode 100644 index 000000000..946d447ee --- /dev/null +++ b/packages/rust/armonik/src/client/applications.rs @@ -0,0 +1,115 @@ +use snafu::ResultExt; + +use crate::api::v3; +use crate::applications::{filter, list, Sort}; +use crate::utils::IntoCollection; + +use super::GrpcCall; + +#[derive(Clone)] +pub struct ApplicationsClient { + inner: v3::applications::applications_client::ApplicationsClient, +} + +impl ApplicationsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::applications::applications_client::ApplicationsClient::new(channel), + } + } + + pub async fn list( + &mut self, + filters: impl IntoIterator>, + sort: Sort, + page: i32, + page_size: i32, + ) -> Result { + self.call(list::Request { + filters: filters + .into_iter() + .map(IntoCollection::into_collect) + .collect(), + sort, + page, + page_size, + }) + .await + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + ApplicationsClient { + async fn call(self, request: list::Request) -> Result { + Ok(self + .inner + .list_applications(request) + .await + .context(super::GrpcSnafu{})? + .into_inner() + .into()) + } + } +} + +#[cfg(test)] +#[serial_test::serial(applications)] +mod tests { + use crate::Client; + + // Named methods + + #[tokio::test] + async fn list() { + let before = Client::get_nb_request("Applications", "ListApplications").await; + let mut client = Client::new().await.unwrap().applications(); + client + .list( + crate::applications::filter::Or { + or: vec![crate::applications::filter::And { and: vec![] }], + }, + crate::applications::Sort::default(), + 0, + 10, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Applications", "ListApplications").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn list_call() { + let before = Client::get_nb_request("Applications", "ListApplications").await; + let mut client = Client::new().await.unwrap().applications(); + client + .call(crate::applications::list::Request { + page_size: 10, + ..Default::default() + }) + .await + .unwrap(); + let after = Client::get_nb_request("Applications", "ListApplications").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/auth.rs b/packages/rust/armonik/src/client/auth.rs new file mode 100644 index 000000000..3a6b9522d --- /dev/null +++ b/packages/rust/armonik/src/client/auth.rs @@ -0,0 +1,88 @@ +use snafu::ResultExt; + +use crate::api::v3; +use crate::auth::{current_user, User}; + +use super::GrpcCall; + +/// Service for authentication management. +#[derive(Clone)] +pub struct AuthClient { + inner: v3::auth::authentication_client::AuthenticationClient, +} + +impl AuthClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::auth::authentication_client::AuthenticationClient::new(channel), + } + } + + /// Get current user + pub async fn current_user(&mut self) -> Result { + Ok(self.call(current_user::Request {}).await?.user) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + AuthClient { + async fn call(self, request: current_user::Request) -> Result { + Ok(self + .inner + .get_current_user(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[cfg(test)] +#[serial_test::serial(auth)] +mod tests { + use crate::Client; + + // Named methods + + #[tokio::test] + async fn current_user() { + let before = Client::get_nb_request("Authentication", "GetCurrentUser").await; + let mut client = Client::new().await.unwrap().auth(); + client.current_user().await.unwrap(); + let after = Client::get_nb_request("Authentication", "GetCurrentUser").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn current_user_call() { + let before = Client::get_nb_request("Authentication", "GetCurrentUser").await; + let mut client = Client::new().await.unwrap().auth(); + client + .call(crate::auth::current_user::Request {}) + .await + .unwrap(); + let after = Client::get_nb_request("Authentication", "GetCurrentUser").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/config.rs b/packages/rust/armonik/src/client/config.rs new file mode 100644 index 000000000..c15d654b6 --- /dev/null +++ b/packages/rust/armonik/src/client/config.rs @@ -0,0 +1,221 @@ +use hyper::Uri; +use rustls::pki_types::{pem::PemObject, CertificateDer, PrivateKeyDer}; +use snafu::{ResultExt, Snafu}; + +/// Options for creating a gRPC Client +#[derive(Debug, Default)] +#[non_exhaustive] +pub struct ClientConfig { + /// Endpoint for sending requests + pub endpoint: Uri, + /// Allow unsafe connections to the endpoint (without SSL), defaults to false + pub allow_unsafe_connection: bool, + /// TLS identity of the client: key + cert + pub identity: Option<(CertificateDer<'static>, PrivateKeyDer<'static>)>, + /// CA certificate to authenticate the server + pub cacert: Option>, + /// Override the endpoint name during SSL verification + pub override_target: Option, +} + +impl Clone for ClientConfig { + fn clone(&self) -> Self { + Self { + endpoint: self.endpoint.clone(), + allow_unsafe_connection: self.allow_unsafe_connection, + identity: self + .identity + .as_ref() + .map(|(cert, key)| (cert.clone(), key.clone_key())), + cacert: self.cacert.clone(), + override_target: self.override_target.clone(), + } + } +} + +/// Options for creating a gRPC Client (as given in the environment) +#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)] +pub struct ClientConfigArgs { + /// Endpoint for sending requests + pub endpoint: String, + /// Path to the certificate file in pem format + pub cert_pem: String, + /// Path to the key file in pem format + pub key_pem: String, + /// Path to the Certificate Authority file in pem format + pub ca_cert: String, + /// Allow unsafe connections to the endpoint (without SSL), defaults to false + pub allow_unsafe_connection: bool, + /// Override the endpoint name during SSL verification + pub override_target_name: String, +} + +impl ClientConfigArgs { + pub fn from_env() -> Result { + use crate::utils::{read_env, read_env_bool}; + let ctx = EnvSnafu {}; + Ok(Self { + endpoint: read_env("GrpcClient__Endpoint").context(ctx)?, + cert_pem: read_env("GrpcClient__CertPem").context(ctx)?, + key_pem: read_env("GrpcClient__KeyPem").context(ctx)?, + ca_cert: read_env("GrpcClient__CaCert").context(ctx)?, + allow_unsafe_connection: read_env_bool("GrpcClient__AllowUnsafeConnection") + .context(ctx)?, + override_target_name: read_env("GrpcClient__OverrideTargetName").context(ctx)?, + }) + } +} + +impl ClientConfig { + pub fn from_env() -> Result { + Self::from_config_args(ClientConfigArgs::from_env()?) + } + pub fn from_config_args(args: ClientConfigArgs) -> Result { + tracing::debug!("GrpcClientConfig: {args:?}"); + + let ClientConfigArgs { + endpoint, + cert_pem: cert_path, + key_pem: key_path, + ca_cert: cacert_path, + allow_unsafe_connection, + override_target_name, + } = args; + + // Read CAcert file + let cacert = if !cacert_path.is_empty() { + let cacert_pem = std::fs::read_to_string(cacert_path.clone()) + .context(IoSnafu { path: cacert_path })?; + Some(CertificateDer::from_pem_slice(cacert_pem.as_bytes()).context(TlsSnafu {})?) + } else { + None + }; + + // Read client cert and key files + let identity = match (cert_path.as_str(), key_path.as_str()) { + ("", "") => None, + ("", _) | (_, "") => return IncompatibleOptionsSnafu{msg: format!("`GrpcClient__CertPem={cert_path}` and `GrpcClient__KeyPem={key_path}` must be either both empty or both set")}.fail(), + (cert_path, key_path) => { + let cert_pem = + std::fs::read_to_string(cert_path).context(IoSnafu { path: cert_path })?; + let key_pem = std::fs::read(key_path).context(IoSnafu { path: key_path })?; + let cert = CertificateDer::from_pem_slice(cert_pem.as_bytes()).context(TlsSnafu {})?; + let key = PrivateKeyDer::from_pem_slice(key_pem.as_slice()).context(TlsSnafu{})?; + + Some((cert, key)) + } + }; + + let endpoint = Uri::try_from(endpoint.clone()).context(UriSnafu { uri: endpoint })?; + + let override_target = if override_target_name.is_empty() { + None + } else { + let authority; + let path_and_query; + + if let Ok(auth) = override_target_name.parse::() { + authority = Some(auth); + path_and_query = endpoint.path_and_query().cloned(); + } else { + hyper::http::uri::Parts { + authority, + path_and_query, + .. + } = Uri::try_from(override_target_name.clone()) + .context(UriSnafu { + uri: endpoint.to_string(), + })? + .into_parts(); + } + + let mut uri = hyper::http::uri::Builder::new(); + + if let Some(scheme) = endpoint.scheme() { + uri = uri.scheme(scheme.clone()); + } + if let Some(authority) = authority.or_else(|| endpoint.authority().cloned()) { + uri = uri.authority(authority); + } + if let Some(path_and_query) = path_and_query { + uri = uri.path_and_query(path_and_query); + } + + Some(uri.build().context(HttpSnafu { + uri: override_target_name, + })?) + }; + + Ok(Self { + endpoint, + allow_unsafe_connection, + identity, + cacert, + override_target, + }) + } +} + +impl TryFrom<&ClientConfig> for tonic::transport::Endpoint { + type Error = ConfigError; + + fn try_from(value: &ClientConfig) -> Result { + Ok(Self::from(value.endpoint.clone())) + } +} + +#[derive(Debug, Snafu)] +#[non_exhaustive] +pub enum ConfigError { + #[snafu(display("Could not read environment variable [{location}]"))] + #[non_exhaustive] + Env { + #[snafu(source(from(crate::utils::ReadEnvError, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Invalid TLS configuration [{location}]"))] + #[non_exhaustive] + Tls { + #[snafu(source(from(rustls::pki_types::pem::Error, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Endpoint URI is not valid: `{uri}` [{location}]"))] + #[non_exhaustive] + Uri { + #[snafu(source(from(hyper::http::uri::InvalidUri, Box::new)))] + source: Box, + uri: String, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Override URI is not valid: `{uri}` [{location}]"))] + #[non_exhaustive] + Http { + #[snafu(source(from(hyper::http::Error, Box::new)))] + source: Box, + uri: String, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Could not read file `{path}` [{location}]"))] + #[non_exhaustive] + Io { + #[snafu(source(from(std::io::Error, Box::new)))] + source: Box, + path: String, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("{msg} [{location}]"))] + #[non_exhaustive] + IncompatibleOptions { + msg: String, + backtrace: snafu::Backtrace, + #[snafu(implicit)] + location: snafu::Location, + }, +} diff --git a/packages/rust/armonik/src/client/events.rs b/packages/rust/armonik/src/client/events.rs new file mode 100644 index 000000000..f7a892aa2 --- /dev/null +++ b/packages/rust/armonik/src/client/events.rs @@ -0,0 +1,148 @@ +use futures::{Stream, StreamExt}; +use snafu::ResultExt; + +use crate::api::v3; +use crate::events::subscribe; +use crate::utils::IntoCollection; + +use super::GrpcCall; + +/// Service for authentication management. +#[derive(Clone)] +pub struct EventsClient { + inner: v3::events::events_client::EventsClient, +} + +impl EventsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::events::events_client::EventsClient::new(channel), + } + } + + /// Get current user + pub async fn subscribe( + &mut self, + session_id: impl Into, + task_filters: impl IntoIterator>, + result_filters: impl IntoIterator< + Item = impl IntoIterator, + >, + returned_events: impl IntoIterator>, + ) -> Result< + impl Stream>, + super::RequestError, + > { + Ok(self + .inner + .get_events(subscribe::Request { + session_id: session_id.into(), + task_filters: task_filters + .into_iter() + .map(IntoCollection::into_collect) + .collect(), + result_filters: result_filters + .into_iter() + .map(IntoCollection::into_collect) + .collect(), + returned_events: returned_events.into_collect(), + }) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .map(|response| response.map(Into::into).context(super::GrpcSnafu {}))) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +#[async_trait::async_trait(?Send)] +impl GrpcCall for &'_ mut EventsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + type Response = + std::pin::Pin>>>; + type Error = super::RequestError; + + async fn call(self, request: subscribe::Request) -> Result { + Ok(Box::pin( + self.inner + .get_events(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .map(|response| response.map(Into::into).context(super::GrpcSnafu {})), + )) + } +} + +#[cfg(test)] +#[serial_test::serial(auth)] +mod tests { + use futures::TryStreamExt; + + use crate::Client; + + // Named methods + + #[tokio::test] + async fn subscribe() { + let before = Client::get_nb_request("Events", "GetEvents").await; + let mut client = Client::new().await.unwrap().events(); + client + .subscribe( + "session-id", + crate::tasks::filter::Or { or: vec![] }, + crate::results::filter::Or { or: vec![] }, + vec![crate::events::EventsEnum::Unspecified], + ) + .await + .unwrap() + .try_collect::>() + .await + .unwrap(); + let after = Client::get_nb_request("Events", "GetEvents").await; + assert_eq!(after - before, 1); + } + // Explicit call request + + #[tokio::test] + async fn subscribe_call() { + let before = Client::get_nb_request("Events", "GetEvents").await; + let mut client = Client::new().await.unwrap().events(); + client + .call(crate::events::subscribe::Request { + session_id: String::from("session-id"), + task_filters: crate::tasks::filter::Or { or: vec![] }, + result_filters: crate::results::filter::Or { or: vec![] }, + returned_events: vec![], + }) + .await + .unwrap() + .try_collect::>() + .await + .unwrap(); + let after = Client::get_nb_request("Events", "GetEvents").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/mod.rs b/packages/rust/armonik/src/client/mod.rs new file mode 100644 index 000000000..767983f75 --- /dev/null +++ b/packages/rust/armonik/src/client/mod.rs @@ -0,0 +1,372 @@ +//! ArmoniK clients for all the services + +use std::sync::Arc; + +use hyper::Uri; +use hyper_rustls::{ConfigBuilderExt, FixedServerNameResolver}; +use rustls::pki_types::ServerName; +use snafu::{ResultExt, Snafu}; + +mod agent; +mod applications; +mod auth; +mod config; +mod events; +mod partitions; +mod results; +mod sessions; +mod submitter; +mod tasks; +mod versions; +mod worker; + +pub use crate::utils::ReadEnvError; +pub use agent::AgentClient; +pub use applications::ApplicationsClient; +pub use auth::AuthClient; +pub use config::{ClientConfig, ClientConfigArgs, ConfigError}; +pub use events::EventsClient; +pub use partitions::PartitionsClient; +pub use results::ResultsClient; +pub use sessions::SessionsClient; +#[allow(deprecated)] +pub use submitter::SubmitterClient; +pub use tasks::TasksClient; +pub use versions::VersionsClient; +pub use worker::WorkerClient; + +/// ArmoniK Client +#[derive(Clone)] +pub struct Client { + channel: T, +} + +impl Client { + /// Create a new client using the configuration from the environment variables + pub async fn new() -> Result { + Self::with_config(ClientConfig::from_env().context(ConfigSnafu {})?).await + } + + /// Create a new client with the specified client configuration + pub async fn with_config(config: ClientConfig) -> Result { + let endpoint = config.endpoint.clone(); + let override_target = config.override_target.clone(); + + let https = Self::https_connector_builder(config).await?.build(); + + let mut transport_endpoint = tonic::transport::Endpoint::from(endpoint.clone()); + if let Some(target) = override_target { + transport_endpoint = transport_endpoint.origin(target); + } + + // Build the actual channel from the configuration + let channel = transport_endpoint + .connect_with_connector(https) + .await + .context(TransportSnafu { endpoint })?; + + Ok(Self::with_channel(channel)) + } + + async fn https_connector_builder( + config: ClientConfig, + ) -> Result< + hyper_rustls::HttpsConnectorBuilder, + ConnectionError, + > { + let endpoint = config.endpoint; + + // Get the default crypto provider or fallback to the ring crypto provider + let crypto_provider = rustls::crypto::CryptoProvider::get_default() + .cloned() + .unwrap_or_else(|| Arc::new(rustls::crypto::ring::default_provider())); + + // Configure TLS with sane protocol defaults + let tls_config = rustls::ClientConfig::builder_with_provider(crypto_provider) + .with_safe_default_protocol_versions() + .with_context(|_| TlsSnafu { + endpoint: endpoint.clone(), + })?; + + // Configure the server verification + let tls_config = if config.allow_unsafe_connection { + // Do not verify the server + tls_config + .dangerous() + .with_custom_certificate_verifier(Arc::new(crate::utils::InsecureCertVerifier)) + } else if let Some(cacert) = config.cacert { + // Verify that the server certificate is signed with a specific CA cert + let mut root_cert_store = rustls::RootCertStore::empty(); + root_cert_store.add(cacert).with_context(|_| TlsSnafu { + endpoint: endpoint.clone(), + })?; + tls_config.with_root_certificates(root_cert_store) + } else { + // Verify the server certificate using the system CAs + tls_config + .with_native_roots() + .with_context(|_| IoSnafu {})? + }; + + // Configure client identity for mTLS + let tls_config = if let Some((cert, key)) = config.identity { + // Use the the specified client certificate and key for the client authentication + tls_config + .with_client_auth_cert(vec![cert], key) + .with_context(|_| TlsSnafu { + endpoint: endpoint.clone(), + })? + } else { + // No mTLS + tls_config.with_no_client_auth() + }; + + // Configure the connector to use http or https depending on the URI scheme + let mut https = hyper_rustls::HttpsConnectorBuilder::new() + .with_tls_config(tls_config) + .https_or_http(); + + if let Some(hostname) = &config.override_target { + let server_name = ServerName::try_from(hostname.host().unwrap_or_default()) + .expect("A valid URI host should be a valid ServerName") + .to_owned(); + https = https.with_server_name_resolver(FixedServerNameResolver::new(server_name)); + }; + + Ok(https.enable_http1().enable_http2()) + } + + #[cfg(test)] + async fn get_nb_request(service: &str, rpc: &str) -> usize { + use std::collections::HashMap; + + use http_body_util::BodyExt; + use hyper_util::rt::TokioExecutor; + + let mut config = ClientConfig::from_env().unwrap(); + + match std::env::var("Http__Endpoint") { + Ok(value) if !value.is_empty() => { + config.endpoint = hyper::Uri::try_from(value).expect("HTTP endpoint"); + } + Ok(_) | Err(std::env::VarError::NotPresent) => {} + Err(std::env::VarError::NotUnicode(value)) => { + panic!("{value:?} is not a valid unicode string") + } + } + + let request = hyper::Request::get(format!("{}calls.json", config.endpoint)) + .body(http_body_util::Empty::<&[u8]>::new()) + .expect("Request"); + + let https = Self::https_connector_builder(config) + .await + .expect("Build connection information") + .build(); + + let client = hyper_util::client::legacy::Client::builder(TokioExecutor::new()).build(https); + + let response = client.request(request).await.expect("/calls.json"); + + let body = response.collect().await.expect("Response").to_bytes(); + + let calls = + serde_json::from_slice::>>(body.as_ref()) + .expect("Invalid JSON request"); + + calls[service][rpc] + } +} + +impl Client +where + T: Clone, + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { channel } + } + + /// Create an [`AgentClient`] + pub fn agent(&self) -> AgentClient { + AgentClient::with_channel(self.channel.clone()) + } + + /// Create an [`ApplicationsClient`] + pub fn applications(&self) -> ApplicationsClient { + ApplicationsClient::with_channel(self.channel.clone()) + } + + /// Create an [`AuthClient`] + pub fn auth(&self) -> AuthClient { + AuthClient::with_channel(self.channel.clone()) + } + + /// Create an [`EventsClient`] + pub fn events(&self) -> EventsClient { + EventsClient::with_channel(self.channel.clone()) + } + + /// Create a [`PartitionsClient`] + pub fn partitions(&self) -> PartitionsClient { + PartitionsClient::with_channel(self.channel.clone()) + } + + /// Create a [`ResultsClient`] + pub fn results(&self) -> ResultsClient { + ResultsClient::with_channel(self.channel.clone()) + } + + /// Create a [`SessionsClient`] + pub fn sessions(&self) -> SessionsClient { + SessionsClient::with_channel(self.channel.clone()) + } + + /// Create a [`SubmitterClient`] + #[deprecated] + #[allow(deprecated)] + pub fn submitter(&self) -> SubmitterClient { + SubmitterClient::with_channel(self.channel.clone()) + } + + /// Create a [`TasksClient`] + pub fn tasks(&self) -> TasksClient { + TasksClient::with_channel(self.channel.clone()) + } + + /// Create a [`VersionsClient`] + pub fn versions(&self) -> VersionsClient { + VersionsClient::with_channel(self.channel.clone()) + } + + /// Create a [`WorkerClient`] + pub fn worker(&self) -> WorkerClient { + WorkerClient::with_channel(self.channel.clone()) + } +} + +/// Perform a gRPC call from a raw request. +#[async_trait::async_trait(?Send)] +pub trait GrpcCall { + type Response; + type Error; + + /// Perform a gRPC call from a raw request. + async fn call(self, request: Request) -> Result; +} + +/// Perform a gRPC call from a raw request. +#[async_trait::async_trait(?Send)] +pub trait GrpcCallStream +where + Stream: futures::Stream + Send + 'static, +{ + type Response; + type Error; + + /// Perform a gRPC call from a raw request. + async fn call(self, request: Stream) -> Result; +} + +#[async_trait::async_trait(?Send)] +impl GrpcCall for T +where + Stream: futures::Stream + Send + 'static, + T: GrpcCallStream, +{ + type Response = >::Response; + type Error = >::Error; + + /// Perform a gRPC call from a raw request. + async fn call(self, request: Stream) -> Result { + >::call(self, request).await + } +} + +#[derive(Debug, Snafu)] +#[non_exhaustive] +pub enum ConnectionError { + #[snafu(display("Could not read the client config [{location}]"))] + #[non_exhaustive] + Config { + #[snafu(source(from(ConfigError, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Could not connect to the remote {endpoint} [{location}]"))] + #[non_exhaustive] + Transport { + endpoint: Uri, + #[snafu(source(from(tonic::transport::Error, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Could not establish TLS connection to the remote {endpoint} [{location}]"))] + #[non_exhaustive] + Tls { + endpoint: Uri, + #[snafu(source(from(rustls::Error, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Could not read system cert store [{location}]"))] + #[non_exhaustive] + Io { + #[snafu(source(from(std::io::Error, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, +} + +#[derive(Debug, Snafu)] +#[non_exhaustive] +pub enum RequestError { + #[snafu(display("Grpc request error [{location}]"))] + #[non_exhaustive] + Grpc { + #[snafu(source(from(tonic::Status, Box::new)))] + source: Box, + #[snafu(implicit)] + location: snafu::Location, + }, +} + +macro_rules! impl_call { + (@one $Client:ident($self:ident, $request:ident: $Request:ty) -> Result<$Response:ty> $block:block) => { + crate::client::impl_call! { + @one $Client($self, $request: $Request) -> Result<$Response, crate::client::RequestError> $block + } + }; + (@one $Client:ident($self:ident, $request:ident: $Request:ty) -> Result<$Response:ty, $Error:ty> $block:block) => { + #[async_trait::async_trait(?Send)] + impl $crate::client::GrpcCall<$Request> for &'_ mut $Client + where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, + { + type Response = $Response; + type Error = $Error; + + async fn call($self, $request: $Request) -> Result $block + } + }; + ($Client:ident {$(async fn call($self:ident, $request:ident: $Request:ty) -> Result<$($Result:ty),*> $block:block)*}) => { + $( + crate::client::impl_call! { + @one $Client($self, $request: $Request) -> Result<$($Result),*> $block + } + )* + }; +} + +pub(crate) use impl_call; diff --git a/packages/rust/armonik/src/client/partitions.rs b/packages/rust/armonik/src/client/partitions.rs new file mode 100644 index 000000000..ab6094347 --- /dev/null +++ b/packages/rust/armonik/src/client/partitions.rs @@ -0,0 +1,160 @@ +use snafu::ResultExt; + +use crate::api::v3; +use crate::partitions::{get, list, Raw}; +use crate::utils::IntoCollection; + +use super::GrpcCall; + +#[derive(Clone)] +pub struct PartitionsClient { + inner: v3::partitions::partitions_client::PartitionsClient, +} + +impl PartitionsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::partitions::partitions_client::PartitionsClient::new(channel), + } + } + + pub async fn list( + &mut self, + filters: impl IntoIterator>, + sort: crate::partitions::Sort, + page: i32, + page_size: i32, + ) -> Result { + self.call(list::Request { + filters: filters + .into_iter() + .map(IntoCollection::into_collect) + .collect(), + sort, + page, + page_size, + }) + .await + } + + pub async fn get( + &mut self, + partition_id: impl Into, + ) -> Result { + Ok(self + .call(get::Request { + partition_id: partition_id.into(), + }) + .await? + .partition) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + PartitionsClient { + async fn call(self, request: list::Request) -> Result { + Ok(self + .inner + .list_partitions(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get::Request) -> Result { + Ok(self + .inner + .get_partition(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[cfg(test)] +#[serial_test::serial(partitions)] +mod tests { + use crate::Client; + + // Named methods + + #[tokio::test] + async fn list() { + let before = Client::get_nb_request("Partitions", "ListPartitions").await; + let mut client = Client::new().await.unwrap().partitions(); + client + .list( + crate::partitions::filter::Or { + or: vec![crate::partitions::filter::And { and: vec![] }], + }, + crate::partitions::Sort::default(), + 0, + 10, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Partitions", "ListPartitions").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get() { + let before = Client::get_nb_request("Partitions", "GetPartition").await; + let mut client = Client::new().await.unwrap().partitions(); + client.get("part1").await.unwrap(); + let after = Client::get_nb_request("Partitions", "GetPartition").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn list_call() { + let before = Client::get_nb_request("Partitions", "ListPartitions").await; + let mut client = Client::new().await.unwrap().partitions(); + client + .call(crate::partitions::list::Request { + page_size: 10, + ..Default::default() + }) + .await + .unwrap(); + let after = Client::get_nb_request("Partitions", "ListPartitions").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_call() { + let before = Client::get_nb_request("Partitions", "GetPartition").await; + let mut client = Client::new().await.unwrap().partitions(); + client + .call(crate::partitions::get::Request { + partition_id: String::from("part1"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Partitions", "GetPartition").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/results.rs b/packages/rust/armonik/src/client/results.rs new file mode 100644 index 000000000..2dacb2297 --- /dev/null +++ b/packages/rust/armonik/src/client/results.rs @@ -0,0 +1,590 @@ +use std::collections::HashMap; + +use futures::{Stream, StreamExt}; +use snafu::ResultExt; + +use crate::api::v3; +use crate::results::{ + create, create_metadata, delete_data, download, filter, get, get_owner_task_id, + get_service_configuration, list, upload, Raw, Sort, +}; +use crate::utils::IntoCollection; + +use super::{GrpcCall, GrpcCallStream}; + +/// The ResultsService provides methods for interacting with results. +#[derive(Clone)] +pub struct ResultsClient { + inner: v3::results::results_client::ResultsClient, +} + +impl ResultsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::results::results_client::ResultsClient::new(channel), + } + } + + /// Get a results list using pagination, filters and sorting. + pub async fn list( + &mut self, + filters: impl IntoIterator>, + sort: Sort, + page: i32, + page_size: i32, + ) -> Result { + self.call(list::Request { + filters: filters + .into_iter() + .map(IntoCollection::into_collect) + .collect(), + sort, + page, + page_size, + }) + .await + } + + /// Get the id of the task that should produce the result. + pub async fn get(&mut self, result_id: impl Into) -> Result { + Ok(self + .call(get::Request { + id: result_id.into(), + }) + .await? + .result) + } + + /// Get the id of the task that should produce the result. + pub async fn get_owner_task_id( + &mut self, + session_id: impl Into, + result_ids: impl IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(get_owner_task_id::Request { + session_id: session_id.into(), + result_ids: result_ids.into_collect(), + }) + .await? + .result_task) + } + + /// Create the metadata of multiple results at once. + /// Data have to be uploaded separately. + pub async fn create_metadata( + &mut self, + session_id: impl Into, + names: impl IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(create_metadata::Request { + names: names.into_collect(), + session_id: session_id.into(), + }) + .await? + .results) + } + + /// Create one result with data included in the request. + pub async fn create( + &mut self, + session_id: impl Into, + results: impl std::iter::IntoIterator, impl Into>)>, + ) -> Result, super::RequestError> { + Ok(self + .call(create::Request { + results: results + .into_iter() + .map(|(name, data)| (name.into(), data.into())) + .collect(), + session_id: session_id.into(), + }) + .await? + .results) + } + + /// Upload data for result with stream. + pub async fn upload( + &mut self, + session_id: impl Into, + result_id: impl Into, + data: S, + ) -> Result + where + S: futures::Stream + Send + 'static, + ::Item: Into>, + { + let session_id: String = session_id.into(); + let result_id: String = result_id.into(); + + let request = futures::stream::iter([v3::results::UploadResultDataRequest::from( + upload::Request::Identifier { + session_id, + result_id, + }, + )]); + let request = request.chain(data.map(|chunk| { + v3::results::UploadResultDataRequest::from(upload::Request::DataChunk(chunk.into())) + })); + + Ok(self + .inner + .upload_result_data(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .result + .map_or_else(Default::default, Into::into)) + } + + /// Retrieve data. + pub async fn download( + &mut self, + session_id: impl Into, + result_id: impl Into, + ) -> Result< + impl futures::Stream, super::RequestError>>, + super::RequestError, + > { + Ok(self + .inner + .download_result_data(download::Request { + session_id: session_id.into(), + result_id: result_id.into(), + }) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .map(|response| { + response + .map(|response| response.data_chunk) + .context(super::GrpcSnafu {}) + })) + } + + /// Delete data from multiple results. + pub async fn delete_data( + &mut self, + session_id: impl Into, + result_ids: impl IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(delete_data::Request { + session_id: session_id.into(), + result_ids: result_ids.into_collect(), + }) + .await? + .result_ids) + } + + /// Get the configuration of the service. + pub async fn get_service_configuration( + &mut self, + ) -> Result { + self.call(get_service_configuration::Request {}).await + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + ResultsClient { + async fn call(self, request: list::Request) -> Result { + Ok(self + .inner + .list_results(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get::Request) -> Result { + Ok(self + .inner + .get_result(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get_owner_task_id::Request) -> Result { + Ok(self + .inner + .get_owner_task_id(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: create_metadata::Request) -> Result { + Ok(self + .inner + .create_results_meta_data(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: create::Request) -> Result { + Ok(self + .inner + .create_results(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: delete_data::Request) -> Result { + Ok(self + .inner + .delete_results_data(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get_service_configuration::Request) -> Result { + Ok(self + .inner + .get_service_configuration(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[async_trait::async_trait(?Send)] +impl GrpcCall for &'_ mut ResultsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + type Response = + std::pin::Pin>>>; + type Error = super::RequestError; + + async fn call(self, request: download::Request) -> Result { + Ok(Box::pin( + self.inner + .download_result_data(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .map(|response| response.map(Into::into).context(super::GrpcSnafu {})), + )) + } +} + +#[async_trait::async_trait(?Send)] +impl GrpcCallStream for &'_ mut ResultsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, + S: Stream + Send + 'static, +{ + type Response = upload::Response; + type Error = super::RequestError; + + async fn call(self, request: S) -> Result { + Ok(self + .inner + .upload_result_data(request.map(Into::into)) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } +} + +#[cfg(test)] +#[serial_test::serial(results)] +mod tests { + use std::collections::HashMap; + + use crate::Client; + use futures::TryStreamExt; + + // Named methods + + #[tokio::test] + async fn list() { + let before = Client::get_nb_request("Results", "ListResults").await; + let mut client = Client::new().await.unwrap().results(); + client + .list( + crate::results::filter::Or { + or: vec![crate::results::filter::And { and: vec![] }], + }, + crate::results::Sort::default(), + 0, + 10, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "ListResults").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get() { + let before = Client::get_nb_request("Results", "GetResult").await; + let mut client = Client::new().await.unwrap().results(); + client.get("result-id").await.unwrap(); + let after = Client::get_nb_request("Results", "GetResult").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_owner_task_id() { + let before = Client::get_nb_request("Results", "GetOwnerTaskId").await; + let mut client = Client::new().await.unwrap().results(); + client + .get_owner_task_id("session-id", ["result1", "result2"]) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "GetOwnerTaskId").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_metadata() { + let before = Client::get_nb_request("Results", "CreateResultsMetaData").await; + let mut client = Client::new().await.unwrap().results(); + client + .create_metadata("session-id", ["result1", "result2"]) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "CreateResultsMetaData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create() { + let before = Client::get_nb_request("Results", "CreateResults").await; + let mut client = Client::new().await.unwrap().results(); + client + .create( + "session-id", + [("result1", "payload1"), ("result2", "payload2")], + ) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "CreateResults").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn upload() { + let before = Client::get_nb_request("Results", "UploadResultData").await; + let mut client = Client::new().await.unwrap().results(); + client + .upload("session-id", "result-id", futures::stream::iter([b""])) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "UploadResultData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn download() { + let before = Client::get_nb_request("Results", "DownloadResultData").await; + let mut client = Client::new().await.unwrap().results(); + client + .download("session-id", "result-id") + .await + .unwrap() + .try_collect::>() + .await + .unwrap(); + let after = Client::get_nb_request("Results", "DownloadResultData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn delete_data() { + let before = Client::get_nb_request("Results", "DeleteResultsData").await; + let mut client = Client::new().await.unwrap().results(); + client + .delete_data("session-id", ["result1", "result2"]) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "DeleteResultsData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_service_configuration() { + let before = Client::get_nb_request("Results", "GetServiceConfiguration").await; + let mut client = Client::new().await.unwrap().results(); + client.get_service_configuration().await.unwrap(); + let after = Client::get_nb_request("Results", "GetServiceConfiguration").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn list_call() { + let before = Client::get_nb_request("Results", "ListResults").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::list::Request { + page_size: 10, + ..Default::default() + }) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "ListResults").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_call() { + let before = Client::get_nb_request("Results", "GetResult").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::get::Request { + id: String::from("result-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "GetResult").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_owner_task_id_call() { + let before = Client::get_nb_request("Results", "GetOwnerTaskId").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::get_owner_task_id::Request { + session_id: String::from("session-id"), + result_ids: Vec::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "GetOwnerTaskId").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_metadata_call() { + let before = Client::get_nb_request("Results", "CreateResultsMetaData").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::create_metadata::Request { + session_id: String::from("session-id"), + names: Vec::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "CreateResultsMetaData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_call() { + let before = Client::get_nb_request("Results", "CreateResults").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::create::Request { + session_id: String::from("session-id"), + results: HashMap::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "CreateResults").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn delete_data_call() { + let before = Client::get_nb_request("Results", "DeleteResultsData").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::delete_data::Request { + session_id: String::from("session-id"), + result_ids: vec![String::from("result-id")], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "DeleteResultsData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_service_configuration_call() { + let before = Client::get_nb_request("Results", "GetServiceConfiguration").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::get_service_configuration::Request {}) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "GetServiceConfiguration").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn download_call() { + let before = Client::get_nb_request("Results", "DownloadResultData").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(crate::results::download::Request { + session_id: String::from("session-id"), + result_id: String::from("result-id"), + }) + .await + .unwrap() + .try_collect::>() + .await + .unwrap(); + let after = Client::get_nb_request("Results", "DownloadResultData").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn upload_call() { + let before = Client::get_nb_request("Results", "UploadResultData").await; + let mut client = Client::new().await.unwrap().results(); + client + .call(Box::pin(futures::stream::iter([ + crate::results::upload::Request::Identifier { + session_id: String::from("session-id"), + result_id: String::from("result-id"), + }, + ]))) + .await + .unwrap(); + let after = Client::get_nb_request("Results", "UploadResultData").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/sessions.rs b/packages/rust/armonik/src/client/sessions.rs new file mode 100644 index 000000000..cc0856baa --- /dev/null +++ b/packages/rust/armonik/src/client/sessions.rs @@ -0,0 +1,560 @@ +use snafu::ResultExt; + +use crate::api::v3; +use crate::sessions::{ + cancel, close, create, delete, filter, get, list, pause, purge, resume, stop_submission, Raw, + Sort, +}; +use crate::utils::IntoCollection; +use crate::TaskOptions; + +use super::GrpcCall; + +/// Service for handling sessions +#[derive(Clone)] +pub struct SessionsClient { + inner: v3::sessions::sessions_client::SessionsClient, +} + +impl SessionsClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::sessions::sessions_client::SessionsClient::new(channel), + } + } + + /// Get a sessions list using pagination, filters and sorting. + pub async fn list( + &mut self, + filters: impl IntoIterator>, + sort: Sort, + with_task_options: bool, + page: i32, + page_size: i32, + ) -> Result { + self.call(list::Request { + filters: filters + .into_iter() + .map(crate::utils::IntoCollection::into_collect) + .collect(), + sort, + with_task_options, + page, + page_size, + }) + .await + } + + /// Get a session by its id. + pub async fn get(&mut self, session_id: impl Into) -> Result { + Ok(self + .call(get::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Cancel a session by its id. + pub async fn cancel( + &mut self, + session_id: impl Into, + ) -> Result { + Ok(self + .call(cancel::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Create a session. + pub async fn create( + &mut self, + partitions: impl IntoIterator>, + default_task_options: TaskOptions, + ) -> Result { + Ok(self + .call(create::Request { + default_task_options, + partition_ids: partitions.into_collect(), + }) + .await? + .session_id) + } + + /// Pause a session by its id. + pub async fn pause( + &mut self, + session_id: impl Into, + ) -> Result { + Ok(self + .call(pause::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Resume a paused session by its id. + pub async fn resume( + &mut self, + session_id: impl Into, + ) -> Result { + Ok(self + .call(resume::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Close a session by its id. + pub async fn close( + &mut self, + session_id: impl Into, + ) -> Result { + Ok(self + .call(close::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Purge a session by its id. Removes Results data. + pub async fn purge( + &mut self, + session_id: impl Into, + ) -> Result { + Ok(self + .call(purge::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Delete a session by its id. Removes metadata from Results, Sessions and Tasks associated to the session. + pub async fn delete( + &mut self, + session_id: impl Into, + ) -> Result { + Ok(self + .call(delete::Request { + session_id: session_id.into(), + }) + .await? + .session) + } + + /// Stops clients and/or workers from submitting new tasks in the given session. + pub async fn stop_submission( + &mut self, + session_id: impl Into, + stop_client: bool, + stop_worker: bool, + ) -> Result { + Ok(self + .call(stop_submission::Request { + session_id: session_id.into(), + client: stop_client, + worker: stop_worker, + }) + .await? + .session) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + SessionsClient { + async fn call(self, request: list::Request) -> Result { + Ok(self + .inner + .list_sessions(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get::Request) -> Result { + Ok(self + .inner + .get_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: cancel::Request) -> Result { + Ok(self + .inner + .cancel_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: create::Request) -> Result { + Ok(self + .inner + .create_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: pause::Request) -> Result { + Ok(self + .inner + .pause_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + + async fn call(self, request: resume::Request) -> Result { + Ok(self + .inner + .resume_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: close::Request) -> Result { + Ok(self + .inner + .close_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: purge::Request) -> Result { + Ok(self + .inner + .purge_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: delete::Request) -> Result { + Ok(self + .inner + .delete_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: stop_submission::Request) -> Result { + Ok(self + .inner + .stop_submission(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[cfg(test)] +#[serial_test::serial(sessions)] +mod tests { + use crate::{Client, TaskOptions}; + + // Named methods + + #[tokio::test] + async fn list() { + let before = Client::get_nb_request("Sessions", "ListSessions").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .list( + crate::sessions::filter::Or { + or: vec![crate::sessions::filter::And { and: vec![] }], + }, + crate::sessions::Sort::default(), + true, + 0, + 10, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "ListSessions").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get() { + let before = Client::get_nb_request("Sessions", "GetSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.get("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "GetSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel() { + let before = Client::get_nb_request("Sessions", "CancelSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.cancel("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "CancelSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create() { + let before = Client::get_nb_request("Sessions", "CreateSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .create( + ["part1", "part2"], + TaskOptions { + partition_id: String::from("part1"), + ..Default::default() + }, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "CreateSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn pause() { + let before = Client::get_nb_request("Sessions", "PauseSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.pause("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "PauseSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn resume() { + let before = Client::get_nb_request("Sessions", "ResumeSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.resume("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "ResumeSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn close() { + let before = Client::get_nb_request("Sessions", "CloseSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.close("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "CloseSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn purge() { + let before = Client::get_nb_request("Sessions", "PurgeSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.purge("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "PurgeSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn delete() { + let before = Client::get_nb_request("Sessions", "DeleteSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client.delete("session-id").await.unwrap(); + let after = Client::get_nb_request("Sessions", "DeleteSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn stop_submission() { + let before = Client::get_nb_request("Sessions", "StopSubmission").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .stop_submission("session-id", true, true) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "StopSubmission").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn list_call() { + let before = Client::get_nb_request("Sessions", "ListSessions").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::list::Request { + page_size: 10, + ..Default::default() + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "ListSessions").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_call() { + let before = Client::get_nb_request("Sessions", "GetSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::get::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "GetSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel_call() { + let before = Client::get_nb_request("Sessions", "CancelSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::cancel::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "CancelSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_call() { + let before = Client::get_nb_request("Sessions", "CreateSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::create::Request { + default_task_options: TaskOptions { + partition_id: String::from("part1"), + ..Default::default() + }, + partition_ids: vec![String::from("part1"), String::from("part2")], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "CreateSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn pause_call() { + let before = Client::get_nb_request("Sessions", "PauseSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::pause::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "PauseSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn resume_call() { + let before = Client::get_nb_request("Sessions", "ResumeSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::resume::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "ResumeSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn close_call() { + let before = Client::get_nb_request("Sessions", "CloseSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::close::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "CloseSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn purge_call() { + let before = Client::get_nb_request("Sessions", "PurgeSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::purge::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "PurgeSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn delete_call() { + let before = Client::get_nb_request("Sessions", "DeleteSession").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::delete::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "DeleteSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn stop_submission_call() { + let before = Client::get_nb_request("Sessions", "StopSubmission").await; + let mut client = Client::new().await.unwrap().sessions(); + client + .call(crate::sessions::stop_submission::Request { + session_id: String::from("session-id"), + client: true, + worker: true, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Sessions", "StopSubmission").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/submitter.rs b/packages/rust/armonik/src/client/submitter.rs new file mode 100644 index 000000000..d87c7c362 --- /dev/null +++ b/packages/rust/armonik/src/client/submitter.rs @@ -0,0 +1,895 @@ +#![allow(deprecated)] + +use std::collections::HashMap; +use std::pin::Pin; + +use futures::{Stream, StreamExt}; +use snafu::ResultExt; + +use crate::api::v3; +use crate::submitter::{ + cancel_session, cancel_tasks, count_tasks, create_session, create_tasks, + get_service_configuration, list_sessions, list_tasks, result_status, task_status, + try_get_result, try_get_task_output, wait_for_availability, wait_for_completion, SessionFilter, + TaskFilter, +}; +use crate::utils::IntoCollection; +use crate::{Configuration, Output, ResultStatus, TaskOptions, TaskRequest, TaskStatus}; + +use super::{GrpcCall, GrpcCallStream}; + +#[derive(Clone)] +#[deprecated] +pub struct SubmitterClient { + inner: v3::submitter::submitter_client::SubmitterClient, +} + +#[allow(deprecated)] +impl SubmitterClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::submitter::submitter_client::SubmitterClient::new(channel), + } + } + + pub async fn get_service_configuration( + &mut self, + ) -> Result { + self.call(get_service_configuration::Request {}).await + } + + pub async fn create_session( + &mut self, + partitions: impl IntoIterator>, + default_task_options: TaskOptions, + ) -> Result { + Ok(self + .call(create_session::Request { + default_task_options, + partition_ids: partitions.into_collect(), + }) + .await? + .session_id) + } + + pub async fn cancel_session( + &mut self, + session_id: impl Into, + ) -> Result<(), super::RequestError> { + self.call(cancel_session::Request { + session_id: session_id.into(), + }) + .await?; + Ok(()) + } + + pub async fn create_small_tasks( + &mut self, + session_id: impl Into, + task_options: Option, + tasks: impl IntoIterator, + ) -> Result, super::RequestError> { + let response = self + .call(create_tasks::SmallRequest { + session_id: session_id.into(), + task_options, + task_requests: tasks.into_collect(), + }) + .await?; + + match response { + create_tasks::Response::Status(statuses) => Ok(statuses), + create_tasks::Response::Error(msg) => { + Err(tonic::Status::internal(msg)).context(super::GrpcSnafu {}) + } + } + } + + pub async fn create_large_tasks( + &mut self, + request: impl Stream + Send + 'static, + ) -> Result, super::RequestError> { + let response = self.call(request).await?; + + match response { + create_tasks::Response::Status(statuses) => Ok(statuses), + create_tasks::Response::Error(msg) => { + Err(tonic::Status::internal(msg)).context(super::GrpcSnafu {}) + } + } + } + + pub async fn list_tasks( + &mut self, + filter: TaskFilter, + ) -> Result, super::RequestError> { + Ok(self.call(list_tasks::Request { filter }).await?.task_ids) + } + + pub async fn list_sessions( + &mut self, + filter: SessionFilter, + ) -> Result, super::RequestError> { + Ok(self + .call(list_sessions::Request { filter }) + .await? + .session_ids) + } + + pub async fn count_tasks( + &mut self, + filter: TaskFilter, + ) -> Result, super::RequestError> { + Ok(self.call(count_tasks::Request { filter }).await?.values) + } + + pub async fn try_get_result( + &mut self, + session_id: impl Into, + result_id: impl Into, + ) -> Result< + impl Stream>, + super::RequestError, + > { + Ok(self + .inner + .try_get_result_stream(try_get_result::Request { + session_id: session_id.into(), + result_id: result_id.into(), + }) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .map(|item| item.map(Into::into).context(super::GrpcSnafu {}))) + } + + pub async fn try_get_task_output( + &mut self, + session_id: impl Into, + task_id: impl Into, + ) -> Result<(), super::RequestError> { + let response = self + .call(try_get_task_output::Request { + session_id: session_id.into(), + task_id: task_id.into(), + }) + .await?; + + match response { + Output::Ok => Ok(()), + Output::Error { details } => { + Err(tonic::Status::internal(details)).context(super::GrpcSnafu {}) + } + } + } + + pub async fn wait_for_availability( + &mut self, + session_id: impl Into, + result_id: impl Into, + ) -> Result { + self.call(wait_for_availability::Request { + session_id: session_id.into(), + result_id: result_id.into(), + }) + .await + } + + pub async fn wait_for_completion( + &mut self, + filter: TaskFilter, + stop_on_first_task_error: bool, + stop_on_first_task_cancellation: bool, + ) -> Result, super::RequestError> { + Ok(self + .call(wait_for_completion::Request { + filter, + stop_on_first_task_error, + stop_on_first_task_cancellation, + }) + .await? + .values) + } + + pub async fn cancel_tasks(&mut self, filter: TaskFilter) -> Result<(), super::RequestError> { + self.call(cancel_tasks::Request { filter }).await?; + Ok(()) + } + + pub async fn task_status( + &mut self, + task_ids: impl IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(task_status::Request { + task_ids: task_ids.into_collect(), + }) + .await? + .statuses) + } + + pub async fn result_status( + &mut self, + session_id: impl Into, + result_ids: impl IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(result_status::Request { + session_id: session_id.into(), + result_ids: result_ids.into_collect(), + }) + .await? + .statuses) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + SubmitterClient { + async fn call(self, request: get_service_configuration::Request) -> Result { + Ok(self + .inner + .get_service_configuration(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: create_session::Request) -> Result { + Ok(self + .inner + .create_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: cancel_session::Request) -> Result { + Ok(self + .inner + .cancel_session(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: create_tasks::SmallRequest) -> Result { + Ok(self + .inner + .create_small_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: list_tasks::Request) -> Result { + Ok(self + .inner + .list_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: list_sessions::Request) -> Result { + Ok(self + .inner + .list_sessions(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: count_tasks::Request) -> Result { + Ok(self + .inner + .count_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: try_get_result::Request) -> Result>>>> { + Ok(Box::pin(self + .inner + .try_get_result_stream(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .map(|item| item.map(Into::into)))) + } + + async fn call(self, request: try_get_task_output::Request) -> Result { + Ok(self + .inner + .try_get_task_output(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: wait_for_availability::Request) -> Result { + Ok(self + .inner + .wait_for_availability(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: wait_for_completion::Request) -> Result { + Ok(self + .inner + .wait_for_completion(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: cancel_tasks::Request) -> Result { + Ok(self + .inner + .cancel_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: task_status::Request) -> Result { + Ok(self + .inner + .get_task_status(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: result_status::Request) -> Result { + Ok(self + .inner + .get_result_status(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[async_trait::async_trait(?Send)] +impl GrpcCallStream for &'_ mut SubmitterClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, + S: Stream + Send + 'static, +{ + type Response = create_tasks::Response; + type Error = super::RequestError; + + async fn call(self, request: S) -> Result { + Ok(self + .inner + .create_large_tasks(request.map(Into::into)) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } +} + +#[cfg(test)] +#[serial_test::serial(submitter)] +mod tests { + use futures::TryStreamExt; + + use crate::Client; + + // Named methods + + #[tokio::test] + async fn get_service_configuration() { + let before = Client::get_nb_request("Submitter", "GetServiceConfiguration").await; + let mut client = Client::new().await.unwrap().submitter(); + client.get_service_configuration().await.unwrap(); + let after = Client::get_nb_request("Submitter", "GetServiceConfiguration").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_session() { + let before = Client::get_nb_request("Submitter", "CreateSession").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .create_session( + ["part1", "part2"], + crate::TaskOptions { + partition_id: String::from("part1"), + ..Default::default() + }, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CreateSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel_session() { + let before = Client::get_nb_request("Submitter", "CancelSession").await; + let mut client = Client::new().await.unwrap().submitter(); + client.cancel_session("session-id").await.unwrap(); + let after = Client::get_nb_request("Submitter", "CancelSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_small_tasks() { + let before = Client::get_nb_request("Submitter", "CreateSmallTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + match client.create_small_tasks("session-id", None, []).await { + Ok(_) => (), + Err(crate::client::RequestError::Grpc { source, .. }) => { + if source.code() != tonic::Code::Internal || !source.message().is_empty() { + panic!("{:?}", source) + } + } + } + let after = Client::get_nb_request("Submitter", "CreateSmallTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_large_tasks() { + let before = Client::get_nb_request("Submitter", "CreateLargeTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + match client + .create_large_tasks(futures::stream::iter([ + crate::submitter::create_tasks::LargeRequest::Invalid, + ])) + .await + { + Ok(_) => (), + Err(crate::client::RequestError::Grpc { source, .. }) => { + if source.code() != tonic::Code::Internal || !source.message().is_empty() { + panic!("{:?}", source) + } + } + } + let after = Client::get_nb_request("Submitter", "CreateLargeTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn list_tasks() { + let before = Client::get_nb_request("Submitter", "ListTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .list_tasks(crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from("session-id")]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "ListTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn list_sessions() { + let before = Client::get_nb_request("Submitter", "ListSessions").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .list_sessions(crate::submitter::SessionFilter { + ids: vec![String::from("session-id")], + statuses: crate::submitter::SessionFilterStatuses::Exclude(vec![]), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "ListSessions").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn count_tasks() { + let before = Client::get_nb_request("Submitter", "CountTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .count_tasks(crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from("session-id")]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CountTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn try_get_result() { + let before = Client::get_nb_request("Submitter", "TryGetResultStream").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .try_get_result("session-id", "result-id") + .await + .unwrap() + .try_collect::>() + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "TryGetResultStream").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn try_get_task_output() { + let before = Client::get_nb_request("Submitter", "TryGetTaskOutput").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .try_get_task_output("session-id", "task_id") + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "TryGetTaskOutput").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn wait_for_availability() { + let before = Client::get_nb_request("Submitter", "WaitForAvailability").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .wait_for_availability("session-id", "result-id") + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "WaitForAvailability").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn wait_for_completion() { + let before = Client::get_nb_request("Submitter", "WaitForCompletion").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .wait_for_completion( + crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from( + "session-id", + )]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }, + true, + true, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "WaitForCompletion").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel_tasks() { + let before = Client::get_nb_request("Submitter", "CancelTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .cancel_tasks(crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from("session-id")]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CancelTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn task_status() { + let before = Client::get_nb_request("Submitter", "GetTaskStatus").await; + let mut client = Client::new().await.unwrap().submitter(); + client.task_status(["task1", "task2"]).await.unwrap(); + let after = Client::get_nb_request("Submitter", "GetTaskStatus").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn result_status() { + let before = Client::get_nb_request("Submitter", "GetResultStatus").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .result_status("session-id", ["result1", "result2"]) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "GetResultStatus").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn get_service_configuration_call() { + let before = Client::get_nb_request("Submitter", "GetServiceConfiguration").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::get_service_configuration::Request {}) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "GetServiceConfiguration").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_session_call() { + let before = Client::get_nb_request("Submitter", "CreateSession").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::create_session::Request { + partition_ids: vec![String::from("part1"), String::from("part2")], + default_task_options: crate::TaskOptions { + partition_id: String::from("part1"), + ..Default::default() + }, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CreateSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel_session_call() { + let before = Client::get_nb_request("Submitter", "CancelSession").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::cancel_session::Request { + session_id: String::from("session-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CancelSession").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_small_tasks_call() { + let before = Client::get_nb_request("Submitter", "CreateSmallTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + match client + .call(crate::submitter::create_tasks::SmallRequest { + session_id: String::from("session-id"), + task_options: None, + task_requests: vec![], + }) + .await + { + Ok(_) => (), + Err(crate::client::RequestError::Grpc { source, .. }) => { + if source.code() != tonic::Code::Internal || !source.message().is_empty() { + panic!("{:?}", source) + } + } + } + let after = Client::get_nb_request("Submitter", "CreateSmallTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn create_large_tasks_call() { + let before = Client::get_nb_request("Submitter", "CreateLargeTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + match client + .call(futures::stream::iter([ + crate::submitter::create_tasks::LargeRequest::Invalid, + ])) + .await + { + Ok(_) => (), + Err(crate::client::RequestError::Grpc { source, .. }) => { + if source.code() != tonic::Code::Internal || !source.message().is_empty() { + panic!("{:?}", source) + } + } + } + let after = Client::get_nb_request("Submitter", "CreateLargeTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn list_tasks_call() { + let before = Client::get_nb_request("Submitter", "ListTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::list_tasks::Request { + filter: crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from( + "session-id", + )]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "ListTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn list_sessions_call() { + let before = Client::get_nb_request("Submitter", "ListSessions").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::list_sessions::Request { + filter: crate::submitter::SessionFilter { + ids: vec![String::from("session-id")], + statuses: crate::submitter::SessionFilterStatuses::Exclude(vec![]), + }, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "ListSessions").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn count_tasks_call() { + let before = Client::get_nb_request("Submitter", "CountTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::count_tasks::Request { + filter: crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from( + "session-id", + )]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CountTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn try_get_result_call() { + let before = Client::get_nb_request("Submitter", "TryGetResultStream").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::try_get_result::Request { + session_id: String::from("session-id"), + result_id: String::from("result-id"), + }) + .await + .unwrap() + .try_collect::>() + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "TryGetResultStream").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn try_get_task_output_call() { + let before = Client::get_nb_request("Submitter", "TryGetTaskOutput").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::try_get_task_output::Request { + session_id: String::from("session-id"), + task_id: String::from("task-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "TryGetTaskOutput").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn wait_for_availability_call() { + let before = Client::get_nb_request("Submitter", "WaitForAvailability").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::wait_for_availability::Request { + session_id: String::from("session-id"), + result_id: String::from("result-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "WaitForAvailability").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn wait_for_completion_call() { + let before = Client::get_nb_request("Submitter", "WaitForCompletion").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::wait_for_completion::Request { + filter: crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from( + "session-id", + )]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }, + stop_on_first_task_cancellation: true, + stop_on_first_task_error: true, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "WaitForCompletion").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel_tasks_call() { + let before = Client::get_nb_request("Submitter", "CancelTasks").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::cancel_tasks::Request { + filter: crate::submitter::TaskFilter { + ids: crate::submitter::TaskFilterIds::Sessions(vec![String::from( + "session-id", + )]), + statuses: crate::submitter::TaskFilterStatuses::Exclude(vec![]), + }, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "CancelTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn task_status_call() { + let before = Client::get_nb_request("Submitter", "GetTaskStatus").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::task_status::Request { + task_ids: Vec::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "GetTaskStatus").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn result_status_call() { + let before = Client::get_nb_request("Submitter", "GetResultStatus").await; + let mut client = Client::new().await.unwrap().submitter(); + client + .call(crate::submitter::result_status::Request { + session_id: String::from("session-id"), + result_ids: Vec::new(), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Submitter", "GetResultStatus").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/tasks.rs b/packages/rust/armonik/src/client/tasks.rs new file mode 100644 index 000000000..d2dd12dba --- /dev/null +++ b/packages/rust/armonik/src/client/tasks.rs @@ -0,0 +1,428 @@ +use std::collections::HashMap; + +use snafu::ResultExt; + +use crate::api::v3; +use crate::tasks::{ + cancel, count_status, filter, get, get_result_ids, list, list_detailed, submit, Raw, Sort, + Summary, +}; +use crate::utils::IntoCollection; +use crate::{StatusCount, TaskOptions}; + +use super::GrpcCall; + +/// Service for handling tasks. +#[derive(Clone)] +pub struct TasksClient { + inner: v3::tasks::tasks_client::TasksClient, +} + +impl TasksClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::tasks::tasks_client::TasksClient::new(channel), + } + } + + /// Get a tasks list using pagination, filters and sorting. + pub async fn list( + &mut self, + filters: impl IntoIterator>, + sort: Sort, + with_errors: bool, + page: i32, + page_size: i32, + ) -> Result { + self.call(list::Request { + filters: filters + .into_iter() + .map(crate::utils::IntoCollection::into_collect) + .collect(), + sort, + with_errors, + page, + page_size, + }) + .await + } + + /// Get a tasks list using pagination, filters and sorting. + pub async fn list_detailed( + &mut self, + filters: impl IntoIterator>, + sort: Sort, + with_errors: bool, + page: i32, + page_size: i32, + ) -> Result { + self.call(list_detailed::Request { + filters: filters + .into_iter() + .map(crate::utils::IntoCollection::into_collect) + .collect(), + sort, + with_errors, + page, + page_size, + }) + .await + } + + /// Get a task by its id. + pub async fn get(&mut self, task_id: impl Into) -> Result { + Ok(self + .call(get::Request { + task_id: task_id.into(), + }) + .await? + .task) + } + + /// Cancel tasks using ids. + pub async fn cancel( + &mut self, + task_ids: impl IntoIterator>, + ) -> Result, super::RequestError> { + Ok(self + .call(cancel::Request { + task_ids: task_ids.into_collect(), + }) + .await? + .tasks) + } + + /// Get ids of the result that tasks should produce. + pub async fn get_result_ids( + &mut self, + task_ids: impl IntoIterator>, + ) -> Result>, super::RequestError> { + Ok(self + .call(get_result_ids::Request { + task_ids: task_ids.into_collect(), + }) + .await? + .task_results) + } + + /// Get count from tasks status. + pub async fn count_status( + &mut self, + filters: filter::Or, + ) -> Result, super::RequestError> { + Ok(self.call(count_status::Request { filters }).await?.status) + } + + /// Create tasks metadata and submit task for processing. + pub async fn submit( + &mut self, + session_id: impl Into, + task_options: Option, + items: impl IntoIterator, + ) -> Result, super::RequestError> { + Ok(self + .call(submit::Request { + session_id: session_id.into(), + task_options, + items: items.into_collect(), + }) + .await? + .items) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + TasksClient { + async fn call(self, request: list::Request) -> Result { + Ok(self + .inner + .list_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: list_detailed::Request) -> Result { + Ok(self + .inner + .list_tasks_detailed(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get::Request) -> Result { + Ok(self + .inner + .get_task(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: cancel::Request) -> Result { + Ok(self + .inner + .cancel_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: get_result_ids::Request) -> Result { + Ok(self + .inner + .get_result_ids(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: count_status::Request) -> Result { + Ok(self + .inner + .count_tasks_by_status(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: submit::Request) -> Result { + Ok(self + .inner + .submit_tasks(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[cfg(test)] +#[serial_test::serial(tasks)] +mod tests { + use crate::Client; + + // Named methods + + #[tokio::test] + async fn list() { + let before = Client::get_nb_request("Tasks", "ListTasks").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .list( + crate::tasks::filter::Or { + or: vec![crate::tasks::filter::And { and: vec![] }], + }, + crate::tasks::Sort::default(), + true, + 0, + 10, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "ListTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn list_detailed() { + let before = Client::get_nb_request("Tasks", "ListTasksDetailed").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .list_detailed( + crate::tasks::filter::Or { + or: vec![crate::tasks::filter::And { and: vec![] }], + }, + crate::tasks::Sort::default(), + true, + 0, + 10, + ) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "ListTasksDetailed").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get() { + let before = Client::get_nb_request("Tasks", "GetTask").await; + let mut client = Client::new().await.unwrap().tasks(); + client.get("task-id").await.unwrap(); + let after = Client::get_nb_request("Tasks", "GetTask").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel() { + let before = Client::get_nb_request("Tasks", "CancelTasks").await; + let mut client = Client::new().await.unwrap().tasks(); + client.cancel(["task1", "task2"]).await.unwrap(); + let after = Client::get_nb_request("Tasks", "CancelTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_result_ids() { + let before = Client::get_nb_request("Tasks", "GetResultIds").await; + let mut client = Client::new().await.unwrap().tasks(); + client.get_result_ids(["task1", "task2"]).await.unwrap(); + let after = Client::get_nb_request("Tasks", "GetResultIds").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn count_status() { + let before = Client::get_nb_request("Tasks", "CountTasksByStatus").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .count_status(crate::tasks::filter::Or { + or: vec![crate::tasks::filter::And { and: vec![] }], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "CountTasksByStatus").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn submit() { + let before = Client::get_nb_request("Tasks", "SubmitTasks").await; + let mut client = Client::new().await.unwrap().tasks(); + client.submit("session-id", None, []).await.unwrap(); + let after = Client::get_nb_request("Tasks", "SubmitTasks").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn list_call() { + let before = Client::get_nb_request("Tasks", "ListTasks").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::list::Request { + page_size: 10, + ..Default::default() + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "ListTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn list_detailed_call() { + let before = Client::get_nb_request("Tasks", "ListTasksDetailed").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::list_detailed::Request { + page_size: 10, + ..Default::default() + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "ListTasksDetailed").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_call() { + let before = Client::get_nb_request("Tasks", "GetTask").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::get::Request { + task_id: String::from("task-id"), + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "GetTask").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn cancel_call() { + let before = Client::get_nb_request("Tasks", "CancelTasks").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::cancel::Request { + task_ids: vec![String::from("task1"), String::from("task2")], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "CancelTasks").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn get_result_ids_call() { + let before = Client::get_nb_request("Tasks", "GetResultIds").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::get_result_ids::Request { + task_ids: vec![String::from("task1"), String::from("task2")], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "GetResultIds").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn count_status_call() { + let before = Client::get_nb_request("Tasks", "CountTasksByStatus").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::count_status::Request { + filters: crate::tasks::filter::Or { + or: vec![crate::tasks::filter::And { and: vec![] }], + }, + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "CountTasksByStatus").await; + assert_eq!(after - before, 1); + } + + #[tokio::test] + async fn submit_call() { + let before = Client::get_nb_request("Tasks", "SubmitTasks").await; + let mut client = Client::new().await.unwrap().tasks(); + client + .call(crate::tasks::submit::Request { + session_id: String::from("session-id"), + task_options: None, + items: vec![], + }) + .await + .unwrap(); + let after = Client::get_nb_request("Tasks", "SubmitTasks").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/versions.rs b/packages/rust/armonik/src/client/versions.rs new file mode 100644 index 000000000..223772a85 --- /dev/null +++ b/packages/rust/armonik/src/client/versions.rs @@ -0,0 +1,87 @@ +use snafu::ResultExt; + +use crate::api::v3; +use crate::versions::list; + +use super::GrpcCall; + +#[derive(Clone)] +pub struct VersionsClient { + inner: v3::versions::versions_client::VersionsClient, +} + +impl VersionsClient +where + T: Clone, + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::versions::versions_client::VersionsClient::new(channel), + } + } + + pub async fn list(&mut self) -> Result { + self.call(list::Request {}).await + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + VersionsClient { + async fn call(self, request: list::Request) -> Result { + Ok(self + .inner + .list_versions(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} + +#[cfg(test)] +#[serial_test::serial(versions)] +mod tests { + use crate::Client; + + // Named methods + + #[tokio::test] + async fn list() { + let before = Client::get_nb_request("Versions", "ListVersions").await; + let mut client = Client::new().await.unwrap().versions(); + client.list().await.unwrap(); + let after = Client::get_nb_request("Versions", "ListVersions").await; + assert_eq!(after - before, 1); + } + + // Explicit call request + + #[tokio::test] + async fn list_call() { + let before = Client::get_nb_request("Versions", "ListVersions").await; + let mut client = Client::new().await.unwrap().versions(); + client + .call(crate::versions::list::Request {}) + .await + .unwrap(); + let after = Client::get_nb_request("Versions", "ListVersions").await; + assert_eq!(after - before, 1); + } +} diff --git a/packages/rust/armonik/src/client/worker.rs b/packages/rust/armonik/src/client/worker.rs new file mode 100644 index 000000000..ec9c52f69 --- /dev/null +++ b/packages/rust/armonik/src/client/worker.rs @@ -0,0 +1,73 @@ +use snafu::ResultExt; + +use crate::api::v3; +use crate::worker::{health_check, process}; +use crate::Output; + +use super::GrpcCall; + +#[derive(Clone)] +pub struct WorkerClient { + inner: v3::worker::worker_client::WorkerClient, +} + +impl WorkerClient +where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: tonic::codegen::Body + Send + 'static, + ::Error: Into + Send, +{ + /// Build a client from a gRPC channel + pub fn with_channel(channel: T) -> Self { + Self { + inner: v3::worker::worker_client::WorkerClient::new(channel), + } + } + + pub async fn health_check(&mut self) -> Result { + self.call(health_check::Request {}).await + } + + pub async fn process( + &mut self, + request: process::Request, + ) -> Result { + Ok(self.call(request).await?.output) + } + + /// Perform a gRPC call from a raw request. + pub async fn call( + &mut self, + request: Request, + ) -> Result<<&mut Self as GrpcCall>::Response, <&mut Self as GrpcCall>::Error> + where + for<'a> &'a mut Self: GrpcCall, + { + <&mut Self as GrpcCall>::call(self, request).await + } +} + +super::impl_call! { + WorkerClient { + async fn call(self, request: health_check::Request) -> Result { + Ok(self + .inner + .health_check(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + + async fn call(self, request: process::Request) -> Result { + Ok(self + .inner + .process(request) + .await + .context(super::GrpcSnafu {})? + .into_inner() + .into()) + } + } +} diff --git a/packages/rust/armonik/src/lib.rs b/packages/rust/armonik/src/lib.rs new file mode 100644 index 000000000..594140db4 --- /dev/null +++ b/packages/rust/armonik/src/lib.rs @@ -0,0 +1,10 @@ +//! Rust bindings for the ArmoniK API + +pub mod api; +pub mod client; +mod objects; + +pub use client::{Client, ClientConfig}; +pub use objects::*; + +mod utils; diff --git a/packages/rust/armonik/src/objects/agent/create_results.rs b/packages/rust/armonik/src/objects/agent/create_results.rs new file mode 100644 index 000000000..eda758592 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/create_results.rs @@ -0,0 +1,79 @@ +use std::collections::HashMap; + +use super::ResultMetaData; + +use crate::api::v3; + +/// Request for creating results with data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// Results to create. + pub results: HashMap>, + /// The session in which create results. + pub session_id: String, +} + +impl From for v3::agent::CreateResultsRequest { + fn from(value: Request) -> Self { + Self { + communication_token: value.communication_token, + results: value + .results + .into_iter() + .map(|(name, data)| v3::agent::create_results_request::ResultCreate { name, data }) + .collect(), + session_id: value.session_id, + } + } +} + +impl From for Request { + fn from(value: v3::agent::CreateResultsRequest) -> Self { + Self { + communication_token: value.communication_token, + results: value + .results + .into_iter() + .map(|result| (result.name, result.data)) + .collect(), + session_id: value.session_id, + } + } +} + +super::super::impl_convert!(req Request : v3::agent::CreateResultsRequest); + +/// Response for creating results without data. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// The list of ResultMetaData results that were created. + pub results: HashMap, +} + +impl From for v3::agent::CreateResultsResponse { + fn from(value: Response) -> Self { + Self { + communication_token: value.communication_token, + results: value.results.into_values().map(Into::into).collect(), + } + } +} + +impl From for Response { + fn from(value: v3::agent::CreateResultsResponse) -> Self { + Self { + communication_token: value.communication_token, + results: value + .results + .into_iter() + .map(|result| (result.name.clone(), result.into())) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::agent::CreateResultsResponse); diff --git a/packages/rust/armonik/src/objects/agent/create_results_metadata.rs b/packages/rust/armonik/src/objects/agent/create_results_metadata.rs new file mode 100644 index 000000000..0e7724056 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/create_results_metadata.rs @@ -0,0 +1,83 @@ +use std::collections::HashMap; + +use super::ResultMetaData; + +use crate::api::v3; + +/// Request for creating results without data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// The list of names for the results to create. + pub names: Vec, + /// The session in which create results. + pub session_id: String, +} + +impl From for v3::agent::CreateResultsMetaDataRequest { + fn from(value: Request) -> Self { + Self { + communication_token: value.communication_token, + results: value + .names + .into_iter() + .map( + |result| v3::agent::create_results_meta_data_request::ResultCreate { + name: result, + }, + ) + .collect(), + session_id: value.session_id, + } + } +} + +impl From for Request { + fn from(value: v3::agent::CreateResultsMetaDataRequest) -> Self { + Self { + communication_token: value.communication_token, + names: value + .results + .into_iter() + .map(|result| result.name) + .collect(), + session_id: value.session_id, + } + } +} + +super::super::impl_convert!(req Request : v3::agent::CreateResultsMetaDataRequest); + +/// Response for creating results without data. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// The list of ResultMetaData results that were created. + pub results: HashMap, +} + +impl From for v3::agent::CreateResultsMetaDataResponse { + fn from(value: Response) -> Self { + Self { + communication_token: value.communication_token, + results: value.results.into_values().map(Into::into).collect(), + } + } +} + +impl From for Response { + fn from(value: v3::agent::CreateResultsMetaDataResponse) -> Self { + Self { + communication_token: value.communication_token, + results: value + .results + .into_iter() + .map(|result| (result.name.clone(), result.into())) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::agent::CreateResultsMetaDataResponse); diff --git a/packages/rust/armonik/src/objects/agent/create_tasks.rs b/packages/rust/armonik/src/objects/agent/create_tasks.rs new file mode 100644 index 000000000..982cbbccd --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/create_tasks.rs @@ -0,0 +1,228 @@ +use super::super::{DataChunk, InitTaskRequest, TaskOptions}; +use crate::utils::IntoCollection; + +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct InitRequest { + pub task_options: Option, +} + +super::super::impl_convert!( + struct InitRequest = v3::agent::create_task_request::InitRequest { + option task_options, + } +); + +#[derive(Debug, Clone, Default)] +pub enum Request { + #[default] + Invalid, + InitRequest { + communication_token: String, + request: InitRequest, + }, + InitTaskRequest { + communication_token: String, + request: InitTaskRequest, + }, + DataChunk { + communication_token: String, + chunk: DataChunk, + }, +} + +impl From for v3::agent::CreateTaskRequest { + fn from(value: Request) -> Self { + match value { + Request::Invalid => Self { + communication_token: Default::default(), + r#type: None, + }, + Request::InitRequest { + communication_token, + request, + } => Self { + communication_token, + r#type: Some(v3::agent::create_task_request::Type::InitRequest( + request.into(), + )), + }, + Request::InitTaskRequest { + communication_token, + request, + } => Self { + communication_token, + r#type: Some(v3::agent::create_task_request::Type::InitTask( + request.into(), + )), + }, + Request::DataChunk { + communication_token, + chunk, + } => Self { + communication_token, + r#type: Some(v3::agent::create_task_request::Type::TaskPayload( + chunk.into(), + )), + }, + } + } +} + +impl From for Request { + fn from(value: v3::agent::CreateTaskRequest) -> Self { + match value.r#type { + Some(v3::agent::create_task_request::Type::InitRequest(request)) => Self::InitRequest { + communication_token: value.communication_token, + request: request.into(), + }, + Some(v3::agent::create_task_request::Type::InitTask(request)) => { + Self::InitTaskRequest { + communication_token: value.communication_token, + request: request.into(), + } + } + Some(v3::agent::create_task_request::Type::TaskPayload(chunk)) => Self::DataChunk { + communication_token: value.communication_token, + chunk: chunk.into(), + }, + None => Self::Invalid, + } + } +} + +super::super::impl_convert!(req Request : v3::agent::CreateTaskRequest); + +#[derive(Debug, Clone)] +pub enum Status { + TaskInfo { + /// Unique ID of the created task. + task_id: String, + /// Unique ID of the result that will be used as expected output. Results should already exist. + expected_output_keys: Vec, + /// Unique ID of the result that will be used as data dependency. Results should already exist. + data_dependencies: Vec, + /// Unique ID of the result that will be used as payload. Result associated to the payload is created implicitly. + payload_id: String, + }, + Error(String), +} + +impl Default for Status { + fn default() -> Self { + Self::Error(Default::default()) + } +} + +impl From for v3::agent::create_task_reply::CreationStatus { + fn from(value: Status) -> Self { + match value { + Status::TaskInfo { + task_id, + expected_output_keys, + data_dependencies, + payload_id, + } => Self { + status: Some( + v3::agent::create_task_reply::creation_status::Status::TaskInfo( + v3::agent::create_task_reply::TaskInfo { + task_id, + expected_output_keys, + data_dependencies, + payload_id, + }, + ), + ), + }, + Status::Error(msg) => Self { + status: Some(v3::agent::create_task_reply::creation_status::Status::Error(msg)), + }, + } + } +} + +impl From for Status { + fn from(value: v3::agent::create_task_reply::CreationStatus) -> Self { + match value.status { + Some(v3::agent::create_task_reply::creation_status::Status::TaskInfo(status)) => { + Self::TaskInfo { + task_id: status.task_id, + expected_output_keys: status.expected_output_keys, + data_dependencies: status.data_dependencies, + payload_id: status.payload_id, + } + } + Some(v3::agent::create_task_reply::creation_status::Status::Error(msg)) => { + Self::Error(msg) + } + None => Default::default(), + } + } +} + +#[derive(Debug, Clone)] +pub enum Response { + Status { + communication_token: String, + statuses: Vec, + }, + Error { + communication_token: String, + error: String, + }, +} + +impl Default for Response { + fn default() -> Self { + Self::Error { + communication_token: Default::default(), + error: Default::default(), + } + } +} + +impl From for v3::agent::CreateTaskReply { + fn from(value: Response) -> Self { + match value { + Response::Status { + communication_token, + statuses, + } => Self { + communication_token, + response: Some(v3::agent::create_task_reply::Response::CreationStatusList( + v3::agent::create_task_reply::CreationStatusList { + creation_statuses: statuses.into_collect(), + }, + )), + }, + Response::Error { + communication_token, + error, + } => Self { + communication_token, + response: Some(v3::agent::create_task_reply::Response::Error(error)), + }, + } + } +} + +impl From for Response { + fn from(value: v3::agent::CreateTaskReply) -> Self { + match value.response { + Some(v3::agent::create_task_reply::Response::CreationStatusList(status)) => { + Self::Status { + communication_token: value.communication_token, + statuses: status.creation_statuses.into_collect(), + } + } + Some(v3::agent::create_task_reply::Response::Error(error)) => Self::Error { + communication_token: value.communication_token, + error, + }, + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Response : v3::agent::CreateTaskReply); diff --git a/packages/rust/armonik/src/objects/agent/get_common_data.rs b/packages/rust/armonik/src/objects/agent/get_common_data.rs new file mode 100644 index 000000000..274066be9 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/get_common_data.rs @@ -0,0 +1,26 @@ +use crate::api::v3; + +/// Request to retrieve data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// Id of the result that will be retrieved. + pub result_id: String, +} + +super::super::impl_convert!(struct Request = v3::agent::DataRequest { + communication_token, + result_id, +}); + +/// Response when data is available in the shared folder. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Response { + /// Id of the result that will be retrieved. + pub result_id: String, +} + +super::super::impl_convert!(struct Response = v3::agent::DataResponse { + result_id, +}); diff --git a/packages/rust/armonik/src/objects/agent/get_direct_data.rs b/packages/rust/armonik/src/objects/agent/get_direct_data.rs new file mode 100644 index 000000000..274066be9 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/get_direct_data.rs @@ -0,0 +1,26 @@ +use crate::api::v3; + +/// Request to retrieve data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// Id of the result that will be retrieved. + pub result_id: String, +} + +super::super::impl_convert!(struct Request = v3::agent::DataRequest { + communication_token, + result_id, +}); + +/// Response when data is available in the shared folder. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Response { + /// Id of the result that will be retrieved. + pub result_id: String, +} + +super::super::impl_convert!(struct Response = v3::agent::DataResponse { + result_id, +}); diff --git a/packages/rust/armonik/src/objects/agent/get_resource_data.rs b/packages/rust/armonik/src/objects/agent/get_resource_data.rs new file mode 100644 index 000000000..274066be9 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/get_resource_data.rs @@ -0,0 +1,26 @@ +use crate::api::v3; + +/// Request to retrieve data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// Id of the result that will be retrieved. + pub result_id: String, +} + +super::super::impl_convert!(struct Request = v3::agent::DataRequest { + communication_token, + result_id, +}); + +/// Response when data is available in the shared folder. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Response { + /// Id of the result that will be retrieved. + pub result_id: String, +} + +super::super::impl_convert!(struct Response = v3::agent::DataResponse { + result_id, +}); diff --git a/packages/rust/armonik/src/objects/agent/mod.rs b/packages/rust/armonik/src/objects/agent/mod.rs new file mode 100644 index 000000000..8bcda9d00 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/mod.rs @@ -0,0 +1,14 @@ +//! ArmoniK objects related to the Agent service + +mod result_metadata; + +pub mod create_results; +pub mod create_results_metadata; +pub mod create_tasks; +pub mod get_common_data; +pub mod get_direct_data; +pub mod get_resource_data; +pub mod notify_result_data; +pub mod submit_tasks; + +pub use result_metadata::ResultMetaData; diff --git a/packages/rust/armonik/src/objects/agent/notify_result_data.rs b/packages/rust/armonik/src/objects/agent/notify_result_data.rs new file mode 100644 index 000000000..e9c2c97d3 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/notify_result_data.rs @@ -0,0 +1,65 @@ +use crate::api::v3; + +/// Request for notifying results data are available in files. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// The identifier of the session where all the results to be notified are. + pub session_id: String, + /// The identifiers of the results to be notified. + pub result_ids: Vec, +} + +impl From for v3::agent::NotifyResultDataRequest { + fn from(value: Request) -> Self { + Self { + ids: value + .result_ids + .into_iter() + .map( + |result_id| v3::agent::notify_result_data_request::ResultIdentifier { + session_id: value.session_id.clone(), + result_id, + }, + ) + .collect(), + communication_token: value.communication_token, + } + } +} + +impl From for Request { + fn from(value: v3::agent::NotifyResultDataRequest) -> Self { + let mut session_id = None; + let result_ids = value + .ids + .into_iter() + .map(|id| { + if session_id.is_none() { + session_id = Some(id.session_id) + } + id.result_id + }) + .collect(); + + Self { + communication_token: value.communication_token, + session_id: session_id.unwrap_or_default(), + result_ids, + } + } +} + +super::super::impl_convert!(req Request: v3::agent::NotifyResultDataRequest); + +/// Response for creating results without data. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The list of ResultMetaData results that were created. + pub result_ids: Vec, +} + +super::super::impl_convert!(struct Response = v3::agent::NotifyResultDataResponse { + list result_ids, +}); diff --git a/packages/rust/armonik/src/objects/agent/result_metadata.rs b/packages/rust/armonik/src/objects/agent/result_metadata.rs new file mode 100644 index 000000000..dc2235674 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/result_metadata.rs @@ -0,0 +1,28 @@ +use super::super::ResultStatus; + +use crate::api::v3; + +/// Result metadata +#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)] +pub struct ResultMetaData { + /// The session ID. + pub session_id: String, + /// The result ID. + pub result_id: String, + /// The result name. + pub name: String, + /// The result status. + pub status: ResultStatus, + /// The result creation date. + pub created_at: Option, +} + +super::super::impl_convert!( + struct ResultMetaData = v3::agent::ResultMetaData { + session_id, + result_id, + name, + status = enum status, + option created_at, + } +); diff --git a/packages/rust/armonik/src/objects/agent/submit_tasks.rs b/packages/rust/armonik/src/objects/agent/submit_tasks.rs new file mode 100644 index 000000000..f588a7de6 --- /dev/null +++ b/packages/rust/armonik/src/objects/agent/submit_tasks.rs @@ -0,0 +1,91 @@ +use super::super::TaskOptions; + +use crate::api::v3; + +/// Task creation requests. +#[derive(Debug, Clone, Default)] +pub struct RequestItem { + /// Unique ID of the results that will be produced by the task. Results should be created using ResultsService. + pub expected_output_keys: Vec, + /// Unique ID of the results that will be used as data dependencies. Results should be created using ResultsService. + pub data_dependencies: Vec, + /// Unique ID of the result that will be used as payload. Result should created using ResultsService. + pub payload_id: String, + /// Optional task options. + pub task_options: Option, +} + +super::super::impl_convert!( + struct RequestItem = v3::agent::submit_tasks_request::TaskCreation { + expected_output_keys, + data_dependencies, + payload_id, + option task_options, + } +); + +/// Request to create tasks. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// The session ID. + pub session_id: String, + /// The options for the tasks. Each task will have the same. Options are merged with the one from the session. + pub task_options: Option, + /// Task creation requests. + pub items: Vec, +} + +super::super::impl_convert!( + struct Request = v3::agent::SubmitTasksRequest { + communication_token, + session_id, + option task_options, + list items = list task_creations, + } +); + +/// task infos if submission successful, else throw gRPC exception. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct ResponseItem { + /// The task ID. + pub task_id: String, + /// The expected output IDs. A task have expected output IDs. + pub expected_output_ids: Vec, + /// The data dependencies IDs (inputs). A task have data dependencies. + pub data_dependencies: Vec, + /// Unique ID of the result that will be used as payload. + /// Result should created using ResultsService. + pub payload_id: String, +} + +super::super::impl_convert!( + struct ResponseItem = v3::agent::submit_tasks_response::TaskInfo { + task_id, + expected_output_ids, + data_dependencies, + payload_id, + } +); + +/// Response to create tasks. +/// +/// expected_output_ids and data_dependencies must be created through ResultsService. +/// +/// Remark : this may have to be enriched to a better management of errors but +/// will the client application be able to manage a missing data dependency or expected output ? +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Communication token received by the worker during task processing. + pub communication_token: String, + /// List of task infos if submission successful, else throw gRPC exception. + pub items: Vec, +} + +super::super::impl_convert!( + struct Response = v3::agent::SubmitTasksResponse { + communication_token, + list items = list task_infos, + } +); diff --git a/packages/rust/armonik/src/objects/applications/field.rs b/packages/rust/armonik/src/objects/applications/field.rs new file mode 100644 index 000000000..de82bbf59 --- /dev/null +++ b/packages/rust/armonik/src/objects/applications/field.rs @@ -0,0 +1,58 @@ +use crate::api::v3; + +/// Represents every available field in a Application. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum Field { + /// Unspecified. + Unspecified = 0, + /// Application name. + #[default] + Name = 1, + /// Application version. + Version = 2, + /// Application namespace. + Namespace = 3, + /// Application service. + Service = 4, +} + +impl From for Field { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::Name, + 2 => Self::Version, + 3 => Self::Namespace, + 4 => Self::Service, + _ => Self::Unspecified, + } + } +} + +impl From for v3::applications::ApplicationField { + fn from(value: Field) -> Self { + Self { + field: Some( + v3::applications::application_field::Field::ApplicationField( + v3::applications::ApplicationRawField { + field: value as i32, + }, + ), + ), + } + } +} + +impl From for Field { + fn from(value: v3::applications::ApplicationField) -> Self { + match value.field { + Some(v3::applications::application_field::Field::ApplicationField(field)) => { + Self::from(field.field) + } + None => Self::Unspecified, + } + } +} + +super::super::impl_convert!(req Field : v3::applications::ApplicationField); diff --git a/packages/rust/armonik/src/objects/applications/filter.rs b/packages/rust/armonik/src/objects/applications/filter.rs new file mode 100644 index 000000000..233165ac9 --- /dev/null +++ b/packages/rust/armonik/src/objects/applications/filter.rs @@ -0,0 +1,44 @@ +use super::super::FilterString; + +use crate::{api::v3, impl_filter}; + +impl_filter!( + Filter[super::Field, Condition]: + v3::applications::Filters[ + v3::applications::FiltersAnd[ + v3::applications::FilterField, + v3::applications::filter_field::ValueCondition + ] + ] +); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Condition { + String(FilterString), +} + +impl Default for Condition { + fn default() -> Self { + Self::String(Default::default()) + } +} + +impl From for v3::applications::filter_field::ValueCondition { + fn from(value: Condition) -> Self { + match value { + Condition::String(cond) => Self::FilterString(cond.into()), + } + } +} + +impl From for Condition { + fn from(value: v3::applications::filter_field::ValueCondition) -> Self { + match value { + v3::applications::filter_field::ValueCondition::FilterString(cond) => { + Self::String(cond.into()) + } + } + } +} + +super::super::impl_convert!(req Condition : v3::applications::filter_field::ValueCondition); diff --git a/packages/rust/armonik/src/objects/applications/list.rs b/packages/rust/armonik/src/objects/applications/list.rs new file mode 100644 index 000000000..658ed177b --- /dev/null +++ b/packages/rust/armonik/src/objects/applications/list.rs @@ -0,0 +1,45 @@ +use crate::api::v3; + +use super::{filter, Raw, Sort}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Request { + pub page: i32, + pub page_size: i32, + pub filters: filter::Or, + pub sort: Sort, +} + +impl Default for Request { + fn default() -> Self { + Self { + page: 0, + page_size: 100, + filters: Default::default(), + sort: Default::default(), + } + } +} + +super::super::impl_convert!(struct Request = v3::applications::ListApplicationsRequest { page, page_size, filters = option filters, sort = option sort }); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Response { + pub applications: Vec, + pub page: i32, + pub page_size: i32, + pub total: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + applications: Vec::new(), + page: 0, + page_size: 100, + total: 0, + } + } +} + +super::super::impl_convert!(struct Response = v3::applications::ListApplicationsResponse { list applications, page, page_size, total }); diff --git a/packages/rust/armonik/src/objects/applications/mod.rs b/packages/rust/armonik/src/objects/applications/mod.rs new file mode 100644 index 000000000..dcd7d705b --- /dev/null +++ b/packages/rust/armonik/src/objects/applications/mod.rs @@ -0,0 +1,16 @@ +//! ArmoniK objects related to the Applications service + +pub mod filter; +pub mod list; + +mod field; +mod raw; + +pub use field::Field; +pub use raw::Raw; + +pub type Sort = super::SortMany; + +super::impl_convert!( + struct Sort = crate::api::v3::applications::list_applications_request::Sort { direction = enum direction, list fields } +); diff --git a/packages/rust/armonik/src/objects/applications/raw.rs b/packages/rust/armonik/src/objects/applications/raw.rs new file mode 100644 index 000000000..c0cd5f3d2 --- /dev/null +++ b/packages/rust/armonik/src/objects/applications/raw.rs @@ -0,0 +1,25 @@ +use crate::api::v3; + +/// A raw application object. +/// +/// Used when a list of applications is requested. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Raw { + /// Application name. + pub name: String, + /// Application version. + pub version: String, + /// Application namespace used in the executed class. + pub namespace: String, + /// Application service used in the executed class. + pub service: String, +} + +super::super::impl_convert!( + struct Raw = v3::applications::ApplicationRaw { + name, + version, + namespace, + service, + } +); diff --git a/packages/rust/armonik/src/objects/auth/current_user.rs b/packages/rust/armonik/src/objects/auth/current_user.rs new file mode 100644 index 000000000..50060ec64 --- /dev/null +++ b/packages/rust/armonik/src/objects/auth/current_user.rs @@ -0,0 +1,18 @@ +use super::User; + +use crate::api::v3; + +/// Request to get current user information. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request {} + +super::super::impl_convert!(struct Request = v3::auth::GetCurrentUserRequest {}); + +/// Response to get current user information. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Return current user. If auth failed, must throw a gRPC error. + pub user: User, +} + +super::super::impl_convert!(struct Response = v3::auth::GetCurrentUserResponse { user = option user }); diff --git a/packages/rust/armonik/src/objects/auth/mod.rs b/packages/rust/armonik/src/objects/auth/mod.rs new file mode 100644 index 000000000..d052718da --- /dev/null +++ b/packages/rust/armonik/src/objects/auth/mod.rs @@ -0,0 +1,7 @@ +//! ArmoniK objects related to the Auth service + +pub mod current_user; + +mod user; + +pub use user::User; diff --git a/packages/rust/armonik/src/objects/auth/user.rs b/packages/rust/armonik/src/objects/auth/user.rs new file mode 100644 index 000000000..f6e6f3e3d --- /dev/null +++ b/packages/rust/armonik/src/objects/auth/user.rs @@ -0,0 +1,10 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct User { + pub username: String, + pub roles: Vec, + pub permissions: Vec, +} + +super::super::impl_convert!(struct User = v3::auth::User { username, list roles, list permissions }); diff --git a/packages/rust/armonik/src/objects/configuration.rs b/packages/rust/armonik/src/objects/configuration.rs new file mode 100644 index 000000000..121cbbd78 --- /dev/null +++ b/packages/rust/armonik/src/objects/configuration.rs @@ -0,0 +1,20 @@ +use crate::api::v3; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Configuration { + pub data_chunk_max_size: i32, +} + +impl Default for Configuration { + fn default() -> Self { + Self { + data_chunk_max_size: 80 * 1024, + } + } +} + +super::impl_convert!( + struct Configuration = v3::Configuration { + data_chunk_max_size, + } +); diff --git a/packages/rust/armonik/src/objects/count.rs b/packages/rust/armonik/src/objects/count.rs new file mode 100644 index 000000000..76959f113 --- /dev/null +++ b/packages/rust/armonik/src/objects/count.rs @@ -0,0 +1,39 @@ +use std::collections::HashMap; + +use crate::api::v3; + +use super::TaskStatus; + +#[derive(Debug, Clone, Default)] +pub struct Count { + pub values: HashMap, +} + +impl From for v3::Count { + fn from(value: Count) -> Self { + Self { + values: value + .values + .into_iter() + .map(|(status, count)| v3::StatusCount { + status: status as i32, + count, + }) + .collect(), + } + } +} + +impl From for Count { + fn from(value: v3::Count) -> Self { + Self { + values: value + .values + .into_iter() + .map(|sc| (sc.status.into(), sc.count)) + .collect(), + } + } +} + +super::impl_convert!(req Count : v3::Count); diff --git a/packages/rust/armonik/src/objects/data_chunk.rs b/packages/rust/armonik/src/objects/data_chunk.rs new file mode 100644 index 000000000..7fe505274 --- /dev/null +++ b/packages/rust/armonik/src/objects/data_chunk.rs @@ -0,0 +1,38 @@ +use crate::api::v3; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum DataChunk { + Data(Vec), + Complete, +} + +impl Default for DataChunk { + fn default() -> Self { + Self::Data(Vec::new()) + } +} + +impl From for v3::DataChunk { + fn from(value: DataChunk) -> Self { + match value { + DataChunk::Data(data) => Self { + r#type: Some(v3::data_chunk::Type::Data(data)), + }, + DataChunk::Complete => Self { + r#type: Some(v3::data_chunk::Type::DataComplete(true)), + }, + } + } +} + +impl From for DataChunk { + fn from(value: v3::DataChunk) -> Self { + match value.r#type { + Some(v3::data_chunk::Type::Data(data)) => Self::Data(data), + Some(v3::data_chunk::Type::DataComplete(_)) => Self::Complete, + None => Default::default(), + } + } +} + +super::impl_convert!(req DataChunk : v3::DataChunk); diff --git a/packages/rust/armonik/src/objects/error.rs b/packages/rust/armonik/src/objects/error.rs new file mode 100644 index 000000000..38da9b4cb --- /dev/null +++ b/packages/rust/armonik/src/objects/error.rs @@ -0,0 +1,16 @@ +use crate::api::v3; + +use super::TaskStatus; + +#[derive(Debug, Clone, Default)] +pub struct Error { + pub task_status: TaskStatus, + pub details: String, +} + +super::impl_convert!( + struct Error = v3::Error { + task_status = enum task_status, + details = detail, + } +); diff --git a/packages/rust/armonik/src/objects/events/events_enum.rs b/packages/rust/armonik/src/objects/events/events_enum.rs new file mode 100644 index 000000000..682c3b56c --- /dev/null +++ b/packages/rust/armonik/src/objects/events/events_enum.rs @@ -0,0 +1,61 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum EventsEnum { + /// Unspecified + #[default] + Unspecified = 0, + /// New task + NewTask = 1, + /// Task status update + TaskStatusUpdate = 2, + /// New result + NewResult = 3, + /// Result status update + ResultStatusUpdate = 4, + /// Result owner update + ResultOwnerUpdate = 5, +} + +impl From for EventsEnum { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::NewTask, + 2 => Self::TaskStatusUpdate, + 3 => Self::NewResult, + 4 => Self::ResultStatusUpdate, + 5 => Self::ResultOwnerUpdate, + _ => Default::default(), + } + } +} + +impl From for v3::events::EventsEnum { + fn from(value: EventsEnum) -> Self { + match value { + EventsEnum::Unspecified => Self::Unspecified, + EventsEnum::NewTask => Self::NewTask, + EventsEnum::TaskStatusUpdate => Self::TaskStatusUpdate, + EventsEnum::NewResult => Self::NewResult, + EventsEnum::ResultStatusUpdate => Self::ResultStatusUpdate, + EventsEnum::ResultOwnerUpdate => Self::ResultOwnerUpdate, + } + } +} + +impl From for EventsEnum { + fn from(value: v3::events::EventsEnum) -> Self { + match value { + v3::events::EventsEnum::Unspecified => Self::Unspecified, + v3::events::EventsEnum::NewTask => Self::NewTask, + v3::events::EventsEnum::TaskStatusUpdate => Self::TaskStatusUpdate, + v3::events::EventsEnum::NewResult => Self::NewResult, + v3::events::EventsEnum::ResultStatusUpdate => Self::ResultStatusUpdate, + v3::events::EventsEnum::ResultOwnerUpdate => Self::ResultOwnerUpdate, + } + } +} + +super::super::impl_convert!(req EventsEnum : v3::events::EventsEnum); diff --git a/packages/rust/armonik/src/objects/events/mod.rs b/packages/rust/armonik/src/objects/events/mod.rs new file mode 100644 index 000000000..3a7c6cc2c --- /dev/null +++ b/packages/rust/armonik/src/objects/events/mod.rs @@ -0,0 +1,19 @@ +//! ArmoniK objects related to the Events service + +mod events_enum; +mod new_result; +mod new_task; +mod result_owner_update; +mod result_status_update; +mod task_status_update; +mod update; + +pub mod subscribe; + +pub use events_enum::EventsEnum; +pub use new_result::NewResult; +pub use new_task::NewTask; +pub use result_owner_update::ResultOwnerUpdate; +pub use result_status_update::ResultStatusUpdate; +pub use task_status_update::TaskStatusUpdate; +pub use update::Update; diff --git a/packages/rust/armonik/src/objects/events/new_result.rs b/packages/rust/armonik/src/objects/events/new_result.rs new file mode 100644 index 000000000..08d69ba65 --- /dev/null +++ b/packages/rust/armonik/src/objects/events/new_result.rs @@ -0,0 +1,16 @@ +use super::super::ResultStatus; + +use crate::api::v3; + +/// Represents an update to the status of a result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct NewResult { + /// The result id. + pub result_id: String, + /// The owner task id. + pub owner_id: String, + /// The result status. + pub status: ResultStatus, +} + +super::super::impl_convert!(struct NewResult = v3::events::event_subscription_response::NewResult { result_id, owner_id, status = enum status }); diff --git a/packages/rust/armonik/src/objects/events/new_task.rs b/packages/rust/armonik/src/objects/events/new_task.rs new file mode 100644 index 000000000..c2717b1c3 --- /dev/null +++ b/packages/rust/armonik/src/objects/events/new_task.rs @@ -0,0 +1,37 @@ +use super::super::TaskStatus; + +use crate::api::v3; + +/// Represents an update to the status of a task. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct NewTask { + /// The task id. + pub task_id: String, + /// The payload id. + pub payload_id: String, + /// The task id before retry. + pub origin_task_id: String, + /// The task status. + pub status: TaskStatus, + /// The keys of the expected outputs + pub expected_output_keys: Vec, + /// The keys of the data dependencies. + pub data_dependencies: Vec, + /// The list of retried tasks from the first retry to the current. + pub retry_of_ids: Vec, + /// The parent task IDs. A tasks can be a child of another task. + pub parent_task_ids: Vec, +} + +super::super::impl_convert!( + struct NewTask = v3::events::event_subscription_response::NewTask { + task_id, + payload_id, + origin_task_id, + status = enum status, + expected_output_keys, + data_dependencies, + retry_of_ids, + parent_task_ids, + } +); diff --git a/packages/rust/armonik/src/objects/events/result_owner_update.rs b/packages/rust/armonik/src/objects/events/result_owner_update.rs new file mode 100644 index 000000000..fd87e4be7 --- /dev/null +++ b/packages/rust/armonik/src/objects/events/result_owner_update.rs @@ -0,0 +1,20 @@ +use crate::api::v3; + +/// Represents an update to the owner task id of a result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct ResultOwnerUpdate { + /// The result id. + pub result_id: String, + /// The previous owner id. + pub previous_owner_id: String, + /// The current owner id. + pub current_owner_id: String, +} + +super::super::impl_convert!( + struct ResultOwnerUpdate = v3::events::event_subscription_response::ResultOwnerUpdate { + result_id, + previous_owner_id, + current_owner_id, + } +); diff --git a/packages/rust/armonik/src/objects/events/result_status_update.rs b/packages/rust/armonik/src/objects/events/result_status_update.rs new file mode 100644 index 000000000..6abc29c6e --- /dev/null +++ b/packages/rust/armonik/src/objects/events/result_status_update.rs @@ -0,0 +1,19 @@ +use super::super::ResultStatus; + +use crate::api::v3; + +/// Represents an update to the status of a result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct ResultStatusUpdate { + /// The result id. + pub result_id: String, + /// The result status. + pub status: ResultStatus, +} + +super::super::impl_convert!( + struct ResultStatusUpdate = v3::events::event_subscription_response::ResultStatusUpdate { + result_id, + status = enum status, + } +); diff --git a/packages/rust/armonik/src/objects/events/subscribe.rs b/packages/rust/armonik/src/objects/events/subscribe.rs new file mode 100644 index 000000000..a6c3b1eeb --- /dev/null +++ b/packages/rust/armonik/src/objects/events/subscribe.rs @@ -0,0 +1,62 @@ +use super::Update; + +use crate::{api::v3, utils::IntoCollection}; + +/// Request to subscribe to the event stream. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Id of the session that will be used to subscribe events for. + pub session_id: String, + /// Filter for task related events. + pub task_filters: super::super::tasks::filter::Or, + /// Filter for result related events. + pub result_filters: super::super::results::filter::Or, + /// Filter the type of events to return. Empty means all. + pub returned_events: Vec, +} + +impl From for v3::events::EventSubscriptionRequest { + fn from(value: Request) -> Self { + Self { + session_id: value.session_id, + tasks_filters: Some(value.task_filters.into()), + results_filters: Some(value.result_filters.into()), + returned_events: value + .returned_events + .into_iter() + .map(|v| v as i32) + .collect(), + } + } +} + +impl From for Request { + fn from(value: v3::events::EventSubscriptionRequest) -> Self { + Self { + session_id: value.session_id, + task_filters: value.tasks_filters.unwrap_or_default().into(), + result_filters: value.results_filters.unwrap_or_default().into(), + returned_events: value.returned_events.into_collect(), + } + } +} + +super::super::impl_convert!( + req Request : v3::events::EventSubscriptionRequest +); + +/// Response containing the update event. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Id of the session that will be used to subscribe events for. + pub session_id: String, + /// Represents an event update. Only one update will be sent per message. + pub update: Update, +} + +super::super::impl_convert!( + struct Response = v3::events::EventSubscriptionResponse { + session_id, + update = update, + } +); diff --git a/packages/rust/armonik/src/objects/events/task_status_update.rs b/packages/rust/armonik/src/objects/events/task_status_update.rs new file mode 100644 index 000000000..d0a6e2ac2 --- /dev/null +++ b/packages/rust/armonik/src/objects/events/task_status_update.rs @@ -0,0 +1,19 @@ +use super::super::TaskStatus; + +use crate::api::v3; + +/// Represents an update to the status of a task. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct TaskStatusUpdate { + /// The task id. + pub task_id: String, + /// The task status. + pub status: TaskStatus, +} + +super::super::impl_convert!( + struct TaskStatusUpdate = v3::events::event_subscription_response::TaskStatusUpdate { + task_id, + status = enum status, + } +); diff --git a/packages/rust/armonik/src/objects/events/update.rs b/packages/rust/armonik/src/objects/events/update.rs new file mode 100644 index 000000000..c66b8ada6 --- /dev/null +++ b/packages/rust/armonik/src/objects/events/update.rs @@ -0,0 +1,68 @@ +use super::{NewResult, NewTask, ResultOwnerUpdate, ResultStatusUpdate, TaskStatusUpdate}; + +use crate::api::v3; + +/// Represents an event update. Only one update will be sent per message. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum Update { + /// Invalid update + #[default] + Invalid = 0, + /// An update to the status of a task. + TaskStatusUpdate(TaskStatusUpdate) = 2, + /// An update to the status of a result. + ResultStatusUpdate(ResultStatusUpdate) = 3, + /// An update to the owner of a result. + ResultOwnerUpdate(ResultOwnerUpdate) = 4, + /// A new task in ArmoniK. + NewTask(NewTask) = 5, + /// A new result in ArmoniK. + NewResult(NewResult) = 6, +} + +impl From for Option { + fn from(value: Update) -> Self { + match value { + Update::Invalid => None, + Update::TaskStatusUpdate(update) => Some( + v3::events::event_subscription_response::Update::TaskStatusUpdate(update.into()), + ), + Update::ResultStatusUpdate(update) => Some( + v3::events::event_subscription_response::Update::ResultStatusUpdate(update.into()), + ), + Update::ResultOwnerUpdate(update) => Some( + v3::events::event_subscription_response::Update::ResultOwnerUpdate(update.into()), + ), + Update::NewTask(update) => Some( + v3::events::event_subscription_response::Update::NewTask(update.into()), + ), + Update::NewResult(update) => Some( + v3::events::event_subscription_response::Update::NewResult(update.into()), + ), + } + } +} + +impl From> for Update { + fn from(value: Option) -> Self { + match value { + Some(v3::events::event_subscription_response::Update::TaskStatusUpdate(update)) => { + Self::TaskStatusUpdate(update.into()) + } + Some(v3::events::event_subscription_response::Update::ResultStatusUpdate(update)) => { + Self::ResultStatusUpdate(update.into()) + } + Some(v3::events::event_subscription_response::Update::ResultOwnerUpdate(update)) => { + Self::ResultOwnerUpdate(update.into()) + } + Some(v3::events::event_subscription_response::Update::NewTask(update)) => { + Self::NewTask(update.into()) + } + Some(v3::events::event_subscription_response::Update::NewResult(update)) => { + Self::NewResult(update.into()) + } + None => Self::Invalid, + } + } +} diff --git a/packages/rust/armonik/src/objects/filters/array_operator.rs b/packages/rust/armonik/src/objects/filters/array_operator.rs new file mode 100644 index 000000000..3c37177ba --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/array_operator.rs @@ -0,0 +1,41 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterArrayOperator { + /// Contains the specified element. + #[default] + Contains = 0, + /// Does not contain the specified element. + NotContains = 1, +} + +impl From for FilterArrayOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Contains, + 1 => Self::NotContains, + _ => Default::default(), + } + } +} + +impl From for v3::FilterArrayOperator { + fn from(value: FilterArrayOperator) -> Self { + match value { + FilterArrayOperator::Contains => Self::Contains, + FilterArrayOperator::NotContains => Self::NotContains, + } + } +} + +impl From for FilterArrayOperator { + fn from(value: v3::FilterArrayOperator) -> Self { + match value { + v3::FilterArrayOperator::Contains => Self::Contains, + v3::FilterArrayOperator::NotContains => Self::NotContains, + } + } +} + +super::super::impl_convert!(req FilterArrayOperator : v3::FilterArrayOperator); diff --git a/packages/rust/armonik/src/objects/filters/boolean_operator.rs b/packages/rust/armonik/src/objects/filters/boolean_operator.rs new file mode 100644 index 000000000..9b6215929 --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/boolean_operator.rs @@ -0,0 +1,36 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterBooleanOperator { + /// Is the same as the specified boolean. + #[default] + Is = 0, +} + +impl From for FilterBooleanOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Is, + _ => Default::default(), + } + } +} + +impl From for v3::FilterBooleanOperator { + fn from(value: FilterBooleanOperator) -> Self { + match value { + FilterBooleanOperator::Is => Self::Is, + } + } +} + +impl From for FilterBooleanOperator { + fn from(value: v3::FilterBooleanOperator) -> Self { + match value { + v3::FilterBooleanOperator::Is => Self::Is, + } + } +} + +super::super::impl_convert!(req FilterBooleanOperator : v3::FilterBooleanOperator); diff --git a/packages/rust/armonik/src/objects/filters/date_operator.rs b/packages/rust/armonik/src/objects/filters/date_operator.rs new file mode 100644 index 000000000..0897724e3 --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/date_operator.rs @@ -0,0 +1,61 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterDateOperator { + /// Is equal to the specified date. + #[default] + Equal = 0, + /// Is not equal to the specified date. + NotEqual = 1, + /// Is before the specified date. + Before = 2, + /// Is before or equal to the specified date. + BeforeOrEqual = 3, + /// Is After or equal to the specified date. + AfterOrEqual = 4, + /// Is after the specified date. + After = 5, +} + +impl From for FilterDateOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Equal, + 1 => Self::NotEqual, + 2 => Self::Before, + 3 => Self::BeforeOrEqual, + 4 => Self::AfterOrEqual, + 5 => Self::After, + _ => Default::default(), + } + } +} + +impl From for v3::FilterDateOperator { + fn from(value: FilterDateOperator) -> Self { + match value { + FilterDateOperator::Equal => Self::Equal, + FilterDateOperator::NotEqual => Self::NotEqual, + FilterDateOperator::Before => Self::Before, + FilterDateOperator::BeforeOrEqual => Self::BeforeOrEqual, + FilterDateOperator::AfterOrEqual => Self::AfterOrEqual, + FilterDateOperator::After => Self::After, + } + } +} + +impl From for FilterDateOperator { + fn from(value: v3::FilterDateOperator) -> Self { + match value { + v3::FilterDateOperator::Equal => Self::Equal, + v3::FilterDateOperator::NotEqual => Self::NotEqual, + v3::FilterDateOperator::Before => Self::Before, + v3::FilterDateOperator::BeforeOrEqual => Self::BeforeOrEqual, + v3::FilterDateOperator::AfterOrEqual => Self::AfterOrEqual, + v3::FilterDateOperator::After => Self::After, + } + } +} + +super::super::impl_convert!(req FilterDateOperator : v3::FilterDateOperator); diff --git a/packages/rust/armonik/src/objects/filters/duration_operator.rs b/packages/rust/armonik/src/objects/filters/duration_operator.rs new file mode 100644 index 000000000..bd9bc0ece --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/duration_operator.rs @@ -0,0 +1,61 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterDurationOperator { + /// Is equal to the specified duration. + #[default] + Equal = 0, + /// Is not equal to the specified duration. + NotEqual = 1, + /// Is shorter than the specified duration. + ShorterThan = 2, + /// Is shorter or equal to the specified duration. + ShorterThanOrEqual = 3, + /// Is longer or equal to the specified duration. + LongerThanOrEqual = 4, + /// Is longer than the specified duration. + LongerThan = 5, +} + +impl From for FilterDurationOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Equal, + 1 => Self::NotEqual, + 2 => Self::ShorterThan, + 3 => Self::ShorterThanOrEqual, + 4 => Self::LongerThanOrEqual, + 5 => Self::LongerThan, + _ => Default::default(), + } + } +} + +impl From for v3::FilterDurationOperator { + fn from(value: FilterDurationOperator) -> Self { + match value { + FilterDurationOperator::Equal => Self::Equal, + FilterDurationOperator::NotEqual => Self::NotEqual, + FilterDurationOperator::ShorterThan => Self::ShorterThan, + FilterDurationOperator::ShorterThanOrEqual => Self::ShorterThanOrEqual, + FilterDurationOperator::LongerThanOrEqual => Self::LongerThanOrEqual, + FilterDurationOperator::LongerThan => Self::LongerThan, + } + } +} + +impl From for FilterDurationOperator { + fn from(value: v3::FilterDurationOperator) -> Self { + match value { + v3::FilterDurationOperator::Equal => Self::Equal, + v3::FilterDurationOperator::NotEqual => Self::NotEqual, + v3::FilterDurationOperator::ShorterThan => Self::ShorterThan, + v3::FilterDurationOperator::ShorterThanOrEqual => Self::ShorterThanOrEqual, + v3::FilterDurationOperator::LongerThanOrEqual => Self::LongerThanOrEqual, + v3::FilterDurationOperator::LongerThan => Self::LongerThan, + } + } +} + +super::super::impl_convert!(req FilterDurationOperator : v3::FilterDurationOperator); diff --git a/packages/rust/armonik/src/objects/filters/filter.rs b/packages/rust/armonik/src/objects/filters/filter.rs new file mode 100644 index 000000000..15e6e7bbd --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/filter.rs @@ -0,0 +1,101 @@ +use crate::api::v3; + +use super::{ + FilterArrayOperator, FilterBooleanOperator, FilterDateOperator, FilterDurationOperator, + FilterNumberOperator, FilterStatusOperator, FilterStringOperator, +}; + +macro_rules! impl_filter_condition { + ($name:ident => $type:ty : $op:ident) => { + #[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] + pub struct $name { + pub value: $type, + pub operator: $op, + } + + impl From<$name> for v3::$name { + fn from(value: $name) -> Self { + Self { + value: value.value, + operator: v3::$op::from(value.operator) as i32, + } + } + } + + impl From for $name { + fn from(value: v3::$name) -> Self { + Self { + value: value.value, + operator: value.operator.into(), + } + } + } + + super::super::impl_convert!(req $name : v3::$name); + }; +} + +impl_filter_condition!(FilterString => String: FilterStringOperator); +impl_filter_condition!(FilterNumber => i64: FilterNumberOperator); +impl_filter_condition!(FilterArray => String: FilterArrayOperator); +impl_filter_condition!(FilterBoolean => bool: FilterBooleanOperator); + +#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)] +pub struct FilterDate { + pub value: prost_types::Timestamp, + pub operator: FilterDateOperator, +} + +impl From for v3::FilterDate { + fn from(value: FilterDate) -> Self { + Self { + value: Some(value.value), + operator: v3::FilterDateOperator::from(value.operator) as i32, + } + } +} + +impl From for FilterDate { + fn from(value: v3::FilterDate) -> Self { + Self { + value: value.value.unwrap_or_default(), + operator: value.operator.into(), + } + } +} + +super::super::impl_convert!(req FilterDate : v3::FilterDate); + +#[derive(Debug, Clone, Default, PartialEq)] +pub struct FilterDuration { + pub value: prost_types::Duration, + pub operator: FilterDurationOperator, +} + +impl From for v3::FilterDuration { + fn from(value: FilterDuration) -> Self { + Self { + value: Some(value.value), + operator: v3::FilterDurationOperator::from(value.operator) as i32, + } + } +} + +impl From for FilterDuration { + fn from(value: v3::FilterDuration) -> Self { + Self { + value: value.value.unwrap_or_default(), + operator: value.operator.into(), + } + } +} + +impl Eq for FilterDuration {} + +super::super::impl_convert!(req FilterDuration : v3::FilterDuration); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct FilterStatus { + pub value: T, + pub operator: FilterStatusOperator, +} diff --git a/packages/rust/armonik/src/objects/filters/mod.rs b/packages/rust/armonik/src/objects/filters/mod.rs new file mode 100644 index 000000000..5dca2a43c --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/mod.rs @@ -0,0 +1,66 @@ +//! ArmoniK objects related to common filters + +mod array_operator; +mod boolean_operator; +mod date_operator; +mod duration_operator; +mod filter; +mod number_operator; +mod status_operator; +mod string_operator; + +pub use array_operator::FilterArrayOperator; +pub use boolean_operator::FilterBooleanOperator; +pub use date_operator::FilterDateOperator; +pub use duration_operator::FilterDurationOperator; +pub use filter::{ + FilterArray, FilterBoolean, FilterDate, FilterDuration, FilterNumber, FilterStatus, + FilterString, +}; +pub use number_operator::FilterNumberOperator; +pub use status_operator::FilterStatusOperator; +pub use string_operator::FilterStringOperator; + +macro_rules! impl_filter { + (Filter[$field:ty, $condition:ty]: $api_or:ty [$api_and:ty[$api_field:ty, $api_condition:ty]]) => { + #[derive(Debug, Clone, Default, PartialEq, Eq)] + pub struct Or { + pub or: Vec, + } + + super::super::impl_convert!( + struct Or = $api_or { + list or, + } + ); + + #[derive(Debug, Clone, Default, PartialEq, Eq)] + pub struct And { + pub and: Vec, + } + + super::super::impl_convert!( + struct And = $api_and { + list and, + } + ); + + #[derive(Debug, Clone, Default, PartialEq, Eq)] + pub struct Field { + pub field: $field, + pub condition: $condition, + } + + super::super::impl_convert!( + struct Field = $api_field { + field = option field, + condition = option value_condition, + } + ); + + crate::utils::impl_vec_wrapper!(Or{or: And}); + crate::utils::impl_vec_wrapper!(And{and: Field}); + }; +} + +pub(crate) use impl_filter; diff --git a/packages/rust/armonik/src/objects/filters/number_operator.rs b/packages/rust/armonik/src/objects/filters/number_operator.rs new file mode 100644 index 000000000..32c012fc1 --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/number_operator.rs @@ -0,0 +1,61 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterNumberOperator { + /// Is equal to the specified number. + #[default] + Equal = 0, + /// Is not equal to the specified number. + NotEqual = 1, + /// Is less than the specified number. + LessThan = 2, + /// Is less than or equal to the specified number. + LessThanOrEqual = 3, + /// Is greater than or equal to specified number. + GreaterThanOrEqual = 4, + /// Is greater than the specified number. + GreaterThan = 5, +} + +impl From for FilterNumberOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Equal, + 1 => Self::NotEqual, + 2 => Self::LessThan, + 3 => Self::LessThanOrEqual, + 4 => Self::GreaterThanOrEqual, + 5 => Self::GreaterThan, + _ => Default::default(), + } + } +} + +impl From for v3::FilterNumberOperator { + fn from(value: FilterNumberOperator) -> Self { + match value { + FilterNumberOperator::Equal => Self::Equal, + FilterNumberOperator::NotEqual => Self::NotEqual, + FilterNumberOperator::LessThan => Self::LessThan, + FilterNumberOperator::LessThanOrEqual => Self::LessThanOrEqual, + FilterNumberOperator::GreaterThanOrEqual => Self::GreaterThanOrEqual, + FilterNumberOperator::GreaterThan => Self::GreaterThan, + } + } +} + +impl From for FilterNumberOperator { + fn from(value: v3::FilterNumberOperator) -> Self { + match value { + v3::FilterNumberOperator::Equal => Self::Equal, + v3::FilterNumberOperator::NotEqual => Self::NotEqual, + v3::FilterNumberOperator::LessThan => Self::LessThan, + v3::FilterNumberOperator::LessThanOrEqual => Self::LessThanOrEqual, + v3::FilterNumberOperator::GreaterThanOrEqual => Self::GreaterThanOrEqual, + v3::FilterNumberOperator::GreaterThan => Self::GreaterThan, + } + } +} + +super::super::impl_convert!(req FilterNumberOperator : v3::FilterNumberOperator); diff --git a/packages/rust/armonik/src/objects/filters/status_operator.rs b/packages/rust/armonik/src/objects/filters/status_operator.rs new file mode 100644 index 000000000..b0cb842e7 --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/status_operator.rs @@ -0,0 +1,41 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterStatusOperator { + /// Is equal to the specified status. + #[default] + Equal = 0, + /// Is not equal to the specified status. + NotEqual = 1, +} + +impl From for FilterStatusOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Equal, + 1 => Self::NotEqual, + _ => Default::default(), + } + } +} + +impl From for v3::FilterStatusOperator { + fn from(value: FilterStatusOperator) -> Self { + match value { + FilterStatusOperator::Equal => Self::Equal, + FilterStatusOperator::NotEqual => Self::NotEqual, + } + } +} + +impl From for FilterStatusOperator { + fn from(value: v3::FilterStatusOperator) -> Self { + match value { + v3::FilterStatusOperator::Equal => Self::Equal, + v3::FilterStatusOperator::NotEqual => Self::NotEqual, + } + } +} + +super::super::impl_convert!(req FilterStatusOperator : v3::FilterStatusOperator); diff --git a/packages/rust/armonik/src/objects/filters/string_operator.rs b/packages/rust/armonik/src/objects/filters/string_operator.rs new file mode 100644 index 000000000..83520f0fd --- /dev/null +++ b/packages/rust/armonik/src/objects/filters/string_operator.rs @@ -0,0 +1,61 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum FilterStringOperator { + /// Is equal to the specified string. + #[default] + Equal = 0, + /// Is not equal to the specified string. + NotEqual = 1, + /// Contains the specified substring. + Contains = 2, + /// Does not contain the specified substring. + NotContains = 3, + /// Starts with the specified substring. + StartsWith = 4, + /// Ends with the specified substring. + EndsWith = 5, +} + +impl From for FilterStringOperator { + fn from(value: i32) -> Self { + match value { + 0 => Self::Equal, + 1 => Self::NotEqual, + 2 => Self::Contains, + 3 => Self::NotContains, + 4 => Self::StartsWith, + 5 => Self::EndsWith, + _ => Default::default(), + } + } +} + +impl From for v3::FilterStringOperator { + fn from(value: FilterStringOperator) -> Self { + match value { + FilterStringOperator::Equal => Self::Equal, + FilterStringOperator::NotEqual => Self::NotEqual, + FilterStringOperator::Contains => Self::Contains, + FilterStringOperator::NotContains => Self::NotContains, + FilterStringOperator::StartsWith => Self::StartsWith, + FilterStringOperator::EndsWith => Self::EndsWith, + } + } +} + +impl From for FilterStringOperator { + fn from(value: v3::FilterStringOperator) -> Self { + match value { + v3::FilterStringOperator::Equal => Self::Equal, + v3::FilterStringOperator::NotEqual => Self::NotEqual, + v3::FilterStringOperator::Contains => Self::Contains, + v3::FilterStringOperator::NotContains => Self::NotContains, + v3::FilterStringOperator::StartsWith => Self::StartsWith, + v3::FilterStringOperator::EndsWith => Self::EndsWith, + } + } +} + +super::super::impl_convert!(req FilterStringOperator : v3::FilterStringOperator); diff --git a/packages/rust/armonik/src/objects/init_keyed_data_stream.rs b/packages/rust/armonik/src/objects/init_keyed_data_stream.rs new file mode 100644 index 000000000..d27764638 --- /dev/null +++ b/packages/rust/armonik/src/objects/init_keyed_data_stream.rs @@ -0,0 +1,38 @@ +use crate::api::v3; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum InitKeyedDataStream { + Key(String), + LastResult, +} + +impl Default for InitKeyedDataStream { + fn default() -> Self { + Self::Key(Default::default()) + } +} + +impl From for v3::InitKeyedDataStream { + fn from(value: InitKeyedDataStream) -> Self { + match value { + InitKeyedDataStream::Key(key) => Self { + r#type: Some(v3::init_keyed_data_stream::Type::Key(key)), + }, + InitKeyedDataStream::LastResult => Self { + r#type: Some(v3::init_keyed_data_stream::Type::LastResult(true)), + }, + } + } +} + +impl From for InitKeyedDataStream { + fn from(value: v3::InitKeyedDataStream) -> Self { + match value.r#type { + Some(v3::init_keyed_data_stream::Type::Key(key)) => Self::Key(key), + Some(v3::init_keyed_data_stream::Type::LastResult(_)) => Self::LastResult, + None => Default::default(), + } + } +} + +super::impl_convert!(req InitKeyedDataStream : v3::InitKeyedDataStream); diff --git a/packages/rust/armonik/src/objects/init_task_request.rs b/packages/rust/armonik/src/objects/init_task_request.rs new file mode 100644 index 000000000..d9ba03b8e --- /dev/null +++ b/packages/rust/armonik/src/objects/init_task_request.rs @@ -0,0 +1,40 @@ +use super::TaskRequestHeader; + +use crate::api::v3; + +#[derive(Debug, Clone)] +pub enum InitTaskRequest { + Header(TaskRequestHeader), + LastTask, +} + +impl Default for InitTaskRequest { + fn default() -> Self { + Self::Header(Default::default()) + } +} + +impl From for v3::InitTaskRequest { + fn from(value: InitTaskRequest) -> Self { + match value { + InitTaskRequest::Header(header) => Self { + r#type: Some(v3::init_task_request::Type::Header(header.into())), + }, + InitTaskRequest::LastTask => Self { + r#type: Some(v3::init_task_request::Type::LastTask(true)), + }, + } + } +} + +impl From for InitTaskRequest { + fn from(value: v3::InitTaskRequest) -> Self { + match value.r#type { + Some(v3::init_task_request::Type::Header(header)) => Self::Header(header.into()), + Some(v3::init_task_request::Type::LastTask(_)) => Self::LastTask, + None => Default::default(), + } + } +} + +super::impl_convert!(req InitTaskRequest : v3::InitTaskRequest); diff --git a/packages/rust/armonik/src/objects/mod.rs b/packages/rust/armonik/src/objects/mod.rs new file mode 100644 index 000000000..155a22368 --- /dev/null +++ b/packages/rust/armonik/src/objects/mod.rs @@ -0,0 +1,199 @@ +//! The object module contains all the armonik objects for the API. +//! Each object has its own dedicated file that is re-exported here. +//! All services have their dedicated sub-modules, and rpcs have their own files within the service module which contains both a Request and Response object. +//! +//! Example: +//! +//! ```text +//! objects +//! + service1 +//! | + rpc1 +//! | | + Request +//! | | + Response +//! | + rpc2 +//! | + Request +//! | + Response +//! + service2 +//! | + rpc1 +//! | + Request +//! | + Response +//! + common1 +//! | + object1 +//! | | + Object1 +//! | + object2 +//! | + Object2 +//! + object1 +//! + Object1 +//! ``` + +mod configuration; +mod count; +mod data_chunk; +mod error; +mod filters; +mod init_keyed_data_stream; +mod init_task_request; +mod output; +mod result_request; +mod result_status; +mod session; +mod session_status; +mod sort; +mod status_count; +mod task_error; +mod task_id; +mod task_id_list; +mod task_id_with_status; +mod task_list; +mod task_options; +mod task_output_request; +mod task_request; +mod task_request_header; +mod task_status; + +pub mod agent; +pub mod applications; +pub mod auth; +pub mod events; +pub mod partitions; +pub mod results; +pub mod sessions; +pub mod submitter; +pub mod tasks; +pub mod versions; +pub mod worker; + +pub use configuration::Configuration; +pub use count::Count; +pub use data_chunk::DataChunk; +pub use error::Error; +pub use filters::*; +pub use init_keyed_data_stream::InitKeyedDataStream; +pub use init_task_request::InitTaskRequest; +pub use output::Output; +pub use result_request::ResultRequest; +pub use result_status::ResultStatus; +pub use session::Session; +pub use session_status::SessionStatus; +pub use sort::{Sort, SortDirection, SortMany}; +pub use status_count::StatusCount; +pub use task_error::TaskError; +pub use task_id::TaskId; +pub use task_id_list::TaskIdList; +pub use task_id_with_status::TaskIdWithStatus; +pub use task_list::TaskList; +pub use task_options::{TaskOptionField, TaskOptions}; +pub use task_output_request::TaskOutputRequest; +pub use task_request::TaskRequest; +pub use task_request_header::TaskRequestHeader; +pub use task_status::TaskStatus; + +macro_rules! impl_convert { + // * -> * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {$a:ident => $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: $value.$a.into(), + } + $value: $A => $B { $($tail)* } + ); + }; + // * -> Enum * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {$a:ident => enum $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: $value.$a as i32, + } + $value: $A => $B { $($tail)* } + ); + }; + // Enum * -> * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {enum $a:ident => $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: $value.$a.into(), + } + $value: $A => $B { $($tail)* } + ); + }; + // * -> Option * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {$a:ident => option $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: Some($value.$a.into()), + } + $value: $A => $B { $($tail)* } + ); + }; + // Option * -> * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {option $a:ident => $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: $value.$a.map_or_else(Default::default, Into::into), + } + $value: $A => $B { $($tail)* } + ); + }; + // Option * -> Option * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {option $a:ident => option $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: $value.$a.map(Into::into), + } + $value: $A => $B { $($tail)* } + ); + }; + // List * -> List * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {list $a:ident => list $b:ident , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + $b: crate::utils::IntoCollection::into_collect($value.$a), + } + $value: $A => $B { $($tail)* } + ); + }; + // * + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {$($a:ident)+ , $($tail:tt)*}) => { + crate::impl_convert!( + @struct { + $($body)* + } + $value: $A => $B { $($a)+ => $($a)+, $($tail)* } + ); + }; + // End of recursion + (@struct {$($body:tt)*} $value:ident: $A:ty => $B:ty {}) => { + impl From<$A> for $B { + fn from($value: $A) -> Self { + Self { + $($body)* + } + } + } + }; + // Entry point + (struct $A:ty = $B:ty {$( + $($a:ident)+ $(= $($b:ident)+)? + ),* $(,)?}) => { + crate::impl_convert!(@struct {} _value: $A => $B { $($($a)+ $(=> $($b)+)?,)* }); + crate::impl_convert!(@struct {} _value: $B => $A { $($($($b)+ =>)? $($a)+,)* }); + crate::impl_convert!(req $A : $B); + }; + + // Request + (req $A:ty : $B:ty) => { + impl tonic::IntoRequest<$B> for $A { + fn into_request(self) -> tonic::Request<$B> { + tonic::Request::new(self.into()) + } + } + }; +} +pub(crate) use impl_convert; diff --git a/packages/rust/armonik/src/objects/output.rs b/packages/rust/armonik/src/objects/output.rs new file mode 100644 index 000000000..4431c6add --- /dev/null +++ b/packages/rust/armonik/src/objects/output.rs @@ -0,0 +1,37 @@ +use crate::api::v3; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] +pub enum Output { + #[default] + Ok, + Error { + details: String, + }, +} + +impl From for v3::Output { + fn from(value: Output) -> Self { + match value { + Output::Ok => v3::Output { + r#type: Some(v3::output::Type::Ok(v3::Empty {})), + }, + Output::Error { details } => v3::Output { + r#type: Some(v3::output::Type::Error(v3::output::Error { details })), + }, + } + } +} + +impl From for Output { + fn from(value: v3::Output) -> Self { + match value.r#type { + Some(v3::output::Type::Ok(_)) => Self::Ok, + Some(v3::output::Type::Error(error)) => Self::Error { + details: error.details, + }, + None => Default::default(), + } + } +} + +super::impl_convert!(req Output : v3::Output); diff --git a/packages/rust/armonik/src/objects/partitions/field.rs b/packages/rust/armonik/src/objects/partitions/field.rs new file mode 100644 index 000000000..7b2714fb2 --- /dev/null +++ b/packages/rust/armonik/src/objects/partitions/field.rs @@ -0,0 +1,62 @@ +use crate::api::v3; + +/// Represents every available field in a partition. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum Field { + /// Unspecified. + Unspecified = 0, + /// The partition ID. + #[default] + Id = 1, + /// The parent partition IDs. + ParentPartitionIds = 2, + /// Whether the partition is reserved for pods. + PodReserved = 3, + /// The maximum number of pods that can be used by sessions using the partition. + PodMax = 4, + /// The percentage of the partition that can be preempted. + PreemptionPercentage = 5, + /// The priority of the partition. + Priority = 6, +} + +impl From for Field { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::Id, + 2 => Self::ParentPartitionIds, + 3 => Self::PodReserved, + 4 => Self::PodMax, + 5 => Self::PreemptionPercentage, + 6 => Self::Priority, + _ => Self::Unspecified, + } + } +} + +impl From for v3::partitions::PartitionField { + fn from(value: Field) -> Self { + Self { + field: Some(v3::partitions::partition_field::Field::PartitionRawField( + v3::partitions::PartitionRawField { + field: value as i32, + }, + )), + } + } +} + +impl From for Field { + fn from(value: v3::partitions::PartitionField) -> Self { + match value.field { + Some(v3::partitions::partition_field::Field::PartitionRawField(field)) => { + Self::from(field.field) + } + None => Self::Unspecified, + } + } +} + +super::super::impl_convert!(req Field : v3::partitions::PartitionField); diff --git a/packages/rust/armonik/src/objects/partitions/filter.rs b/packages/rust/armonik/src/objects/partitions/filter.rs new file mode 100644 index 000000000..ef8b5bf70 --- /dev/null +++ b/packages/rust/armonik/src/objects/partitions/filter.rs @@ -0,0 +1,59 @@ +use super::super::{FilterArray, FilterBoolean, FilterNumber, FilterString}; + +use crate::{api::v3, impl_filter}; + +impl_filter!( + Filter[super::Field, Condition]: + v3::partitions::Filters[ + v3::partitions::FiltersAnd[ + v3::partitions::FilterField, + v3::partitions::filter_field::ValueCondition + ] + ] +); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Condition { + String(FilterString), + Number(FilterNumber), + Boolean(FilterBoolean), + Array(FilterArray), +} + +impl Default for Condition { + fn default() -> Self { + Self::String(Default::default()) + } +} + +impl From for v3::partitions::filter_field::ValueCondition { + fn from(value: Condition) -> Self { + match value { + Condition::String(cond) => Self::FilterString(cond.into()), + Condition::Number(cond) => Self::FilterNumber(cond.into()), + Condition::Boolean(cond) => Self::FilterBoolean(cond.into()), + Condition::Array(cond) => Self::FilterArray(cond.into()), + } + } +} + +impl From for Condition { + fn from(value: v3::partitions::filter_field::ValueCondition) -> Self { + match value { + v3::partitions::filter_field::ValueCondition::FilterString(cond) => { + Self::String(cond.into()) + } + v3::partitions::filter_field::ValueCondition::FilterNumber(cond) => { + Self::Number(cond.into()) + } + v3::partitions::filter_field::ValueCondition::FilterBoolean(cond) => { + Self::Boolean(cond.into()) + } + v3::partitions::filter_field::ValueCondition::FilterArray(cond) => { + Self::Array(cond.into()) + } + } + } +} + +super::super::impl_convert!(req Condition : v3::partitions::filter_field::ValueCondition); diff --git a/packages/rust/armonik/src/objects/partitions/get.rs b/packages/rust/armonik/src/objects/partitions/get.rs new file mode 100644 index 000000000..b12f685a1 --- /dev/null +++ b/packages/rust/armonik/src/objects/partitions/get.rs @@ -0,0 +1,31 @@ +use super::Raw; + +use crate::api::v3; + +/// Request to get a partition. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + /// The partition ID. + pub partition_id: String, +} + +super::super::impl_convert!( + struct Request = v3::partitions::GetPartitionRequest { + partition_id = id, + } +); + +/// Response to get a partition. +/// +/// Return a raw partition. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Response { + /// The raw partition. + pub partition: Raw, +} + +super::super::impl_convert!( + struct Response = v3::partitions::GetPartitionResponse { + partition = option partition, + } +); diff --git a/packages/rust/armonik/src/objects/partitions/list.rs b/packages/rust/armonik/src/objects/partitions/list.rs new file mode 100644 index 000000000..f98df2a32 --- /dev/null +++ b/packages/rust/armonik/src/objects/partitions/list.rs @@ -0,0 +1,74 @@ +use crate::api::v3; + +use super::{filter, Raw, Sort}; + +/// Request to list partitions. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Request { + /// The page number. Start at 0. + pub page: i32, + /// The number of items per page. + pub page_size: i32, + /// The filter. + pub filters: filter::Or, + /// The sort. + /// + /// Must be set for every request. + pub sort: Sort, +} + +impl Default for Request { + fn default() -> Self { + Self { + page: 0, + page_size: 100, + filters: Default::default(), + sort: Default::default(), + } + } +} + +super::super::impl_convert!( + struct Request = v3::partitions::ListPartitionsRequest { + page, + page_size, + filters = option filters, + sort = option sort, + } +); + +/// Response to list partitions. +/// +/// Use pagination, filtering and sorting from the request. +/// Retunr a list of raw partitions. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Response { + /// The list of raw partitions. + pub partitions: Vec, + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The total number of partitions. + pub total: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + partitions: Vec::new(), + page: 0, + page_size: 100, + total: 0, + } + } +} + +super::super::impl_convert!( + struct Response = v3::partitions::ListPartitionsResponse { + list partitions, + page, + page_size, + total, + } +); diff --git a/packages/rust/armonik/src/objects/partitions/mod.rs b/packages/rust/armonik/src/objects/partitions/mod.rs new file mode 100644 index 000000000..32937b06a --- /dev/null +++ b/packages/rust/armonik/src/objects/partitions/mod.rs @@ -0,0 +1,20 @@ +//! ArmoniK objects related to the Partitions service + +pub mod filter; +pub mod get; +pub mod list; + +mod field; +mod raw; + +pub use field::Field; +pub use raw::Raw; + +pub type Sort = super::Sort; + +super::super::impl_convert!( + struct Sort = crate::api::v3::partitions::list_partitions_request::Sort { + field = option field, + direction = enum direction, + } +); diff --git a/packages/rust/armonik/src/objects/partitions/raw.rs b/packages/rust/armonik/src/objects/partitions/raw.rs new file mode 100644 index 000000000..e3906d85e --- /dev/null +++ b/packages/rust/armonik/src/objects/partitions/raw.rs @@ -0,0 +1,36 @@ +use std::collections::HashMap; + +use crate::api::v3; + +/// A raw partition object. +/// +/// Used when a list or a single partition is returned. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Raw { + /// The partition ID. + pub partition_id: String, + /// The parent partition IDs. + pub parent_partition_ids: Vec, + /// Whether the partition is reserved for pods. + pub pod_reserved: i64, + /// The maximum number of pods that can be used by sessions using the partition. + pub pod_max: i64, + /// The pod configuration. + pub pod_configuration: HashMap, + /// The percentage of the partition that can be preempted. + pub preemption_percentage: i64, + /// The priority of the partition. + pub priority: i64, +} + +super::super::impl_convert!( + struct Raw = v3::partitions::PartitionRaw { + partition_id = id, + parent_partition_ids, + pod_reserved, + pod_max, + pod_configuration, + preemption_percentage, + priority, + } +); diff --git a/packages/rust/armonik/src/objects/result_request.rs b/packages/rust/armonik/src/objects/result_request.rs new file mode 100644 index 000000000..3d33f9823 --- /dev/null +++ b/packages/rust/armonik/src/objects/result_request.rs @@ -0,0 +1,14 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct ResultRequest { + pub session_id: String, + pub result_id: String, +} + +super::impl_convert!( + struct ResultRequest = v3::ResultRequest { + session_id = session, + result_id, + } +); diff --git a/packages/rust/armonik/src/objects/result_status.rs b/packages/rust/armonik/src/objects/result_status.rs new file mode 100644 index 000000000..a9f4894af --- /dev/null +++ b/packages/rust/armonik/src/objects/result_status.rs @@ -0,0 +1,61 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum ResultStatus { + /// Result is in an unspecified state. + #[default] + Unspecified = 0, + /// Result is created and task is created, submitted or dispatched. + Created = 1, + /// Result is completed with a completed task. + Completed = 2, + /// Result is aborted. + Aborted = 3, + /// Result is completed, but data has been deleted from object storage. + Deleted = 4, + /// Result was not found. + NotFound = 127, +} + +impl From for ResultStatus { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::Created, + 2 => Self::Completed, + 3 => Self::Aborted, + 4 => Self::Deleted, + 127 => Self::NotFound, + _ => Default::default(), + } + } +} + +impl From for v3::result_status::ResultStatus { + fn from(value: ResultStatus) -> Self { + match value { + ResultStatus::Unspecified => Self::Unspecified, + ResultStatus::Created => Self::Created, + ResultStatus::Completed => Self::Completed, + ResultStatus::Aborted => Self::Aborted, + ResultStatus::Deleted => Self::Deleted, + ResultStatus::NotFound => Self::Notfound, + } + } +} + +impl From for ResultStatus { + fn from(value: v3::result_status::ResultStatus) -> Self { + match value { + v3::result_status::ResultStatus::Unspecified => Self::Unspecified, + v3::result_status::ResultStatus::Created => Self::Created, + v3::result_status::ResultStatus::Completed => Self::Completed, + v3::result_status::ResultStatus::Aborted => Self::Aborted, + v3::result_status::ResultStatus::Deleted => Self::Deleted, + v3::result_status::ResultStatus::Notfound => Self::NotFound, + } + } +} + +super::impl_convert!(req ResultStatus : v3::result_status::ResultStatus); diff --git a/packages/rust/armonik/src/objects/results/create.rs b/packages/rust/armonik/src/objects/results/create.rs new file mode 100644 index 000000000..02add0f3b --- /dev/null +++ b/packages/rust/armonik/src/objects/results/create.rs @@ -0,0 +1,73 @@ +use std::collections::HashMap; + +use super::Raw; + +use crate::api::v3; + +/// Request for creating results with data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// Results to create. + pub results: HashMap>, + /// The session in which create results. + pub session_id: String, +} + +impl From for v3::results::CreateResultsRequest { + fn from(value: Request) -> Self { + Self { + results: value + .results + .into_iter() + .map( + |(name, data)| v3::results::create_results_request::ResultCreate { name, data }, + ) + .collect(), + session_id: value.session_id, + } + } +} + +impl From for Request { + fn from(value: v3::results::CreateResultsRequest) -> Self { + Self { + results: value + .results + .into_iter() + .map(|result| (result.name, result.data)) + .collect(), + session_id: value.session_id, + } + } +} + +super::super::impl_convert!(req Request : v3::results::CreateResultsRequest); + +/// Response for creating results without data. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The list of raw results that were created. + pub results: HashMap, +} + +impl From for v3::results::CreateResultsResponse { + fn from(value: Response) -> Self { + Self { + results: value.results.into_values().map(Into::into).collect(), + } + } +} + +impl From for Response { + fn from(value: v3::results::CreateResultsResponse) -> Self { + Self { + results: value + .results + .into_iter() + .map(|result| (result.name.clone(), result.into())) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::results::CreateResultsResponse); diff --git a/packages/rust/armonik/src/objects/results/create_metadata.rs b/packages/rust/armonik/src/objects/results/create_metadata.rs new file mode 100644 index 000000000..512690084 --- /dev/null +++ b/packages/rust/armonik/src/objects/results/create_metadata.rs @@ -0,0 +1,75 @@ +use std::collections::HashMap; + +use super::Raw; + +use crate::api::v3; + +/// Request for creating results without data. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// The list of names for the results to create. + pub names: Vec, + /// The session in which create results. + pub session_id: String, +} + +impl From for v3::results::CreateResultsMetaDataRequest { + fn from(value: Request) -> Self { + Self { + results: value + .names + .into_iter() + .map( + |result| v3::results::create_results_meta_data_request::ResultCreate { + name: result, + }, + ) + .collect(), + session_id: value.session_id, + } + } +} + +impl From for Request { + fn from(value: v3::results::CreateResultsMetaDataRequest) -> Self { + Self { + names: value + .results + .into_iter() + .map(|result| result.name) + .collect(), + session_id: value.session_id, + } + } +} + +super::super::impl_convert!(req Request : v3::results::CreateResultsMetaDataRequest); + +/// Response for creating results without data. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The list of raw results that were created. + pub results: HashMap, +} + +impl From for v3::results::CreateResultsMetaDataResponse { + fn from(value: Response) -> Self { + Self { + results: value.results.into_values().map(Into::into).collect(), + } + } +} + +impl From for Response { + fn from(value: v3::results::CreateResultsMetaDataResponse) -> Self { + Self { + results: value + .results + .into_iter() + .map(|result| (result.name.clone(), result.into())) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::results::CreateResultsMetaDataResponse); diff --git a/packages/rust/armonik/src/objects/results/delete_data.rs b/packages/rust/armonik/src/objects/results/delete_data.rs new file mode 100644 index 000000000..fb839e8b3 --- /dev/null +++ b/packages/rust/armonik/src/objects/results/delete_data.rs @@ -0,0 +1,33 @@ +use crate::api::v3; + +/// Request deleting data from results results but keeping metadata. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session of the results. + pub session_id: String, + /// The ID of the results to delete. + pub result_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::results::DeleteResultsDataRequest { + session_id, + result_ids = result_id, + } +); + +/// Response deleting data from results results but keeping metadata. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session of the results. + pub session_id: String, + /// The ID of the deleted results. + pub result_ids: Vec, +} + +super::super::impl_convert!( + struct Response = v3::results::DeleteResultsDataResponse { + session_id, + result_ids = result_id, + } +); diff --git a/packages/rust/armonik/src/objects/results/download.rs b/packages/rust/armonik/src/objects/results/download.rs new file mode 100644 index 000000000..02d7daed6 --- /dev/null +++ b/packages/rust/armonik/src/objects/results/download.rs @@ -0,0 +1,30 @@ +use crate::api::v3; + +/// Request for getting a result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + /// The session of the result. + pub session_id: String, + /// The ID of the result. + pub result_id: String, +} + +super::super::impl_convert!( + struct Request = v3::results::DownloadResultDataRequest { + session_id, + result_id, + } +); + +/// Response for getting a result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// A chunk of data. + pub data_chunk: Vec, +} + +super::super::impl_convert!( + struct Response = v3::results::DownloadResultDataResponse { + data_chunk, + } +); diff --git a/packages/rust/armonik/src/objects/results/field.rs b/packages/rust/armonik/src/objects/results/field.rs new file mode 100644 index 000000000..b9db4ba5c --- /dev/null +++ b/packages/rust/armonik/src/objects/results/field.rs @@ -0,0 +1,69 @@ +use crate::api::v3; + +/// Represents every available field in a result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum Field { + /// Unspecified. + Unspecified = 0, + /// The session ID. + SessionId = 1, + /// The result name. + Name = 2, + /// The owner task ID. + OwnerTaskId = 3, + /// The result status. + Status = 4, + /// The result creation date. + CreatedAt = 5, + /// The result completion date. + CompletedAt = 6, + /// The result ID. + #[default] + ResultId = 7, + /// The size of the result. + Size = 8, + /// The ID of the Task that as submitted this result. + CreatedBy = 9, +} + +impl From for Field { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::SessionId, + 2 => Self::Name, + 3 => Self::OwnerTaskId, + 4 => Self::Status, + 5 => Self::CreatedAt, + 6 => Self::CompletedAt, + 7 => Self::ResultId, + 8 => Self::Size, + 9 => Self::CreatedBy, + _ => Self::Unspecified, + } + } +} + +impl From for v3::results::ResultField { + fn from(value: Field) -> Self { + Self { + field: Some(v3::results::result_field::Field::ResultRawField( + v3::results::ResultRawField { + field: value as i32, + }, + )), + } + } +} + +impl From for Field { + fn from(value: v3::results::ResultField) -> Self { + match value.field { + Some(v3::results::result_field::Field::ResultRawField(field)) => field.field.into(), + None => Self::Unspecified, + } + } +} + +super::super::impl_convert!(req Field : v3::results::ResultField); diff --git a/packages/rust/armonik/src/objects/results/filter.rs b/packages/rust/armonik/src/objects/results/filter.rs new file mode 100644 index 000000000..219860d6b --- /dev/null +++ b/packages/rust/armonik/src/objects/results/filter.rs @@ -0,0 +1,71 @@ +use super::super::{FilterArray, FilterDate, FilterNumber, FilterString, ResultStatus}; + +use crate::{api::v3, impl_filter}; + +impl_filter!( + Filter[super::Field, Condition]: + v3::results::Filters[ + v3::results::FiltersAnd[ + v3::results::FilterField, + v3::results::filter_field::ValueCondition + ] + ] +); + +pub type Status = super::super::FilterStatus; + +super::super::impl_convert!( + struct Status = v3::results::FilterStatus { + value = enum value, + operator = enum operator, + } +); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Condition { + String(FilterString), + Date(FilterDate), + Array(FilterArray), + Status(Status), + Number(FilterNumber), +} + +impl Default for Condition { + fn default() -> Self { + Self::String(Default::default()) + } +} + +impl From for v3::results::filter_field::ValueCondition { + fn from(value: Condition) -> Self { + match value { + Condition::String(cond) => Self::FilterString(cond.into()), + Condition::Date(cond) => Self::FilterDate(cond.into()), + Condition::Array(cond) => Self::FilterArray(cond.into()), + Condition::Status(cond) => Self::FilterStatus(cond.into()), + Condition::Number(cond) => Self::FilterNumber(cond.into()), + } + } +} + +impl From for Condition { + fn from(value: v3::results::filter_field::ValueCondition) -> Self { + match value { + v3::results::filter_field::ValueCondition::FilterString(cond) => { + Self::String(cond.into()) + } + v3::results::filter_field::ValueCondition::FilterDate(cond) => Self::Date(cond.into()), + v3::results::filter_field::ValueCondition::FilterArray(cond) => { + Self::Array(cond.into()) + } + v3::results::filter_field::ValueCondition::FilterStatus(cond) => { + Self::Status(cond.into()) + } + v3::results::filter_field::ValueCondition::FilterNumber(cond) => { + Self::Number(cond.into()) + } + } + } +} + +super::super::impl_convert!(req Condition : v3::results::filter_field::ValueCondition); diff --git a/packages/rust/armonik/src/objects/results/get.rs b/packages/rust/armonik/src/objects/results/get.rs new file mode 100644 index 000000000..9632ce22b --- /dev/null +++ b/packages/rust/armonik/src/objects/results/get.rs @@ -0,0 +1,29 @@ +use super::Raw; + +use crate::api::v3; + +/// Request to get an result. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + /// Result id. Must fail when name is empty. + pub id: String, +} + +super::super::impl_convert!( + struct Request = v3::results::GetResultRequest { + id = result_id, + } +); + +/// Response to get an result. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The result. + pub result: Raw, +} + +super::super::impl_convert!( + struct Response = v3::results::GetResultResponse { + result = option result, + } +); diff --git a/packages/rust/armonik/src/objects/results/get_owner_task_id.rs b/packages/rust/armonik/src/objects/results/get_owner_task_id.rs new file mode 100644 index 000000000..4a72e41d9 --- /dev/null +++ b/packages/rust/armonik/src/objects/results/get_owner_task_id.rs @@ -0,0 +1,61 @@ +use std::collections::HashMap; + +use crate::api::v3; + +/// Request for getting the id of the task that should create this result. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// The session ID. + pub session_id: String, + /// The list of result ID/name. + pub result_ids: Vec, +} + +super::super::impl_convert!( + struct Request = crate::api::v3::results::GetOwnerTaskIdRequest { + session_id, + list result_ids = list result_id, + } +); + +/// Response for getting the id of the task that should create this result. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Response { + /// Map to get the owner task id for each result id. + pub result_task: HashMap, + /// The session ID. + pub session_id: String, +} + +impl From for v3::results::GetOwnerTaskIdResponse { + fn from(value: Response) -> Self { + Self { + result_task: value + .result_task + .into_iter() + .map( + |(key, value)| v3::results::get_owner_task_id_response::MapResultTask { + result_id: key, + task_id: value, + }, + ) + .collect(), + session_id: value.session_id, + } + } +} + +impl From for Response { + fn from(value: v3::results::GetOwnerTaskIdResponse) -> Self { + Self { + result_task: value + .result_task + .into_iter() + .map(|key_value_pair| (key_value_pair.result_id, key_value_pair.task_id)) + .collect(), + session_id: value.session_id, + } + } +} + +super::super::impl_convert!(req Response : v3::results::GetOwnerTaskIdResponse); diff --git a/packages/rust/armonik/src/objects/results/get_service_configuration.rs b/packages/rust/armonik/src/objects/results/get_service_configuration.rs new file mode 100644 index 000000000..e9c1827fd --- /dev/null +++ b/packages/rust/armonik/src/objects/results/get_service_configuration.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +/// Response for obtaining results service configuration. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request {} + +super::super::impl_convert!( + struct Request = v3::Empty { + } +); + +/// Response for obtaining results service configuration. +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Maximum size supported by a data chunk for the result service. + pub data_chunk_max_size: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + data_chunk_max_size: 64 * 1024, + } + } +} + +super::super::impl_convert!( + struct Response = v3::results::ResultsServiceConfigurationResponse { + data_chunk_max_size, + } +); diff --git a/packages/rust/armonik/src/objects/results/list.rs b/packages/rust/armonik/src/objects/results/list.rs new file mode 100644 index 000000000..9e2ca1a6b --- /dev/null +++ b/packages/rust/armonik/src/objects/results/list.rs @@ -0,0 +1,76 @@ +use crate::api::v3; + +use super::{filter, Raw, Sort}; + +/// Request to list results. +/// +/// Use pagination, filtering and sorting. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Request { + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The filters. + pub filters: filter::Or, + /// The sort. + /// + /// Must be set for every request. + pub sort: Sort, +} + +impl Default for Request { + fn default() -> Self { + Self { + page: 0, + page_size: 100, + filters: Default::default(), + sort: Default::default(), + } + } +} + +super::super::impl_convert!( + struct Request = v3::results::ListResultsRequest { + page, + page_size, + filters = option filters, + sort = option sort, + } +); + +/// Response to list results. +/// +/// Use pagination, filtering and sorting from the request. +/// Retunr a list of raw results. +#[derive(Debug, Clone)] +pub struct Response { + /// The list of raw results. + pub results: Vec, + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The total number of results. + pub total: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + results: Vec::new(), + page: 0, + page_size: 100, + total: 0, + } + } +} + +super::super::impl_convert!( + struct Response = v3::results::ListResultsResponse { + list results, + page, + page_size, + total, + } +); diff --git a/packages/rust/armonik/src/objects/results/mod.rs b/packages/rust/armonik/src/objects/results/mod.rs new file mode 100644 index 000000000..d98bee8de --- /dev/null +++ b/packages/rust/armonik/src/objects/results/mod.rs @@ -0,0 +1,27 @@ +//! ArmoniK objects related to the Results service + +pub mod create; +pub mod create_metadata; +pub mod delete_data; +pub mod download; +pub mod filter; +pub mod get; +pub mod get_owner_task_id; +pub mod get_service_configuration; +pub mod list; +pub mod upload; + +mod field; +mod raw; + +pub use field::Field; +pub use raw::Raw; + +pub type Sort = super::Sort; + +super::super::impl_convert!( + struct Sort = crate::api::v3::results::list_results_request::Sort { + field = option field, + direction = enum direction, + } +); diff --git a/packages/rust/armonik/src/objects/results/raw.rs b/packages/rust/armonik/src/objects/results/raw.rs new file mode 100644 index 000000000..1c77df557 --- /dev/null +++ b/packages/rust/armonik/src/objects/results/raw.rs @@ -0,0 +1,40 @@ +use super::super::ResultStatus; + +use crate::api::v3; + +/// A raw Result object. +#[derive(Debug, Clone, Default)] +pub struct Raw { + /// The session ID. + pub session_id: String, + /// The result name. Given by the client. + pub name: String, + /// The owner task ID. + pub owner_task_id: String, + /// The result status. + pub status: ResultStatus, + /// The result creation date. + pub created_at: Option, + /// The result completion date. + pub completed_at: Option, + /// The result ID. Uniquely generated by the server. + pub result_id: String, + /// The size of the Result Data. + pub size: i64, + /// The ID of the Task that as submitted this result. + pub created_by: String, +} + +super::super::impl_convert!( + struct Raw = v3::results::ResultRaw { + session_id, + name, + owner_task_id, + status = enum status, + created_at, + completed_at, + result_id, + size, + created_by, + } +); diff --git a/packages/rust/armonik/src/objects/results/upload.rs b/packages/rust/armonik/src/objects/results/upload.rs new file mode 100644 index 000000000..41fd73f4f --- /dev/null +++ b/packages/rust/armonik/src/objects/results/upload.rs @@ -0,0 +1,82 @@ +use super::Raw; + +use crate::api::v3; + +/// The possible messages that constitute a UploadResultDataRequest +/// They should be sent in the following order: +/// - id +/// - data_chunk (stream can have multiple data_chunk messages that represent data divided in several parts) +/// +/// Data chunk cannot exceed the size returned by the GetServiceConfiguration rpc method +#[derive(Debug, Clone)] +pub enum Request { + /// The identifier of the result to which add data. + Identifier { + /// The session of the result. + session_id: String, + /// The ID of the result. + result_id: String, + }, + /// A chunk of data. + DataChunk(Vec), +} + +impl Default for Request { + fn default() -> Self { + Self::Identifier { + session_id: Default::default(), + result_id: Default::default(), + } + } +} + +impl From for v3::results::UploadResultDataRequest { + fn from(value: Request) -> Self { + match value { + Request::Identifier { + session_id: session, + result_id, + } => Self { + r#type: Some(v3::results::upload_result_data_request::Type::Id( + v3::results::upload_result_data_request::ResultIdentifier { + session_id: session, + result_id, + }, + )), + }, + Request::DataChunk(data) => Self { + r#type: Some(v3::results::upload_result_data_request::Type::DataChunk( + data, + )), + }, + } + } +} + +impl From for Request { + fn from(value: v3::results::UploadResultDataRequest) -> Self { + match value.r#type { + Some(v3::results::upload_result_data_request::Type::Id(id)) => Self::Identifier { + session_id: id.session_id, + result_id: id.result_id, + }, + Some(v3::results::upload_result_data_request::Type::DataChunk(data)) => { + Self::DataChunk(data) + } + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Request : v3::results::UploadResultDataRequest); + +#[derive(Debug, Clone, Default)] +pub struct Response { + pub result: Raw, +} + +super::super::impl_convert!( + struct Response = v3::results::UploadResultDataResponse { + result = option result, + } +); diff --git a/packages/rust/armonik/src/objects/session.rs b/packages/rust/armonik/src/objects/session.rs new file mode 100644 index 000000000..ba69b1cde --- /dev/null +++ b/packages/rust/armonik/src/objects/session.rs @@ -0,0 +1,12 @@ +use crate::api::v3; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] +pub struct Session { + pub session_id: String, +} + +super::impl_convert!( + struct Session = v3::Session { + session_id = id, + } +); diff --git a/packages/rust/armonik/src/objects/session_status.rs b/packages/rust/armonik/src/objects/session_status.rs new file mode 100644 index 000000000..0567228a2 --- /dev/null +++ b/packages/rust/armonik/src/objects/session_status.rs @@ -0,0 +1,62 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum SessionStatus { + /// Session is in an unknown state. + #[default] + Unspecified = 0, + /// Session is open and accepting tasks for execution. + Running = 1, + /// Session is cancelled. No more tasks can be submitted. + Cancelled = 2, + /// Session is paused. Tasks can be submitted but no more new tasks will be executed. Already running tasks will continue until they finish. + Paused = 3, + /// Session is closed. No more tasks can be submitted and executed. + Closed = 4, + /// Session is purged. No more tasks can be submitted and executed. Results data will be deleted. + Purged = 5, + /// Session is deleted. No more tasks can be submitted and executed. Sessions, tasks and results metadata associated to the session will be deleted. + Deleted = 6, +} + +impl From for SessionStatus { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::Running, + 2 => Self::Cancelled, + _ => Default::default(), + } + } +} + +impl From for v3::session_status::SessionStatus { + fn from(value: SessionStatus) -> Self { + match value { + SessionStatus::Unspecified => Self::Unspecified, + SessionStatus::Running => Self::Running, + SessionStatus::Cancelled => Self::Cancelled, + SessionStatus::Paused => Self::Paused, + SessionStatus::Closed => Self::Closed, + SessionStatus::Purged => Self::Purged, + SessionStatus::Deleted => Self::Deleted, + } + } +} + +impl From for SessionStatus { + fn from(value: v3::session_status::SessionStatus) -> Self { + match value { + v3::session_status::SessionStatus::Unspecified => Self::Unspecified, + v3::session_status::SessionStatus::Running => Self::Running, + v3::session_status::SessionStatus::Cancelled => Self::Cancelled, + v3::session_status::SessionStatus::Paused => Self::Paused, + v3::session_status::SessionStatus::Closed => Self::Closed, + v3::session_status::SessionStatus::Purged => Self::Purged, + v3::session_status::SessionStatus::Deleted => Self::Deleted, + } + } +} + +super::impl_convert!(req SessionStatus : v3::session_status::SessionStatus); diff --git a/packages/rust/armonik/src/objects/sessions/cancel.rs b/packages/rust/armonik/src/objects/sessions/cancel.rs new file mode 100644 index 000000000..f72d5a4bb --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/cancel.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for getting a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::CancelSessionRequest { + session_id, + } +); + +/// Response for getting a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::CancelSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/close.rs b/packages/rust/armonik/src/objects/sessions/close.rs new file mode 100644 index 000000000..05ac275f0 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/close.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for closing a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::CloseSessionRequest { + session_id, + } +); + +/// Response for closing a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::CloseSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/create.rs b/packages/rust/armonik/src/objects/sessions/create.rs new file mode 100644 index 000000000..9d94072d2 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/create.rs @@ -0,0 +1,34 @@ +use crate::api::v3; + +use super::super::TaskOptions; + +/// Request for creating session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// Default tasks options for tasks in the session. + pub default_task_options: TaskOptions, + /// List of partitions allowed during the session. + pub partition_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::sessions::CreateSessionRequest { + default_task_options = option default_task_option, + partition_ids, + } +); + +/// Reply after session creation. +/// We have this reply in case of success. +/// When the session creation is not successful, there is an rpc exception. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Session id of the created session if successful + pub session_id: String, +} + +super::super::impl_convert!( + struct Response = v3::sessions::CreateSessionReply { + session_id, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/delete.rs b/packages/rust/armonik/src/objects/sessions/delete.rs new file mode 100644 index 000000000..c466580ba --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/delete.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for deleting a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::DeleteSessionRequest { + session_id, + } +); + +/// Response for deleting a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::DeleteSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/field.rs b/packages/rust/armonik/src/objects/sessions/field.rs new file mode 100644 index 000000000..611c82729 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/field.rs @@ -0,0 +1,127 @@ +use super::super::TaskOptionField; + +use crate::api::v3; + +/// Represents every available field in a session raw. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum RawField { + /// Unspecified. + Unspecified = 0, + /// The session ID. + #[default] + SessionId = 1, + /// The session status. + Status = 2, + /// Whether clients can submit tasks in the session. + ClientSubmission = 8, + /// Whether workers can submit tasks in the session. + WorkerSubmission = 9, + /// The partition IDs. + PartitionIds = 3, + /// The task options. In fact, these are used as default value in child tasks. + Options = 4, + /// The creation date. + CreatedAt = 5, + /// The cancellation date. Only set when status is 'cancelled'. + CancelledAt = 6, + /// The closure date. Only set when status is 'closed'. + ClosedAt = 12, + /// The purge date. Only set when status is 'purged'. + PurgedAt = 10, + /// The deletion date. Only set when status is 'deleted'. + DeletedAt = 11, + /// The duration. Only set when status is 'cancelled' and 'closed'. + Duration = 7, +} + +impl From for RawField { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::SessionId, + 2 => Self::Status, + 8 => Self::ClientSubmission, + 9 => Self::WorkerSubmission, + 3 => Self::PartitionIds, + 4 => Self::Options, + 5 => Self::CreatedAt, + 6 => Self::CancelledAt, + 12 => Self::ClosedAt, + 10 => Self::PurgedAt, + 11 => Self::DeletedAt, + 7 => Self::Duration, + _ => Self::Unspecified, + } + } +} + +impl From for v3::sessions::SessionRawField { + fn from(value: RawField) -> Self { + Self { + field: value as i32, + } + } +} + +impl From for RawField { + fn from(value: v3::sessions::SessionRawField) -> Self { + Self::from(value.field) + } +} + +super::super::impl_convert!(req RawField : v3::sessions::SessionRawField); + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Field { + Raw(RawField), + /// The task option field. + TaskOption(TaskOptionField), + /// Represents a generic field in a task option. + TaskOptionGeneric(String), +} + +impl Default for Field { + fn default() -> Self { + Self::Raw(Default::default()) + } +} + +impl From for v3::sessions::SessionField { + fn from(value: Field) -> Self { + Self { + field: Some(match value { + Field::Raw(field) => { + v3::sessions::session_field::Field::SessionRawField(field.into()) + } + Field::TaskOption(field) => { + v3::sessions::session_field::Field::TaskOptionField(field.into()) + } + Field::TaskOptionGeneric(field) => { + v3::sessions::session_field::Field::TaskOptionGenericField( + v3::sessions::TaskOptionGenericField { field }, + ) + } + }), + } + } +} + +impl From for Field { + fn from(value: v3::sessions::SessionField) -> Self { + match value.field { + Some(v3::sessions::session_field::Field::SessionRawField(field)) => { + Self::Raw(field.into()) + } + Some(v3::sessions::session_field::Field::TaskOptionField(field)) => { + Self::TaskOption(field.into()) + } + Some(v3::sessions::session_field::Field::TaskOptionGenericField(field)) => { + Self::TaskOptionGeneric(field.field) + } + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Field : v3::sessions::SessionField); diff --git a/packages/rust/armonik/src/objects/sessions/filter.rs b/packages/rust/armonik/src/objects/sessions/filter.rs new file mode 100644 index 000000000..a9a9121ea --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/filter.rs @@ -0,0 +1,84 @@ +use super::super::{ + FilterArray, FilterBoolean, FilterDate, FilterDuration, FilterNumber, FilterString, + SessionStatus, +}; + +use crate::{api::v3, impl_filter}; + +impl_filter!( + Filter[super::Field, Condition]: + v3::sessions::Filters[ + v3::sessions::FiltersAnd[ + v3::sessions::FilterField, + v3::sessions::filter_field::ValueCondition + ] + ] +); + +pub type Status = super::super::FilterStatus; + +super::super::impl_convert!( + struct Status = v3::sessions::FilterStatus { + value = enum value, + operator = enum operator, + } +); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Condition { + String(FilterString), + Number(FilterNumber), + Boolean(FilterBoolean), + Status(Status), + Date(FilterDate), + Duration(FilterDuration), + Array(FilterArray), +} + +impl Default for Condition { + fn default() -> Self { + Self::String(Default::default()) + } +} + +impl From for v3::sessions::filter_field::ValueCondition { + fn from(value: Condition) -> Self { + match value { + Condition::String(cond) => Self::FilterString(cond.into()), + Condition::Number(cond) => Self::FilterNumber(cond.into()), + Condition::Boolean(cond) => Self::FilterBoolean(cond.into()), + Condition::Status(cond) => Self::FilterStatus(cond.into()), + Condition::Date(cond) => Self::FilterDate(cond.into()), + Condition::Duration(cond) => Self::FilterDuration(cond.into()), + Condition::Array(cond) => Self::FilterArray(cond.into()), + } + } +} + +impl From for Condition { + fn from(value: v3::sessions::filter_field::ValueCondition) -> Self { + match value { + v3::sessions::filter_field::ValueCondition::FilterString(cond) => { + Self::String(cond.into()) + } + v3::sessions::filter_field::ValueCondition::FilterNumber(cond) => { + Self::Number(cond.into()) + } + v3::sessions::filter_field::ValueCondition::FilterBoolean(cond) => { + Self::Boolean(cond.into()) + } + v3::sessions::filter_field::ValueCondition::FilterStatus(cond) => { + Self::Status(cond.into()) + } + v3::sessions::filter_field::ValueCondition::FilterDate(cond) => Self::Date(cond.into()), + v3::sessions::filter_field::ValueCondition::FilterArray(cond) => { + Self::Array(cond.into()) + } + v3::sessions::filter_field::ValueCondition::FilterDuration(cond) => { + Self::Duration(cond.into()) + } + } + } +} + +super::super::impl_convert!(req Condition : v3::sessions::filter_field::ValueCondition); diff --git a/packages/rust/armonik/src/objects/sessions/get.rs b/packages/rust/armonik/src/objects/sessions/get.rs new file mode 100644 index 000000000..6b5fd2f5b --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/get.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for getting a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::GetSessionRequest { + session_id, + } +); + +/// Response for getting a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::GetSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/list.rs b/packages/rust/armonik/src/objects/sessions/list.rs new file mode 100644 index 000000000..63550f8df --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/list.rs @@ -0,0 +1,72 @@ +use crate::api::v3; + +use super::{filter, Raw, Sort}; + +/// Request to list sessions. +/// +/// Use pagination, filtering and sorting. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Request { + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The filters. + pub filters: filter::Or, + /// The sort. + /// + /// Must be set for every request. + pub sort: Sort, + /// Flag to tell if server must return task options in summary sessions + pub with_task_options: bool, +} + +impl Default for Request { + fn default() -> Self { + Self { + page: 0, + page_size: 100, + filters: Default::default(), + sort: Default::default(), + with_task_options: false, + } + } +} + +super::super::impl_convert!( + struct Request = v3::sessions::ListSessionsRequest { + page, + page_size, + filters = option filters, + sort = option sort, + with_task_options, + } +); + +#[derive(Debug, Clone)] +pub struct Response { + pub sessions: Vec, + pub page: i32, + pub page_size: i32, + pub total: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + sessions: Vec::new(), + page: 0, + page_size: 100, + total: 0, + } + } +} + +super::super::impl_convert!( + struct Response = v3::sessions::ListSessionsResponse { + list sessions, + page, + page_size, + total, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/mod.rs b/packages/rust/armonik/src/objects/sessions/mod.rs new file mode 100644 index 000000000..a7b9d68e6 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/mod.rs @@ -0,0 +1,28 @@ +//! ArmoniK objects related to the Sessions service + +pub mod cancel; +pub mod close; +pub mod create; +pub mod delete; +pub mod filter; +pub mod get; +pub mod list; +pub mod pause; +pub mod purge; +pub mod resume; +pub mod stop_submission; + +mod field; +mod raw; + +pub use field::{Field, RawField}; +pub use raw::Raw; + +pub type Sort = super::Sort; + +super::super::impl_convert!( + struct Sort = crate::api::v3::sessions::list_sessions_request::Sort { + field = option field, + direction = enum direction, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/pause.rs b/packages/rust/armonik/src/objects/sessions/pause.rs new file mode 100644 index 000000000..10214da21 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/pause.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for pausing a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::PauseSessionRequest { + session_id, + } +); + +/// Response for pausing a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::PauseSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/purge.rs b/packages/rust/armonik/src/objects/sessions/purge.rs new file mode 100644 index 000000000..d5a7534d1 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/purge.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for purging a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::PurgeSessionRequest { + session_id, + } +); + +/// Response for purging a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::PurgeSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/raw.rs b/packages/rust/armonik/src/objects/sessions/raw.rs new file mode 100644 index 000000000..1aa49b991 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/raw.rs @@ -0,0 +1,49 @@ +use super::super::{SessionStatus, TaskOptions}; + +use crate::api::v3; + +/// A raw session object. +#[derive(Debug, Clone, Default)] +pub struct Raw { + /// The session ID. + pub session_id: String, + /// The session status. + pub status: SessionStatus, + /// Whether clients can submit tasks in the session. + pub client_submission: bool, + /// Whether workers can submit tasks in the session. + pub worker_submission: bool, + /// The partition IDs. + pub partition_ids: Vec, + /// The task options. In fact, these are used as default value in child tasks. + pub default_task_options: TaskOptions, + /// The creation date. + pub created_at: Option, + /// The cancellation date. Only set when status is 'cancelled'. + pub cancelled_at: Option, + /// The closure date. Only set when status is 'closed'. + pub closed_at: Option, + /// The purge date. Only set when status is 'purged'. + pub purged_at: Option, + /// The deletion date. Only set when status is 'deleted'. + pub deleted_at: Option, + /// The duration. Only set when status is 'cancelled'. + pub duration: Option, +} + +super::super::impl_convert!( + struct Raw = v3::sessions::SessionRaw { + session_id, + status = enum status, + client_submission, + worker_submission, + partition_ids, + default_task_options = option options, + created_at, + cancelled_at, + closed_at, + purged_at, + deleted_at, + duration, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/resume.rs b/packages/rust/armonik/src/objects/sessions/resume.rs new file mode 100644 index 000000000..57700a6f9 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/resume.rs @@ -0,0 +1,31 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for resuming a single session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::sessions::ResumeSessionRequest { + session_id, + } +); + +/// Response for resuming a single session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::ResumeSessionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sessions/stop_submission.rs b/packages/rust/armonik/src/objects/sessions/stop_submission.rs new file mode 100644 index 000000000..0fa65dd88 --- /dev/null +++ b/packages/rust/armonik/src/objects/sessions/stop_submission.rs @@ -0,0 +1,37 @@ +use crate::api::v3; + +use super::Raw; + +/// Request for stopping new tasks submissions from clients or workers in the given session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, + /// Whether to stop client submission. + pub client: bool, + /// Whether to stop worker submission. + pub worker: bool, +} + +super::super::impl_convert!( + struct Request = v3::sessions::StopSubmissionRequest { + session_id, + client, + worker, + } +); + +/// Response for stopping new tasks submissions from clients or workers in the given session. +/// +/// Return a raw session. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The session. + pub session: Raw, +} + +super::super::impl_convert!( + struct Response = v3::sessions::StopSubmissionResponse { + session = option session, + } +); diff --git a/packages/rust/armonik/src/objects/sort.rs b/packages/rust/armonik/src/objects/sort.rs new file mode 100644 index 000000000..b099d6e3e --- /dev/null +++ b/packages/rust/armonik/src/objects/sort.rs @@ -0,0 +1,64 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum SortDirection { + /// Unspecified. Do not use. + Unspecified = 0, + /// Ascending. + #[default] + Asc = 1, + /// Descending + Desc = 2, +} + +impl From for SortDirection { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::Asc, + 2 => Self::Desc, + _ => Self::Unspecified, + } + } +} + +impl From for i32 { + fn from(value: SortDirection) -> Self { + value as i32 + } +} + +impl From for v3::sort_direction::SortDirection { + fn from(value: SortDirection) -> Self { + match value { + SortDirection::Unspecified => Self::Unspecified, + SortDirection::Asc => Self::Asc, + SortDirection::Desc => Self::Desc, + } + } +} + +impl From for SortDirection { + fn from(value: v3::sort_direction::SortDirection) -> Self { + match value { + v3::sort_direction::SortDirection::Unspecified => Self::Unspecified, + v3::sort_direction::SortDirection::Asc => Self::Asc, + v3::sort_direction::SortDirection::Desc => Self::Desc, + } + } +} + +super::impl_convert!(req SortDirection : v3::sort_direction::SortDirection); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Sort { + pub field: T, + pub direction: SortDirection, +} + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct SortMany { + pub fields: Vec, + pub direction: SortDirection, +} diff --git a/packages/rust/armonik/src/objects/status_count.rs b/packages/rust/armonik/src/objects/status_count.rs new file mode 100644 index 000000000..594bd2618 --- /dev/null +++ b/packages/rust/armonik/src/objects/status_count.rs @@ -0,0 +1,16 @@ +use crate::api::v3; + +use super::TaskStatus; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct StatusCount { + pub status: TaskStatus, + pub count: i32, +} + +super::impl_convert!( + struct StatusCount = v3::StatusCount { + status = enum status, + count, + } +); diff --git a/packages/rust/armonik/src/objects/submitter/cancel_session.rs b/packages/rust/armonik/src/objects/submitter/cancel_session.rs new file mode 100644 index 000000000..271d03d36 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/cancel_session.rs @@ -0,0 +1,20 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + pub session_id: String, +} + +super::super::impl_convert!( + struct Request = v3::Session { + session_id = id, + } +); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response {} + +super::super::impl_convert!( + struct Response = v3::Empty { + } +); diff --git a/packages/rust/armonik/src/objects/submitter/cancel_tasks.rs b/packages/rust/armonik/src/objects/submitter/cancel_tasks.rs new file mode 100644 index 000000000..306190c78 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/cancel_tasks.rs @@ -0,0 +1,30 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub filter: super::TaskFilter, +} + +impl From for v3::submitter::TaskFilter { + fn from(value: Request) -> Self { + value.filter.into() + } +} + +impl From for Request { + fn from(value: v3::submitter::TaskFilter) -> Self { + Self { + filter: value.into(), + } + } +} + +super::super::impl_convert!(req Request : v3::submitter::TaskFilter); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response {} + +super::super::impl_convert!( + struct Response = v3::Empty { + } +); diff --git a/packages/rust/armonik/src/objects/submitter/count_tasks.rs b/packages/rust/armonik/src/objects/submitter/count_tasks.rs new file mode 100644 index 000000000..8b3946d65 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/count_tasks.rs @@ -0,0 +1,24 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub filter: super::TaskFilter, +} + +impl From for v3::submitter::TaskFilter { + fn from(value: Request) -> Self { + value.filter.into() + } +} + +impl From for Request { + fn from(value: v3::submitter::TaskFilter) -> Self { + Self { + filter: value.into(), + } + } +} + +super::super::impl_convert!(req Request : v3::submitter::TaskFilter); + +pub type Response = super::super::Count; diff --git a/packages/rust/armonik/src/objects/submitter/create_session.rs b/packages/rust/armonik/src/objects/submitter/create_session.rs new file mode 100644 index 000000000..d60e43300 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/create_session.rs @@ -0,0 +1,34 @@ +use crate::api::v3; + +use super::super::TaskOptions; + +/// Request for creating session. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// Default tasks options for tasks in the session. + pub default_task_options: TaskOptions, + /// List of partitions allowed during the session. + pub partition_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::submitter::CreateSessionRequest { + default_task_options = option default_task_option, + partition_ids, + } +); + +/// Reply after session creation. +/// We have this reply in case of success. +/// When the session creation is not successful, there is an rpc exception. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Session id of the created session if successful + pub session_id: String, +} + +super::super::impl_convert!( + struct Response = v3::submitter::CreateSessionReply { + session_id, + } +); diff --git a/packages/rust/armonik/src/objects/submitter/create_tasks.rs b/packages/rust/armonik/src/objects/submitter/create_tasks.rs new file mode 100644 index 000000000..3d62a4b4a --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/create_tasks.rs @@ -0,0 +1,197 @@ +use super::super::{DataChunk, InitTaskRequest, TaskOptions, TaskRequest}; +use crate::utils::IntoCollection; + +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct SmallRequest { + pub session_id: String, + pub task_options: Option, + pub task_requests: Vec, +} + +super::super::impl_convert!( + struct SmallRequest = v3::submitter::CreateSmallTaskRequest { + session_id, + option task_options, + list task_requests, + } +); + +#[derive(Debug, Clone, Default)] +pub struct InitRequest { + pub session_id: String, + pub task_options: Option, +} + +super::super::impl_convert!( + struct InitRequest = v3::submitter::create_large_task_request::InitRequest { + session_id, + option task_options, + } +); + +#[derive(Debug, Clone, Default)] +pub enum LargeRequest { + #[default] + Invalid, + InitRequest(InitRequest), + InitTaskRequest(InitTaskRequest), + DataChunk(DataChunk), +} + +impl From for v3::submitter::CreateLargeTaskRequest { + fn from(value: LargeRequest) -> Self { + match value { + LargeRequest::Invalid => Self { r#type: None }, + LargeRequest::InitRequest(request) => Self { + r#type: Some(v3::submitter::create_large_task_request::Type::InitRequest( + request.into(), + )), + }, + LargeRequest::InitTaskRequest(request) => Self { + r#type: Some(v3::submitter::create_large_task_request::Type::InitTask( + request.into(), + )), + }, + LargeRequest::DataChunk(chunk) => Self { + r#type: Some(v3::submitter::create_large_task_request::Type::TaskPayload( + chunk.into(), + )), + }, + } + } +} + +impl From for LargeRequest { + fn from(value: v3::submitter::CreateLargeTaskRequest) -> Self { + match value.r#type { + Some(v3::submitter::create_large_task_request::Type::InitRequest(request)) => { + Self::InitRequest(request.into()) + } + Some(v3::submitter::create_large_task_request::Type::InitTask(request)) => { + Self::InitTaskRequest(request.into()) + } + Some(v3::submitter::create_large_task_request::Type::TaskPayload(chunk)) => { + Self::DataChunk(chunk.into()) + } + None => Self::Invalid, + } + } +} + +super::super::impl_convert!(req LargeRequest : v3::submitter::CreateLargeTaskRequest); + +#[derive(Debug, Clone)] +pub enum Status { + TaskInfo { + /// Unique ID of the created task. + task_id: String, + /// Unique ID of the result that will be used as expected output. Results should already exist. + expected_output_keys: Vec, + /// Unique ID of the result that will be used as data dependency. Results should already exist. + data_dependencies: Vec, + /// Unique ID of the result that will be used as payload. Result associated to the payload is created implicitly. + payload_id: String, + }, + Error(String), +} + +impl Default for Status { + fn default() -> Self { + Self::Error(Default::default()) + } +} + +impl From for v3::submitter::create_task_reply::CreationStatus { + fn from(value: Status) -> Self { + match value { + Status::TaskInfo { + task_id, + expected_output_keys, + data_dependencies, + payload_id, + } => Self { + status: Some( + v3::submitter::create_task_reply::creation_status::Status::TaskInfo( + v3::submitter::create_task_reply::TaskInfo { + task_id, + expected_output_keys, + data_dependencies, + payload_id, + }, + ), + ), + }, + Status::Error(msg) => Self { + status: Some(v3::submitter::create_task_reply::creation_status::Status::Error(msg)), + }, + } + } +} + +impl From for Status { + fn from(value: v3::submitter::create_task_reply::CreationStatus) -> Self { + match value.status { + Some(v3::submitter::create_task_reply::creation_status::Status::TaskInfo(status)) => { + Self::TaskInfo { + task_id: status.task_id, + expected_output_keys: status.expected_output_keys, + data_dependencies: status.data_dependencies, + payload_id: status.payload_id, + } + } + Some(v3::submitter::create_task_reply::creation_status::Status::Error(msg)) => { + Self::Error(msg) + } + None => Default::default(), + } + } +} + +#[derive(Debug, Clone)] +pub enum Response { + Status(Vec), + Error(String), +} + +impl Default for Response { + fn default() -> Self { + //Self::Error(Default::default()) + Self::Status(vec![]) + } +} + +impl From for v3::submitter::CreateTaskReply { + fn from(value: Response) -> Self { + match value { + Response::Status(status) => Self { + response: Some( + v3::submitter::create_task_reply::Response::CreationStatusList( + v3::submitter::create_task_reply::CreationStatusList { + creation_statuses: status.into_collect(), + }, + ), + ), + }, + Response::Error(msg) => Self { + response: Some(v3::submitter::create_task_reply::Response::Error(msg)), + }, + } + } +} + +impl From for Response { + fn from(value: v3::submitter::CreateTaskReply) -> Self { + eprintln!("{value:?}"); + match value.response { + Some(v3::submitter::create_task_reply::Response::CreationStatusList(status)) => { + Self::Status(status.creation_statuses.into_collect()) + } + Some(v3::submitter::create_task_reply::Response::Error(msg)) => Self::Error(msg), + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Response : v3::submitter::CreateTaskReply); diff --git a/packages/rust/armonik/src/objects/submitter/get_service_configuration.rs b/packages/rust/armonik/src/objects/submitter/get_service_configuration.rs new file mode 100644 index 000000000..c4e94dab4 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/get_service_configuration.rs @@ -0,0 +1,10 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request {} + +super::super::impl_convert!( + struct Request = v3::Empty {} +); + +pub type Response = super::super::Configuration; diff --git a/packages/rust/armonik/src/objects/submitter/list_sessions.rs b/packages/rust/armonik/src/objects/submitter/list_sessions.rs new file mode 100644 index 000000000..e9ab89d29 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/list_sessions.rs @@ -0,0 +1,33 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub filter: super::SessionFilter, +} + +impl From for v3::submitter::SessionFilter { + fn from(value: Request) -> Self { + value.filter.into() + } +} + +impl From for Request { + fn from(value: v3::submitter::SessionFilter) -> Self { + Self { + filter: value.into(), + } + } +} + +super::super::impl_convert!(req Request : v3::submitter::SessionFilter); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + pub session_ids: Vec, +} + +super::super::impl_convert!( + struct Response = v3::submitter::SessionIdList { + list session_ids, + } +); diff --git a/packages/rust/armonik/src/objects/submitter/list_tasks.rs b/packages/rust/armonik/src/objects/submitter/list_tasks.rs new file mode 100644 index 000000000..4e4b78f64 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/list_tasks.rs @@ -0,0 +1,33 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub filter: super::TaskFilter, +} + +impl From for v3::submitter::TaskFilter { + fn from(value: Request) -> Self { + value.filter.into() + } +} + +impl From for Request { + fn from(value: v3::submitter::TaskFilter) -> Self { + Self { + filter: value.into(), + } + } +} + +super::super::impl_convert!(req Request : v3::submitter::TaskFilter); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + pub task_ids: Vec, +} + +super::super::impl_convert!( + struct Response = v3::TaskIdList { + list task_ids, + } +); diff --git a/packages/rust/armonik/src/objects/submitter/mod.rs b/packages/rust/armonik/src/objects/submitter/mod.rs new file mode 100644 index 000000000..5df699c7e --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/mod.rs @@ -0,0 +1,22 @@ +//! ArmoniK objects related to the Submitter service + +pub mod cancel_session; +pub mod cancel_tasks; +pub mod count_tasks; +pub mod create_session; +pub mod create_tasks; +pub mod get_service_configuration; +pub mod list_sessions; +pub mod list_tasks; +pub mod result_status; +pub mod task_status; +pub mod try_get_result; +pub mod try_get_task_output; +pub mod wait_for_availability; +pub mod wait_for_completion; + +mod session_filter; +mod task_filter; + +pub use session_filter::{SessionFilter, SessionFilterStatuses}; +pub use task_filter::{TaskFilter, TaskFilterIds, TaskFilterStatuses}; diff --git a/packages/rust/armonik/src/objects/submitter/result_status.rs b/packages/rust/armonik/src/objects/submitter/result_status.rs new file mode 100644 index 000000000..d67c78beb --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/result_status.rs @@ -0,0 +1,54 @@ +use std::collections::HashMap; + +use crate::api::v3; + +use super::super::ResultStatus; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub session_id: String, + pub result_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::submitter::GetResultStatusRequest { + session_id, + list result_ids, + } +); + +#[derive(Debug, Clone, Default)] +pub struct Response { + pub statuses: HashMap, +} + +impl From for v3::submitter::GetResultStatusReply { + fn from(value: Response) -> Self { + Self { + id_statuses: value + .statuses + .into_iter() + .map( + |(id, status)| v3::submitter::get_result_status_reply::IdStatus { + result_id: id, + status: status as i32, + }, + ) + .collect(), + } + } +} + +impl From for Response { + fn from(value: v3::submitter::GetResultStatusReply) -> Self { + Self { + statuses: value + .id_statuses + .into_iter() + .map(|id_status| (id_status.result_id, id_status.status.into())) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::submitter::GetResultStatusReply); diff --git a/packages/rust/armonik/src/objects/submitter/session_filter.rs b/packages/rust/armonik/src/objects/submitter/session_filter.rs new file mode 100644 index 000000000..3036f25be --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/session_filter.rs @@ -0,0 +1,59 @@ +use super::super::SessionStatus; +use crate::utils::IntoCollection; + +use crate::api::v3; + +#[derive(Debug, Clone)] +pub enum SessionFilterStatuses { + Include(Vec), + Exclude(Vec), +} + +impl Default for SessionFilterStatuses { + fn default() -> Self { + Self::Exclude(Default::default()) + } +} + +impl From for v3::submitter::session_filter::Statuses { + fn from(value: SessionFilterStatuses) -> Self { + match value { + SessionFilterStatuses::Include(statuses) => { + Self::Excluded(v3::submitter::session_filter::StatusesRequest { + statuses: statuses.into_iter().map(|status| status as i32).collect(), + }) + } + SessionFilterStatuses::Exclude(statuses) => { + Self::Included(v3::submitter::session_filter::StatusesRequest { + statuses: statuses.into_iter().map(|status| status as i32).collect(), + }) + } + } + } +} + +impl From for SessionFilterStatuses { + fn from(value: v3::submitter::session_filter::Statuses) -> Self { + match value { + v3::submitter::session_filter::Statuses::Excluded(statuses) => { + Self::Exclude(statuses.statuses.into_collect()) + } + v3::submitter::session_filter::Statuses::Included(statuses) => { + Self::Include(statuses.statuses.into_collect()) + } + } + } +} + +#[derive(Debug, Clone, Default)] +pub struct SessionFilter { + pub ids: Vec, + pub statuses: SessionFilterStatuses, +} + +super::super::impl_convert!( + struct SessionFilter = v3::submitter::SessionFilter { + list ids = list sessions, + statuses = option statuses, + } +); diff --git a/packages/rust/armonik/src/objects/submitter/task_filter.rs b/packages/rust/armonik/src/objects/submitter/task_filter.rs new file mode 100644 index 000000000..d515e6a74 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/task_filter.rs @@ -0,0 +1,93 @@ +use super::super::TaskStatus; +use crate::utils::IntoCollection; + +use crate::api::v3; + +#[derive(Debug, Clone)] +pub enum TaskFilterIds { + Sessions(Vec), + Tasks(Vec), +} + +impl Default for TaskFilterIds { + fn default() -> Self { + Self::Sessions(Default::default()) + } +} + +impl From for v3::submitter::task_filter::Ids { + fn from(value: TaskFilterIds) -> Self { + match value { + TaskFilterIds::Sessions(sessions) => { + Self::Session(v3::submitter::task_filter::IdsRequest { ids: sessions }) + } + TaskFilterIds::Tasks(tasks) => { + Self::Task(v3::submitter::task_filter::IdsRequest { ids: tasks }) + } + } + } +} + +impl From for TaskFilterIds { + fn from(value: v3::submitter::task_filter::Ids) -> Self { + match value { + v3::submitter::task_filter::Ids::Session(sessions) => Self::Sessions(sessions.ids), + v3::submitter::task_filter::Ids::Task(tasks) => Self::Tasks(tasks.ids), + } + } +} + +#[derive(Debug, Clone)] +pub enum TaskFilterStatuses { + Include(Vec), + Exclude(Vec), +} + +impl Default for TaskFilterStatuses { + fn default() -> Self { + Self::Exclude(Default::default()) + } +} + +impl From for v3::submitter::task_filter::Statuses { + fn from(value: TaskFilterStatuses) -> Self { + match value { + TaskFilterStatuses::Include(statuses) => { + Self::Excluded(v3::submitter::task_filter::StatusesRequest { + statuses: statuses.into_iter().map(|status| status as i32).collect(), + }) + } + TaskFilterStatuses::Exclude(statuses) => { + Self::Included(v3::submitter::task_filter::StatusesRequest { + statuses: statuses.into_iter().map(|status| status as i32).collect(), + }) + } + } + } +} + +impl From for TaskFilterStatuses { + fn from(value: v3::submitter::task_filter::Statuses) -> Self { + match value { + v3::submitter::task_filter::Statuses::Excluded(statuses) => { + Self::Exclude(statuses.statuses.into_collect()) + } + v3::submitter::task_filter::Statuses::Included(statuses) => { + Self::Include(statuses.statuses.into_collect()) + } + } + } +} + +#[derive(Debug, Clone, Default)] +pub struct TaskFilter { + pub ids: TaskFilterIds, + pub statuses: TaskFilterStatuses, +} + +super::super::impl_convert!( + struct TaskFilter = v3::submitter::TaskFilter { + ids = option ids, + statuses = option statuses, + } +); diff --git a/packages/rust/armonik/src/objects/submitter/task_status.rs b/packages/rust/armonik/src/objects/submitter/task_status.rs new file mode 100644 index 000000000..7586a0b71 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/task_status.rs @@ -0,0 +1,52 @@ +use std::collections::HashMap; + +use crate::api::v3; + +use super::super::TaskStatus; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub task_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::submitter::GetTaskStatusRequest { + list task_ids, + } +); + +#[derive(Debug, Clone, Default)] +pub struct Response { + pub statuses: HashMap, +} + +impl From for v3::submitter::GetTaskStatusReply { + fn from(value: Response) -> Self { + Self { + id_statuses: value + .statuses + .into_iter() + .map( + |(id, status)| v3::submitter::get_task_status_reply::IdStatus { + task_id: id, + status: status as i32, + }, + ) + .collect(), + } + } +} + +impl From for Response { + fn from(value: v3::submitter::GetTaskStatusReply) -> Self { + Self { + statuses: value + .id_statuses + .into_iter() + .map(|id_status| (id_status.task_id, id_status.status.into())) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::submitter::GetTaskStatusReply); diff --git a/packages/rust/armonik/src/objects/submitter/try_get_result.rs b/packages/rust/armonik/src/objects/submitter/try_get_result.rs new file mode 100644 index 000000000..21999d6e1 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/try_get_result.rs @@ -0,0 +1,60 @@ +use super::super::{DataChunk, TaskError}; + +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + pub session_id: String, + pub result_id: String, +} + +super::super::impl_convert!( + struct Request = v3::ResultRequest { + session_id = session, + result_id, + } +); + +#[derive(Debug, Clone)] +pub enum Response { + DataChunk(DataChunk), + TaskError(TaskError), + NotCompleted(String), +} + +impl Default for Response { + fn default() -> Self { + Self::NotCompleted(Default::default()) + } +} + +impl From for v3::submitter::ResultReply { + fn from(value: Response) -> Self { + match value { + Response::DataChunk(chunk) => Self { + r#type: Some(v3::submitter::result_reply::Type::Result(chunk.into())), + }, + Response::TaskError(error) => Self { + r#type: Some(v3::submitter::result_reply::Type::Error(error.into())), + }, + Response::NotCompleted(msg) => Self { + r#type: Some(v3::submitter::result_reply::Type::NotCompletedTask(msg)), + }, + } + } +} + +impl From for Response { + fn from(value: v3::submitter::ResultReply) -> Self { + match value.r#type { + Some(v3::submitter::result_reply::Type::Result(chunk)) => Self::DataChunk(chunk.into()), + Some(v3::submitter::result_reply::Type::Error(error)) => Self::TaskError(error.into()), + Some(v3::submitter::result_reply::Type::NotCompletedTask(msg)) => { + Self::NotCompleted(msg) + } + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Response : v3::submitter::ResultReply); diff --git a/packages/rust/armonik/src/objects/submitter/try_get_task_output.rs b/packages/rust/armonik/src/objects/submitter/try_get_task_output.rs new file mode 100644 index 000000000..e9dd62426 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/try_get_task_output.rs @@ -0,0 +1,16 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + pub session_id: String, + pub task_id: String, +} + +super::super::impl_convert!( + struct Request = v3::TaskOutputRequest { + session_id = session, + task_id, + } +); + +pub type Response = super::super::Output; diff --git a/packages/rust/armonik/src/objects/submitter/wait_for_availability.rs b/packages/rust/armonik/src/objects/submitter/wait_for_availability.rs new file mode 100644 index 000000000..a4d07a0b2 --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/wait_for_availability.rs @@ -0,0 +1,64 @@ +use super::super::TaskError; + +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + pub session_id: String, + pub result_id: String, +} + +super::super::impl_convert!( + struct Request = v3::ResultRequest { + session_id = session, + result_id, + } +); + +#[derive(Debug, Clone)] +pub enum Response { + Ok, + TaskError(TaskError), + NotCompleted(String), +} + +impl Default for Response { + fn default() -> Self { + Self::NotCompleted(Default::default()) + } +} + +impl From for v3::submitter::AvailabilityReply { + fn from(value: Response) -> Self { + match value { + Response::Ok => Self { + r#type: Some(v3::submitter::availability_reply::Type::Ok(v3::Empty {})), + }, + Response::TaskError(error) => Self { + r#type: Some(v3::submitter::availability_reply::Type::Error(error.into())), + }, + Response::NotCompleted(msg) => Self { + r#type: Some(v3::submitter::availability_reply::Type::NotCompletedTask( + msg, + )), + }, + } + } +} + +impl From for Response { + fn from(value: v3::submitter::AvailabilityReply) -> Self { + match value.r#type { + Some(v3::submitter::availability_reply::Type::Ok(_)) => Self::Ok, + Some(v3::submitter::availability_reply::Type::Error(error)) => { + Self::TaskError(error.into()) + } + Some(v3::submitter::availability_reply::Type::NotCompletedTask(msg)) => { + Self::NotCompleted(msg) + } + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Response : v3::submitter::AvailabilityReply); diff --git a/packages/rust/armonik/src/objects/submitter/wait_for_completion.rs b/packages/rust/armonik/src/objects/submitter/wait_for_completion.rs new file mode 100644 index 000000000..7330a1e6f --- /dev/null +++ b/packages/rust/armonik/src/objects/submitter/wait_for_completion.rs @@ -0,0 +1,18 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct Request { + pub filter: super::TaskFilter, + pub stop_on_first_task_error: bool, + pub stop_on_first_task_cancellation: bool, +} + +super::super::impl_convert!( + struct Request = v3::submitter::WaitRequest { + filter = option filter, + stop_on_first_task_error, + stop_on_first_task_cancellation, + } +); + +pub type Response = super::super::Count; diff --git a/packages/rust/armonik/src/objects/task_error.rs b/packages/rust/armonik/src/objects/task_error.rs new file mode 100644 index 000000000..8195f20e3 --- /dev/null +++ b/packages/rust/armonik/src/objects/task_error.rs @@ -0,0 +1,16 @@ +use super::Error; + +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct TaskError { + pub task_id: String, + pub errors: Vec, +} + +super::impl_convert!( + struct TaskError = v3::TaskError { + task_id, + list errors, + } +); diff --git a/packages/rust/armonik/src/objects/task_id.rs b/packages/rust/armonik/src/objects/task_id.rs new file mode 100644 index 000000000..53bf2e5ea --- /dev/null +++ b/packages/rust/armonik/src/objects/task_id.rs @@ -0,0 +1,14 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct TaskId { + pub session_id: String, + pub task_id: String, +} + +super::impl_convert!( + struct TaskId = v3::TaskId { + session_id = session, + task_id = task, + } +); diff --git a/packages/rust/armonik/src/objects/task_id_list.rs b/packages/rust/armonik/src/objects/task_id_list.rs new file mode 100644 index 000000000..deb0872d5 --- /dev/null +++ b/packages/rust/armonik/src/objects/task_id_list.rs @@ -0,0 +1,12 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct TaskIdList { + pub task_ids: Vec, +} + +super::impl_convert!( + struct TaskIdList = v3::TaskIdList { + task_ids, + } +); diff --git a/packages/rust/armonik/src/objects/task_id_with_status.rs b/packages/rust/armonik/src/objects/task_id_with_status.rs new file mode 100644 index 000000000..a220b3957 --- /dev/null +++ b/packages/rust/armonik/src/objects/task_id_with_status.rs @@ -0,0 +1,16 @@ +use crate::api::v3; + +use super::{TaskId, TaskStatus}; + +#[derive(Debug, Clone, Default)] +pub struct TaskIdWithStatus { + pub task_id: TaskId, + pub status: TaskStatus, +} + +super::impl_convert!( + struct TaskIdWithStatus = v3::TaskIdWithStatus { + task_id = option task_id, + status = enum status, + } +); diff --git a/packages/rust/armonik/src/objects/task_list.rs b/packages/rust/armonik/src/objects/task_list.rs new file mode 100644 index 000000000..fac08a091 --- /dev/null +++ b/packages/rust/armonik/src/objects/task_list.rs @@ -0,0 +1,14 @@ +use crate::api::v3; + +use super::TaskId; + +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct TaskList { + pub task_ids: Vec, +} + +super::impl_convert!( + struct TaskList = v3::TaskList { + list task_ids, + } +); diff --git a/packages/rust/armonik/src/objects/task_options.rs b/packages/rust/armonik/src/objects/task_options.rs new file mode 100644 index 000000000..c5b9142af --- /dev/null +++ b/packages/rust/armonik/src/objects/task_options.rs @@ -0,0 +1,142 @@ +use ::std::collections::HashMap; + +use crate::api::v3; + +const INFINITE_DURATION: prost_types::Duration = prost_types::Duration { + seconds: 315576000000, + nanos: 0, +}; + +#[derive(Debug, Clone)] +pub struct TaskOptions { + pub options: HashMap, + pub max_duration: prost_types::Duration, + pub max_retries: i32, + pub priority: i32, + pub partition_id: String, + pub application_name: String, + pub application_version: String, + pub application_namespace: String, + pub application_service: String, + pub engine_type: String, +} + +impl Default for TaskOptions { + fn default() -> Self { + Self { + options: Default::default(), + max_duration: INFINITE_DURATION, + max_retries: 1, + priority: 1, + partition_id: Default::default(), + application_name: Default::default(), + application_version: Default::default(), + application_namespace: Default::default(), + application_service: Default::default(), + engine_type: Default::default(), + } + } +} + +impl From for v3::TaskOptions { + fn from(value: TaskOptions) -> Self { + Self { + options: value.options, + max_duration: Some(value.max_duration), + max_retries: value.max_retries, + priority: value.priority, + partition_id: value.partition_id, + application_name: value.application_name, + application_version: value.application_version, + application_namespace: value.application_namespace, + application_service: value.application_service, + engine_type: value.engine_type, + } + } +} + +impl From for TaskOptions { + fn from(value: v3::TaskOptions) -> Self { + Self { + options: value.options, + max_duration: value.max_duration.unwrap_or(INFINITE_DURATION), + max_retries: value.max_retries, + priority: value.priority, + partition_id: value.partition_id, + application_name: value.application_name, + application_version: value.application_version, + application_namespace: value.application_namespace, + application_service: value.application_service, + engine_type: value.engine_type, + } + } +} + +super::impl_convert!(req TaskOptions : v3::TaskOptions); + +/// Represents a field in a task option. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum TaskOptionField { + /// Unspecified. + #[default] + Unspecified = 0, + MaxDuration = 1, + MaxRetries = 2, + Priority = 3, + PartitionId = 4, + ApplicationName = 5, + ApplicationVersion = 6, + ApplicationNamespace = 7, + ApplicationService = 8, + ApplicationEngine = 9, +} + +impl From for TaskOptionField { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::MaxDuration, + 2 => Self::MaxRetries, + 3 => Self::Priority, + 4 => Self::PartitionId, + 5 => Self::ApplicationName, + 6 => Self::ApplicationVersion, + 7 => Self::ApplicationNamespace, + 8 => Self::ApplicationService, + 9 => Self::ApplicationEngine, + _ => Self::Unspecified, + } + } +} + +impl From for v3::sessions::TaskOptionField { + fn from(value: TaskOptionField) -> Self { + Self { + field: value as i32, + } + } +} + +impl From for v3::tasks::TaskOptionField { + fn from(value: TaskOptionField) -> Self { + Self { + field: value as i32, + } + } +} + +impl From for TaskOptionField { + fn from(value: v3::sessions::TaskOptionField) -> Self { + value.field.into() + } +} + +impl From for TaskOptionField { + fn from(value: v3::tasks::TaskOptionField) -> Self { + value.field.into() + } +} + +super::super::impl_convert!(req TaskOptionField : v3::sessions::TaskOptionField); +super::super::impl_convert!(req TaskOptionField : v3::tasks::TaskOptionField); diff --git a/packages/rust/armonik/src/objects/task_output_request.rs b/packages/rust/armonik/src/objects/task_output_request.rs new file mode 100644 index 000000000..a5b10c32f --- /dev/null +++ b/packages/rust/armonik/src/objects/task_output_request.rs @@ -0,0 +1,14 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct TaskOutputRequest { + pub session_id: String, + pub task_id: String, +} + +super::impl_convert!( + struct TaskOutputRequest = v3::TaskOutputRequest { + session_id = session, + task_id, + } +); diff --git a/packages/rust/armonik/src/objects/task_request.rs b/packages/rust/armonik/src/objects/task_request.rs new file mode 100644 index 000000000..f75c22e4b --- /dev/null +++ b/packages/rust/armonik/src/objects/task_request.rs @@ -0,0 +1,18 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct TaskRequest { + pub expected_output_keys: Vec, + pub data_dependencies: Vec, + pub payload: Vec, + pub payload_name: String, +} + +super::impl_convert!( + struct TaskRequest = v3::TaskRequest { + expected_output_keys, + data_dependencies, + payload, + payload_name, + } +); diff --git a/packages/rust/armonik/src/objects/task_request_header.rs b/packages/rust/armonik/src/objects/task_request_header.rs new file mode 100644 index 000000000..456ebc8bd --- /dev/null +++ b/packages/rust/armonik/src/objects/task_request_header.rs @@ -0,0 +1,14 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default)] +pub struct TaskRequestHeader { + pub expected_output_keys: Vec, + pub data_dependencies: Vec, +} + +super::impl_convert!( + struct TaskRequestHeader = v3::TaskRequestHeader { + expected_output_keys, + data_dependencies, + } +); diff --git a/packages/rust/armonik/src/objects/task_status.rs b/packages/rust/armonik/src/objects/task_status.rs new file mode 100644 index 000000000..055c761d3 --- /dev/null +++ b/packages/rust/armonik/src/objects/task_status.rs @@ -0,0 +1,101 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum TaskStatus { + /// Task is in an unknown state. + #[default] + Unspecified = 0, + /// Task is being created in database. + Creating = 1, + /// Task is submitted to the queue. + Submitted = 2, + /// Task is dispatched to a worker. + Dispatched = 3, + /// Task is completed. + Completed = 4, + /// Task is in error state. + Error = 5, + /// Task is in timeout state. + Timeout = 6, + /// Task is being cancelled. + Cancelling = 7, + /// Task is cancelled. + Cancelled = 8, + /// Task is being processed. + Processing = 9, + /// Task is processed. + Processed = 10, + /// Task is retried. + Retried = 11, + /// Task is waiting for its dependencies before becoming executable. + Pending = 12, + /// Task is paused and will not be executed until session is resumed. + Paused = 13, +} + +impl From for TaskStatus { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 1 => Self::Creating, + 2 => Self::Submitted, + 3 => Self::Dispatched, + 4 => Self::Completed, + 5 => Self::Error, + 6 => Self::Timeout, + 7 => Self::Cancelling, + 8 => Self::Cancelled, + 9 => Self::Processing, + 10 => Self::Processed, + 11 => Self::Retried, + 12 => Self::Pending, + 13 => Self::Paused, + _ => Default::default(), + } + } +} + +impl From for v3::task_status::TaskStatus { + fn from(value: TaskStatus) -> Self { + match value { + TaskStatus::Unspecified => Self::Unspecified, + TaskStatus::Creating => Self::Creating, + TaskStatus::Submitted => Self::Submitted, + TaskStatus::Dispatched => Self::Dispatched, + TaskStatus::Completed => Self::Completed, + TaskStatus::Error => Self::Error, + TaskStatus::Timeout => Self::Timeout, + TaskStatus::Cancelling => Self::Cancelling, + TaskStatus::Cancelled => Self::Cancelled, + TaskStatus::Processing => Self::Processing, + TaskStatus::Processed => Self::Processed, + TaskStatus::Retried => Self::Retried, + TaskStatus::Pending => Self::Pending, + TaskStatus::Paused => Self::Paused, + } + } +} + +impl From for TaskStatus { + fn from(value: v3::task_status::TaskStatus) -> Self { + match value { + v3::task_status::TaskStatus::Unspecified => Self::Unspecified, + v3::task_status::TaskStatus::Creating => Self::Creating, + v3::task_status::TaskStatus::Submitted => Self::Submitted, + v3::task_status::TaskStatus::Dispatched => Self::Dispatched, + v3::task_status::TaskStatus::Completed => Self::Completed, + v3::task_status::TaskStatus::Error => Self::Error, + v3::task_status::TaskStatus::Timeout => Self::Timeout, + v3::task_status::TaskStatus::Cancelling => Self::Cancelling, + v3::task_status::TaskStatus::Cancelled => Self::Cancelled, + v3::task_status::TaskStatus::Processing => Self::Processing, + v3::task_status::TaskStatus::Processed => Self::Processed, + v3::task_status::TaskStatus::Retried => Self::Retried, + v3::task_status::TaskStatus::Pending => Self::Pending, + v3::task_status::TaskStatus::Paused => Self::Paused, + } + } +} + +super::impl_convert!(req TaskStatus : v3::task_status::TaskStatus); diff --git a/packages/rust/armonik/src/objects/tasks/cancel.rs b/packages/rust/armonik/src/objects/tasks/cancel.rs new file mode 100644 index 000000000..9162eb49c --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/cancel.rs @@ -0,0 +1,29 @@ +use super::Summary; + +use crate::api::v3; + +/// Request to cancel one or many tasks. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + /// Ids of the tasks to cancel. + pub task_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::tasks::CancelTasksRequest { + task_ids, + } +); + +/// Response from canceling one or many tasks. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// Tasks that have been asked to cancel. + pub tasks: Vec, +} + +super::super::impl_convert!( + struct Response = v3::tasks::CancelTasksResponse { + list tasks, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/count_status.rs b/packages/rust/armonik/src/objects/tasks/count_status.rs new file mode 100644 index 000000000..99d41ec1b --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/count_status.rs @@ -0,0 +1,29 @@ +use super::{super::StatusCount, filter}; + +use crate::api::v3; + +/// Request to get count from tasks by status. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Request { + /// The filters. + pub filters: filter::Or, +} + +super::super::impl_convert!( + struct Request = v3::tasks::CountTasksByStatusRequest { + filters = option filters, + } +); + +/// Response to get count from tasks by status. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// Number of tasks by status. Expected to have only 1 object by tasks status. + pub status: Vec, +} + +super::super::impl_convert!( + struct Response = v3::tasks::CountTasksByStatusResponse { + list status, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/field.rs b/packages/rust/armonik/src/objects/tasks/field.rs new file mode 100644 index 000000000..716333af5 --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/field.rs @@ -0,0 +1,152 @@ +use super::super::TaskOptionField; + +use crate::api::v3; + +/// Represents every available field in a Task. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(i32)] +pub enum SummaryField { + /// Unspecified. + Unspecified = 0, + /// The task ID. + #[default] + TaskId = 16, + /// The session ID. + SessionId = 1, + /// The owner pod ID. + OwnerPodId = 9, + /// The initial task ID. Set when a task is submitted independently of retries. + InitialTaskId = 10, + /// The task status. + Status = 2, + /// The task creation date. + CreatedAt = 3, + /// The task submission date. + SubmittedAt = 11, + /// The task start date. + StartedAt = 4, + /// The task end date. + EndedAt = 5, + /// The task duration. Between the creation date and the end date. + CreationToEndDuration = 6, + /// The task calculated duration. Between the start date and the end date. + ProcessingToEndDuration = 7, + /// The task calculated duration. Between the received date and the end date. + ReceivedToEndDuration = 18, + /// The pod TTL (Time To Live). + PodTtl = 12, + /// The hostname of the container running the task. + PodHostname = 13, + /// When the task is received by the agent. + ReceivedAt = 14, + /// When the task is acquired by the agent. + AcquiredAt = 15, + /// When the task is processed by the agent. + ProcessedAt = 17, + /// When task data are fetched by the agent. + FetchedAt = 19, + /// The error message. Only set if task have failed. + Error = 8, + /// The ID of the Result that is used as a payload for this task. + PayloadId = 20, + /// The ID of the Result that is used as a payload for this task. + CreatedBy = 21, +} + +impl From for SummaryField { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unspecified, + 16 => Self::TaskId, + 1 => Self::SessionId, + 9 => Self::OwnerPodId, + 10 => Self::InitialTaskId, + 2 => Self::Status, + 3 => Self::CreatedAt, + 11 => Self::SubmittedAt, + 4 => Self::StartedAt, + 5 => Self::EndedAt, + 6 => Self::CreationToEndDuration, + 7 => Self::ProcessingToEndDuration, + 18 => Self::ReceivedToEndDuration, + 12 => Self::PodTtl, + 13 => Self::PodHostname, + 14 => Self::ReceivedAt, + 15 => Self::AcquiredAt, + 17 => Self::ProcessedAt, + 19 => Self::FetchedAt, + 8 => Self::Error, + 20 => Self::PayloadId, + 21 => Self::CreatedBy, + _ => Self::Unspecified, + } + } +} + +impl From for v3::tasks::TaskSummaryField { + fn from(value: SummaryField) -> Self { + Self { + field: value as i32, + } + } +} + +impl From for SummaryField { + fn from(value: v3::tasks::TaskSummaryField) -> Self { + value.field.into() + } +} + +super::super::impl_convert!(req SummaryField : v3::tasks::TaskSummaryField); + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Field { + Summary(SummaryField), + /// The task option field. + Option(TaskOptionField), + /// Represents a generic field in a task option. + OptionGeneric(String), +} + +impl Default for Field { + fn default() -> Self { + Self::Summary(Default::default()) + } +} + +impl From for v3::tasks::TaskField { + fn from(value: Field) -> Self { + Self { + field: Some(match value { + Field::Summary(field) => { + v3::tasks::task_field::Field::TaskSummaryField(field.into()) + } + Field::Option(field) => v3::tasks::task_field::Field::TaskOptionField(field.into()), + Field::OptionGeneric(field) => { + v3::tasks::task_field::Field::TaskOptionGenericField( + v3::tasks::TaskOptionGenericField { field }, + ) + } + }), + } + } +} + +impl From for Field { + fn from(value: v3::tasks::TaskField) -> Self { + match value.field { + Some(v3::tasks::task_field::Field::TaskSummaryField(field)) => { + Self::Summary(field.into()) + } + Some(v3::tasks::task_field::Field::TaskOptionField(field)) => { + Self::Option(field.into()) + } + Some(v3::tasks::task_field::Field::TaskOptionGenericField(field)) => { + Self::OptionGeneric(field.field) + } + None => Default::default(), + } + } +} + +super::super::impl_convert!(req Field : v3::tasks::TaskField); diff --git a/packages/rust/armonik/src/objects/tasks/filter.rs b/packages/rust/armonik/src/objects/tasks/filter.rs new file mode 100644 index 000000000..a1b6fce21 --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/filter.rs @@ -0,0 +1,81 @@ +use super::super::{ + FilterArray, FilterBoolean, FilterDate, FilterDuration, FilterNumber, FilterString, TaskStatus, +}; + +use crate::{api::v3, impl_filter}; + +impl_filter!( + Filter[super::Field, Condition]: + v3::tasks::Filters[ + v3::tasks::FiltersAnd[ + v3::tasks::FilterField, + v3::tasks::filter_field::ValueCondition + ] + ] +); + +pub type Status = super::super::FilterStatus; + +super::super::impl_convert!( + struct Status = v3::tasks::FilterStatus { + value = enum value, + operator = enum operator, + } +); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Condition { + String(FilterString), + Number(FilterNumber), + Boolean(FilterBoolean), + Status(Status), + Date(FilterDate), + Duration(FilterDuration), + Array(FilterArray), +} + +impl Default for Condition { + fn default() -> Self { + Self::String(Default::default()) + } +} + +impl From for v3::tasks::filter_field::ValueCondition { + fn from(value: Condition) -> Self { + match value { + Condition::String(cond) => Self::FilterString(cond.into()), + Condition::Number(cond) => Self::FilterNumber(cond.into()), + Condition::Boolean(cond) => Self::FilterBoolean(cond.into()), + Condition::Status(cond) => Self::FilterStatus(cond.into()), + Condition::Date(cond) => Self::FilterDate(cond.into()), + Condition::Duration(cond) => Self::FilterDuration(cond.into()), + Condition::Array(cond) => Self::FilterArray(cond.into()), + } + } +} + +impl From for Condition { + fn from(value: v3::tasks::filter_field::ValueCondition) -> Self { + match value { + v3::tasks::filter_field::ValueCondition::FilterString(cond) => { + Self::String(cond.into()) + } + v3::tasks::filter_field::ValueCondition::FilterNumber(cond) => { + Self::Number(cond.into()) + } + v3::tasks::filter_field::ValueCondition::FilterBoolean(cond) => { + Self::Boolean(cond.into()) + } + v3::tasks::filter_field::ValueCondition::FilterStatus(cond) => { + Self::Status(cond.into()) + } + v3::tasks::filter_field::ValueCondition::FilterDate(cond) => Self::Date(cond.into()), + v3::tasks::filter_field::ValueCondition::FilterDuration(cond) => { + Self::Duration(cond.into()) + } + v3::tasks::filter_field::ValueCondition::FilterArray(cond) => Self::Array(cond.into()), + } + } +} + +super::super::impl_convert!(req Condition : v3::tasks::filter_field::ValueCondition); diff --git a/packages/rust/armonik/src/objects/tasks/get.rs b/packages/rust/armonik/src/objects/tasks/get.rs new file mode 100644 index 000000000..42a0171b2 --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/get.rs @@ -0,0 +1,31 @@ +use super::Raw; + +use crate::api::v3; + +/// Request for getting a single task. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + /// The task ID. + pub task_id: String, +} + +super::super::impl_convert!( + struct Request = v3::tasks::GetTaskRequest { + task_id, + } +); + +/// Response for getting a single task. +/// +/// Return a detailed task. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The task. + pub task: Raw, +} + +super::super::impl_convert!( + struct Response = v3::tasks::GetTaskResponse { + task = option task, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/get_result_ids.rs b/packages/rust/armonik/src/objects/tasks/get_result_ids.rs new file mode 100644 index 000000000..673f7d8ef --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/get_result_ids.rs @@ -0,0 +1,54 @@ +use std::collections::HashMap; + +use crate::api::v3; + +/// Request for getting result ids of tasks ids. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request { + /// The task IDs. + pub task_ids: Vec, +} + +super::super::impl_convert!( + struct Request = v3::tasks::GetResultIdsRequest { + list task_ids = list task_id, + } +); + +/// Response for getting result ids of tasks ids. +#[derive(Debug, Clone, Default)] +pub struct Response { + /// The task results. + pub task_results: HashMap>, +} + +impl From for v3::tasks::GetResultIdsResponse { + fn from(value: Response) -> Self { + Self { + task_results: value + .task_results + .into_iter() + .map( + |(task_id, result_ids)| v3::tasks::get_result_ids_response::MapTaskResult { + task_id, + result_ids, + }, + ) + .collect(), + } + } +} + +impl From for Response { + fn from(value: v3::tasks::GetResultIdsResponse) -> Self { + Self { + task_results: value + .task_results + .into_iter() + .map(|pair| (pair.task_id, pair.result_ids)) + .collect(), + } + } +} + +super::super::impl_convert!(req Response : v3::tasks::GetResultIdsResponse); diff --git a/packages/rust/armonik/src/objects/tasks/list.rs b/packages/rust/armonik/src/objects/tasks/list.rs new file mode 100644 index 000000000..64cc0411d --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/list.rs @@ -0,0 +1,80 @@ +use crate::api::v3; + +use super::{filter, Sort, Summary}; + +/// Request to list tasks. +/// +/// Use pagination, filtering and sorting. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Request { + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The filters. + pub filters: filter::Or, + /// The sort. + /// + /// Must be set for every request. + pub sort: Sort, + /// Request error message in case of error in task. + pub with_errors: bool, +} + +impl Default for Request { + fn default() -> Self { + Self { + page: 0, + page_size: 100, + filters: Default::default(), + sort: Default::default(), + with_errors: false, + } + } +} + +super::super::impl_convert!( + struct Request = v3::tasks::ListTasksRequest { + page, + page_size, + filters = option filters, + sort = option sort, + with_errors, + } +); + +/// Response to list tasks. +/// +/// Use pagination, filtering and sorting from the request. +/// Retunr a list of tasks summary. +#[derive(Debug, Clone)] +pub struct Response { + /// The list of tasks summary. + pub tasks: Vec, + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The total number of tasks. + pub total: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + tasks: Vec::new(), + page: 0, + page_size: 100, + total: 0, + } + } +} + +super::super::impl_convert!( + struct Response = v3::tasks::ListTasksResponse { + list tasks, + page, + page_size, + total, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/list_detailed.rs b/packages/rust/armonik/src/objects/tasks/list_detailed.rs new file mode 100644 index 000000000..3935ef9a7 --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/list_detailed.rs @@ -0,0 +1,80 @@ +use crate::api::v3; + +use super::{filter, Raw, Sort}; + +/// Request to list tasks. +/// +/// Use pagination, filtering and sorting. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Request { + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The filters. + pub filters: filter::Or, + /// The sort. + /// + /// Must be set for every request. + pub sort: Sort, + /// Request error message in case of error in task. + pub with_errors: bool, +} + +impl Default for Request { + fn default() -> Self { + Self { + page: 0, + page_size: 100, + filters: Default::default(), + sort: Default::default(), + with_errors: false, + } + } +} + +super::super::impl_convert!( + struct Request = v3::tasks::ListTasksRequest { + page, + page_size, + filters = option filters, + sort = option sort, + with_errors, + } +); + +/// Response to list tasks. +/// +/// Use pagination, filtering and sorting from the request. +/// Return a list of detailed tasks. +#[derive(Debug, Clone)] +pub struct Response { + /// The list of detailed tasks. + pub tasks: Vec, + /// The page number. Start at 0. + pub page: i32, + /// The page size. + pub page_size: i32, + /// The total number of tasks. + pub total: i32, +} + +impl Default for Response { + fn default() -> Self { + Self { + tasks: Vec::new(), + page: 0, + page_size: 100, + total: 0, + } + } +} + +super::super::impl_convert!( + struct Response = v3::tasks::ListTasksDetailedResponse { + list tasks, + page, + page_size, + total, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/mod.rs b/packages/rust/armonik/src/objects/tasks/mod.rs new file mode 100644 index 000000000..4f3eab07d --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/mod.rs @@ -0,0 +1,29 @@ +//! ArmoniK objects related to the Tasks service + +pub mod cancel; +pub mod count_status; +pub mod filter; +pub mod get; +pub mod get_result_ids; +pub mod list; +pub mod list_detailed; +pub mod submit; + +mod field; +mod output; +mod raw; +mod summary; + +pub use field::Field; +pub use output::Output; +pub use raw::{Raw, Raw as Task}; +pub use summary::Summary; + +pub type Sort = super::Sort; + +super::super::impl_convert!( + struct Sort = crate::api::v3::tasks::list_tasks_request::Sort { + field = option field, + direction = enum direction, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/output.rs b/packages/rust/armonik/src/objects/tasks/output.rs new file mode 100644 index 000000000..8743be58e --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/output.rs @@ -0,0 +1,38 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +/// Represents the task output. +pub enum Output { + /// To know if a task have failed or succeed. + #[default] + Success, + /// The error message. Only set if task have failed. + Error(String), +} + +impl From for v3::tasks::task_detailed::Output { + fn from(value: Output) -> Self { + match value { + Output::Success => Self { + success: true, + ..Default::default() + }, + Output::Error(message) => Self { + error: message, + ..Default::default() + }, + } + } +} + +impl From for Output { + fn from(value: v3::tasks::task_detailed::Output) -> Self { + if value.success { + Self::Success + } else { + Self::Error(value.error) + } + } +} + +super::super::impl_convert!(req Output : v3::tasks::task_detailed::Output); diff --git a/packages/rust/armonik/src/objects/tasks/raw.rs b/packages/rust/armonik/src/objects/tasks/raw.rs new file mode 100644 index 000000000..31df8b8e2 --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/raw.rs @@ -0,0 +1,98 @@ +use super::super::{TaskOptions, TaskStatus}; +use super::Output; + +use crate::api::v3; + +/// A summary task object. +/// +/// It contains only a subset of the fields from the underlying task object. +/// Used when a list of tasks are returned. +#[derive(Debug, Clone, Default)] +pub struct Raw { + /// The task ID. + pub task_id: String, + /// The session ID. A task have only one related session but a session have many tasks. + pub session_id: String, + /// The owner pod ID. + pub owner_pod_id: String, + /// The initial task ID. Set when a task is submitted independently of retries. + pub initial_task_id: String, + /// The parent task IDs. A tasks can be a child of another task. + pub parent_task_ids: Vec, + /// The data dependencies. A task have data dependencies. + pub data_dependencies: Vec, + /// The expected output IDs. A task have expected output IDs. + pub expected_output_ids: Vec, + /// The retry of IDs. When a task fail, retry will use these set of IDs. + pub retry_of_ids: Vec, + /// The task status. + pub status: TaskStatus, + /// The status message. + pub status_message: String, + /// The task options. + pub options: TaskOptions, + /// The task creation date + pub created_at: Option, + /// The task submission date. + pub submitted_at: Option, + /// When the task is received by the agent. + pub received_at: Option, + /// When the task is acquired by the agent. + pub acquired_at: Option, + /// Task data retrieval end date. + pub fetched_at: Option, + /// The task start date. + pub started_at: Option, + /// The end of task processing date. + pub processed_at: Option, + /// The task end date. Also used when task failed. + pub ended_at: Option, + /// The task duration. Between the creation date and the end date. + pub creation_to_end_duration: Option, + /// The task calculated duration. Between the start date and the end date. + pub processing_to_end_duration: Option, + /// The task calculated duration. Between the received date and the end date. + pub received_to_end_duration: Option, + /// The pod TTL (Time To Live). + pub pod_ttl: Option, + /// The task output. + pub output: Output, + /// The hostname of the container running the task. + pub pod_hostname: String, + /// The ID of the Result that is used as a payload for this task. + pub payload_id: String, + /// The ID of the Task that as submitted this task, empty if none. + pub created_by: String, +} + +super::super::impl_convert!( + struct Raw = v3::tasks::TaskDetailed { + task_id = id, + session_id, + owner_pod_id, + initial_task_id, + parent_task_ids, + data_dependencies, + expected_output_ids, + retry_of_ids, + status = enum status, + status_message, + options = option options, + created_at, + submitted_at, + received_at, + acquired_at, + fetched_at, + started_at, + processed_at, + ended_at, + creation_to_end_duration, + processing_to_end_duration, + received_to_end_duration, + pod_ttl, + output = option output, + pod_hostname, + payload_id, + created_by, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/submit.rs b/packages/rust/armonik/src/objects/tasks/submit.rs new file mode 100644 index 000000000..dadedeb1d --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/submit.rs @@ -0,0 +1,78 @@ +use super::super::TaskOptions; + +use crate::api::v3; + +/// Task creation requests. +#[derive(Debug, Clone, Default)] +pub struct RequestItem { + /// Unique ID of the results that will be produced by the task. Results should be created using ResultsService. + pub expected_output_keys: Vec, + /// Unique ID of the results that will be used as data dependencies. Results should be created using ResultsService. + pub data_dependencies: Vec, + /// Unique ID of the result that will be used as payload. Result should created using ResultsService. + pub payload_id: String, + /// Optional task options. + pub task_options: Option, +} + +super::super::impl_convert!( + struct RequestItem = v3::tasks::submit_tasks_request::TaskCreation { + expected_output_keys, + data_dependencies, + payload_id, + option task_options, + } +); + +/// Request to create tasks. +#[derive(Debug, Clone, Default)] +pub struct Request { + /// The session ID. + pub session_id: String, + /// The options for the tasks. Each task will have the same. Options are merged with the one from the session. + pub task_options: Option, + /// Task creation requests. + pub items: Vec, +} + +super::super::impl_convert!( + struct Request = v3::tasks::SubmitTasksRequest { + session_id, + option task_options, + list items = list task_creations, + } +); + +/// task infos if submission successful, else throw gRPC exception. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct ResponseItem { + /// The task ID. + pub task_id: String, + /// The expected output IDs. A task have expected output IDs. + pub expected_output_ids: Vec, + /// The data dependencies IDs (inputs). A task have data dependencies. + pub data_dependencies: Vec, + /// Unique ID of the result that will be used as payload. + /// Result should created using ResultsService. + pub payload_id: String, +} + +super::super::impl_convert!( + struct ResponseItem = v3::tasks::submit_tasks_response::TaskInfo { + task_id, + expected_output_ids, + data_dependencies, + payload_id, + } +); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + pub items: Vec, +} + +super::super::impl_convert!( + struct Response = v3::tasks::SubmitTasksResponse { + list items = list task_infos, + } +); diff --git a/packages/rust/armonik/src/objects/tasks/summary.rs b/packages/rust/armonik/src/objects/tasks/summary.rs new file mode 100644 index 000000000..c9a38ab81 --- /dev/null +++ b/packages/rust/armonik/src/objects/tasks/summary.rs @@ -0,0 +1,143 @@ +use super::super::{TaskOptions, TaskStatus}; +use super::Output; + +use crate::api::v3; + +/// A summary task object. +/// +/// It contains only a subset of the fields from the underlying task object. +/// Used when a list of tasks are returned. +#[derive(Debug, Clone, Default)] +pub struct Summary { + /// The task ID. + pub task_id: String, + /// The session ID. A task have only one related session but a session have many tasks. + pub session_id: String, + /// The owner pod ID. + pub owner_pod_id: String, + /// The initial task ID. Set when a task is submitted independently of retries. + pub initial_task_id: String, + /// Count the parent task IDs. A tasks can be a child of another task. + pub count_parent_task_ids: i64, + /// Count the data dependencies. A task have data dependencies. + pub count_data_dependencies: i64, + /// Count the expected output IDs. A task have expected output IDs. + pub count_expected_output_ids: i64, + /// Count the retry of IDs. When a task fail, retry will use these set of IDs. + pub count_retry_of_ids: i64, + /// The task status. + pub status: TaskStatus, + /// The status message. + pub status_message: String, + /// The task options. + pub options: TaskOptions, + /// The task creation date + pub created_at: Option, + /// The task submission date. + pub submitted_at: Option, + /// When the task is received by the agent. + pub received_at: Option, + /// When the task is acquired by the agent. + pub acquired_at: Option, + /// Task data retrieval end date. + pub fetched_at: Option, + /// The task start date. + pub started_at: Option, + /// The end of task processing date. + pub processed_at: Option, + /// The task end date. Also used when task failed. + pub ended_at: Option, + /// The task duration. Between the creation date and the end date. + pub creation_to_end_duration: Option, + /// The task calculated duration. Between the start date and the end date. + pub processing_to_end_duration: Option, + /// The task calculated duration. Between the received date and the end date. + pub received_to_end_duration: Option, + /// The pod TTL (Time To Live). + pub pod_ttl: Option, + /// The task output. + pub output: Output, + /// The hostname of the container running the task. + pub pod_hostname: String, + /// The ID of the Result that is used as a payload for this task. + pub payload_id: String, + /// The ID of the Task that as submitted this task, empty if none. + pub created_by: String, +} + +impl From for v3::tasks::TaskSummary { + fn from(value: Summary) -> Self { + Self { + id: value.task_id, + session_id: value.session_id, + owner_pod_id: value.owner_pod_id, + initial_task_id: value.initial_task_id, + count_parent_task_ids: value.count_parent_task_ids, + count_data_dependencies: value.count_data_dependencies, + count_expected_output_ids: value.count_expected_output_ids, + count_retry_of_ids: value.count_retry_of_ids, + status: value.status as i32, + status_message: value.status_message, + options: Some(value.options.into()), + created_at: value.created_at, + submitted_at: value.submitted_at, + received_at: value.received_at, + acquired_at: value.acquired_at, + fetched_at: value.fetched_at, + started_at: value.started_at, + processed_at: value.processed_at, + ended_at: value.ended_at, + creation_to_end_duration: value.creation_to_end_duration, + processing_to_end_duration: value.processing_to_end_duration, + received_to_end_duration: value.received_to_end_duration, + pod_ttl: value.pod_ttl, + error: match value.output { + Output::Success => Default::default(), + Output::Error(message) => message, + }, + pod_hostname: value.pod_hostname, + payload_id: value.payload_id, + created_by: value.created_by, + } + } +} + +impl From for Summary { + fn from(value: v3::tasks::TaskSummary) -> Self { + Self { + task_id: value.id, + session_id: value.session_id, + owner_pod_id: value.owner_pod_id, + initial_task_id: value.initial_task_id, + count_parent_task_ids: value.count_parent_task_ids, + count_data_dependencies: value.count_data_dependencies, + count_expected_output_ids: value.count_expected_output_ids, + count_retry_of_ids: value.count_retry_of_ids, + status: value.status.into(), + status_message: value.status_message, + options: value.options.map_or_else(Default::default, Into::into), + created_at: value.created_at, + submitted_at: value.submitted_at, + received_at: value.received_at, + acquired_at: value.acquired_at, + fetched_at: value.fetched_at, + started_at: value.started_at, + processed_at: value.processed_at, + ended_at: value.ended_at, + creation_to_end_duration: value.creation_to_end_duration, + processing_to_end_duration: value.processing_to_end_duration, + received_to_end_duration: value.received_to_end_duration, + pod_ttl: value.pod_ttl, + output: if value.error.is_empty() { + Output::Success + } else { + Output::Error(value.error) + }, + pod_hostname: value.pod_hostname, + payload_id: value.payload_id, + created_by: value.created_by, + } + } +} + +super::super::impl_convert!(req Summary : v3::tasks::TaskSummary); diff --git a/packages/rust/armonik/src/objects/versions/list.rs b/packages/rust/armonik/src/objects/versions/list.rs new file mode 100644 index 000000000..f7a8b8956 --- /dev/null +++ b/packages/rust/armonik/src/objects/versions/list.rs @@ -0,0 +1,25 @@ +use crate::api::v3; + +/// Request to list versions. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request {} + +super::super::impl_convert!( + struct Request = v3::versions::ListVersionsRequest {} +); + +/// Response to list versions. +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Response { + /// Version of ArmoniK.Core + pub core: String, + /// Version of ArmoniK.API + pub api: String, +} + +super::super::impl_convert!( + struct Response = v3::versions::ListVersionsResponse { + core, + api, + } +); diff --git a/packages/rust/armonik/src/objects/versions/mod.rs b/packages/rust/armonik/src/objects/versions/mod.rs new file mode 100644 index 000000000..cc63793d1 --- /dev/null +++ b/packages/rust/armonik/src/objects/versions/mod.rs @@ -0,0 +1,3 @@ +//! ArmoniK objects related to the Versions service + +pub mod list; diff --git a/packages/rust/armonik/src/objects/worker/health_check.rs b/packages/rust/armonik/src/objects/worker/health_check.rs new file mode 100644 index 000000000..8e73f4473 --- /dev/null +++ b/packages/rust/armonik/src/objects/worker/health_check.rs @@ -0,0 +1,44 @@ +use crate::api::v3; + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Request {} + +super::super::impl_convert!( + struct Request = v3::Empty { + } +); + +#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Response { + #[default] + Unknown = 0, + Serving = 1, + NotServing = 2, +} + +impl From for Response { + fn from(value: i32) -> Self { + match value { + 0 => Self::Unknown, + 1 => Self::Serving, + 2 => Self::NotServing, + _ => Self::Unknown, + } + } +} + +impl From for v3::worker::HealthCheckReply { + fn from(value: Response) -> Self { + Self { + status: value as i32, + } + } +} + +impl From for Response { + fn from(value: v3::worker::HealthCheckReply) -> Self { + value.status.into() + } +} + +super::super::impl_convert!(req Response : v3::worker::HealthCheckReply); diff --git a/packages/rust/armonik/src/objects/worker/mod.rs b/packages/rust/armonik/src/objects/worker/mod.rs new file mode 100644 index 000000000..a771d79c9 --- /dev/null +++ b/packages/rust/armonik/src/objects/worker/mod.rs @@ -0,0 +1,4 @@ +//! ArmoniK objects related to the Worker service + +pub mod health_check; +pub mod process; diff --git a/packages/rust/armonik/src/objects/worker/process.rs b/packages/rust/armonik/src/objects/worker/process.rs new file mode 100644 index 000000000..68581a727 --- /dev/null +++ b/packages/rust/armonik/src/objects/worker/process.rs @@ -0,0 +1,39 @@ +use super::super::{Configuration, Output, TaskOptions}; + +use crate::api::v3; + +pub struct Request { + pub communication_token: String, + pub session_id: String, + pub task_id: String, + pub task_options: TaskOptions, + pub expected_output_keys: Vec, + pub payload_id: String, + pub data_dependencies: Vec, + pub data_folder: String, + pub configuration: Configuration, +} + +super::super::impl_convert!( + struct Request = v3::worker::ProcessRequest { + communication_token, + session_id, + task_id, + task_options = option task_options, + list expected_output_keys, + payload_id, + list data_dependencies, + data_folder, + configuration = option configuration, + } +); + +pub struct Response { + pub output: Output, +} + +super::super::impl_convert!( + struct Response = v3::worker::ProcessReply { + output = option output, + } +); diff --git a/packages/rust/armonik/src/utils.rs b/packages/rust/armonik/src/utils.rs new file mode 100644 index 000000000..3ecaf2ea5 --- /dev/null +++ b/packages/rust/armonik/src/utils.rs @@ -0,0 +1,282 @@ +use snafu::Snafu; + +pub(crate) trait IntoCollection { + fn into_collect(self) -> T; +} + +impl IntoCollection for TX +where + X: Into, + TX: IntoIterator, + TY: IntoIterator, + TY: std::iter::FromIterator, +{ + fn into_collect(self) -> TY { + self.into_iter().map(Into::into).collect() + } +} + +pub(crate) fn read_env(name: &str) -> Result { + match std::env::var(name) { + Ok(value) => Ok(value), + Err(std::env::VarError::NotPresent) => Ok(String::new()), + Err(std::env::VarError::NotUnicode(value)) => NotUnicodeSnafu { + name: name.to_owned(), + value, + } + .fail(), + } +} + +pub(crate) fn read_env_bool(name: &str) -> Result { + let value = read_env(name)?; + match value.as_ref() { + "0" | "false" | "no" | "disable" | "disallow" | "forbid" | "" => Ok(false), + "1" | "true" | "yes" | "enable" | "allow" | "authorize" => Ok(true), + _ => NotBooleanSnafu { + name: name.to_owned(), + value, + } + .fail(), + } +} + +#[derive(Debug, Snafu)] +#[non_exhaustive] +pub enum ReadEnvError { + #[snafu(display( + "Environment variable `{name}={value:?}` is not a valid unicode string [{location}]" + ))] + #[non_exhaustive] + NotUnicode { + name: String, + value: std::ffi::OsString, + backtrace: snafu::Backtrace, + #[snafu(implicit)] + location: snafu::Location, + }, + #[snafu(display("Environment variable `{name}={value}` is not a valid boolean [{location}]"))] + #[non_exhaustive] + NotBoolean { + name: String, + value: String, + backtrace: snafu::Backtrace, + #[snafu(implicit)] + location: snafu::Location, + }, +} + +#[derive(Debug)] +pub(crate) struct InsecureCertVerifier; + +impl rustls::client::danger::ServerCertVerifier for InsecureCertVerifier { + fn verify_server_cert( + &self, + _end_entity: &rustls::pki_types::CertificateDer<'_>, + _intermediates: &[rustls::pki_types::CertificateDer<'_>], + _server_name: &rustls::pki_types::ServerName<'_>, + _ocsp_response: &[u8], + _now: rustls::pki_types::UnixTime, + ) -> Result { + Ok(rustls::client::danger::ServerCertVerified::assertion()) + } + + fn verify_tls12_signature( + &self, + _message: &[u8], + _cert: &rustls::pki_types::CertificateDer<'_>, + _dss: &rustls::DigitallySignedStruct, + ) -> Result { + Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) + } + + fn verify_tls13_signature( + &self, + _message: &[u8], + _cert: &rustls::pki_types::CertificateDer<'_>, + _dss: &rustls::DigitallySignedStruct, + ) -> Result { + Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) + } + + fn supported_verify_schemes(&self) -> Vec { + vec![ + rustls::SignatureScheme::RSA_PKCS1_SHA1, + rustls::SignatureScheme::ECDSA_SHA1_Legacy, + rustls::SignatureScheme::RSA_PKCS1_SHA256, + rustls::SignatureScheme::ECDSA_NISTP256_SHA256, + rustls::SignatureScheme::RSA_PKCS1_SHA384, + rustls::SignatureScheme::ECDSA_NISTP384_SHA384, + rustls::SignatureScheme::RSA_PKCS1_SHA512, + rustls::SignatureScheme::ECDSA_NISTP521_SHA512, + rustls::SignatureScheme::RSA_PSS_SHA256, + rustls::SignatureScheme::RSA_PSS_SHA384, + rustls::SignatureScheme::RSA_PSS_SHA512, + rustls::SignatureScheme::ED25519, + rustls::SignatureScheme::ED448, + ] + } +} + +struct Foo {} +struct Bar(Vec); + +impl_vec_wrapper!(Bar(Foo)); + +/// Implement all traits and functions to define a wrapper around a [`Vec`] +/// +/// # Examples +/// +/// ```ignore +/// struct Foo(); +/// struct Bar(Vec); +/// +/// crate::utils::impl_vec_wrapper!(Bar(Foo)); +/// ``` +/// +/// ```ignore +/// struct Foo(); +/// struct Bar{ bar: Vec}; +/// +/// crate::utils::impl_vec_wrapper!(Bar{bar: Foo}); +/// ``` +/// +/// # Examples without FromIterator +/// +/// ```ignore +/// struct Foo(); +/// struct Bar(Vec, i64); +/// +/// crate::utils::impl_vec_wrapper!(Bar[0: Foo]); +/// ``` +/// +/// ```ignore +/// struct Foo(); +/// struct Bar{ bar: Vec, dummy: i64}; +/// +/// crate::utils::impl_vec_wrapper!(Bar[bar: Foo]); +/// ``` +macro_rules! impl_vec_wrapper { + ($wrapper:ident{$inner:ident: $inner_type:ty}) => { + crate::utils::impl_vec_wrapper!($wrapper[$inner: $inner_type]); + + impl FromIterator<$inner_type> for $wrapper { + fn from_iter>(iter: T) -> Self { + Self{$inner: iter.into_iter().collect()} + } + } + }; + ($wrapper:ident($inner_type:ty)) => { + crate::utils::impl_vec_wrapper!($wrapper[0: $inner_type]); + + impl FromIterator<$inner_type> for $wrapper { + fn from_iter>(iter: T) -> Self { + Self(iter.into_iter().collect()) + } + } + }; + ($wrapper:ident[$inner:tt: $inner_type:ty]) => { + impl $wrapper { + pub fn iter(&self) -> std::slice::Iter<'_, $inner_type> { + self.$inner.iter() + } + pub fn iter_mut(&mut self) -> std::slice::IterMut<'_, $inner_type> { + self.$inner.iter_mut() + } + } + + impl IntoIterator for $wrapper { + type Item = $inner_type; + + type IntoIter = std::vec::IntoIter<$inner_type>; + + fn into_iter(self) -> Self::IntoIter { + self.$inner.into_iter() + } + } + + impl<'a> IntoIterator for &'a $wrapper { + type Item = &'a $inner_type; + + type IntoIter = std::slice::Iter<'a, $inner_type>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } + } + + impl<'a> IntoIterator for &'a mut $wrapper { + type Item = &'a mut $inner_type; + + type IntoIter = std::slice::IterMut<'a, $inner_type>; + + fn into_iter(self) -> Self::IntoIter { + self.iter_mut() + } + } + + impl AsRef<[$inner_type]> for $wrapper { + fn as_ref(&self) -> &[$inner_type] { + &self.$inner + } + } + + impl AsMut<[$inner_type]> for $wrapper { + fn as_mut(&mut self) -> &mut [$inner_type] { + &mut self.$inner + } + } + + impl AsRef> for $wrapper { + fn as_ref(&self) -> &Vec<$inner_type> { + &self.$inner + } + } + + impl AsMut> for $wrapper { + fn as_mut(&mut self) -> &mut Vec<$inner_type> { + &mut self.$inner + } + } + + impl std::borrow::Borrow<[$inner_type]> for $wrapper { + fn borrow(&self) -> &[$inner_type] { + &self.$inner + } + } + + impl std::borrow::BorrowMut<[$inner_type]> for $wrapper { + fn borrow_mut(&mut self) -> &mut [$inner_type] { + &mut self.$inner + } + } + + impl std::borrow::Borrow> for $wrapper { + fn borrow(&self) -> &Vec<$inner_type> { + &self.$inner + } + } + + impl std::borrow::BorrowMut> for $wrapper { + fn borrow_mut(&mut self) -> &mut Vec<$inner_type> { + &mut self.$inner + } + } + + impl std::ops::Deref for $wrapper { + type Target = Vec<$inner_type>; + + fn deref(&self) -> &Self::Target { + &self.$inner + } + } + + impl std::ops::DerefMut for $wrapper { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.$inner + } + } + }; +} + +pub(crate) use impl_vec_wrapper; diff --git a/packages/web/package.json b/packages/web/package.json index a82a54414..4c6275fcc 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,6 +1,6 @@ { "name": "@aneoconsultingfr/armonik.api", - "version": "3.19.0", + "version": "3.22.0", "packageManager": "pnpm@9.1.4", "description": "gRPC API to interact with ArmoniK built for the web", "license": "Apache-2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14fb302f7..a623af03c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,63 +9,60 @@ importers: .: devDependencies: '@antfu/eslint-config': - specifier: ^2.15.0 - version: 2.15.0(@vue/compiler-sfc@3.4.23)(eslint@9.0.0)(typescript@5.2.2) + specifier: ^2.27.3 + version: 2.27.3(@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(@vue/compiler-sfc@3.4.23)(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/eslint-plugin': - specifier: ^7.7.0 - version: 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2) + specifier: ^7.18.0 + version: 7.18.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) consola: specifier: ^3.2.3 version: 3.2.3 eslint: - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.9.1 + version: 9.9.1(jiti@1.21.6) eslint-config-standard-with-typescript: specifier: ^43.0.1 - version: 43.0.1(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0))(eslint-plugin-n@17.2.1(eslint@9.0.0))(eslint-plugin-promise@6.1.1(eslint@9.0.0))(eslint@9.0.0)(typescript@5.2.2) + version: 43.0.1(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-n@17.10.2(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-promise@6.6.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) eslint-plugin-import: - specifier: ^2.28.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0) + specifier: ^2.30.0 + version: 2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-n: - specifier: ^17.2.1 - version: 17.2.1(eslint@9.0.0) + specifier: ^17.10.2 + version: 17.10.2(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-promise: - specifier: ^6.1.1 - version: 6.1.1(eslint@9.0.0) + specifier: ^6.6.0 + version: 6.6.0(eslint@9.9.1(jiti@1.21.6)) glob: - specifier: ^10.3.3 - version: 10.3.3 + specifier: ^10.4.5 + version: 10.4.5 jiti: - specifier: ^1.19.3 - version: 1.19.3 + specifier: ^1.21.6 + version: 1.21.6 pathe: - specifier: ^1.1.1 - version: 1.1.1 + specifier: ^1.1.2 + version: 1.1.2 tslib: - specifier: ^2.6.2 - version: 2.6.2 + specifier: ^2.7.0 + version: 2.7.0 typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.5.4 + version: 5.5.4 zx: - specifier: ^8.0.1 - version: 8.0.1 + specifier: ^8.1.5 + version: 8.1.5 packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@antfu/eslint-config@2.15.0': - resolution: {integrity: sha512-qoqw+0N8bqz0vBIigGJamaIf1LdzXcmCDuleygJAF3EtACLieKyIMvpOdc2TU9AnuPbMBFCkN40340UWRChELw==} + '@antfu/eslint-config@2.27.3': + resolution: {integrity: sha512-Y2Vh/LvPAaYoyLwCiZHJ7p76LEIGg6debeUA4Qs+KOrlGuXLQWRmdZlC6SB33UDNzXqkFeaXAlEcYUqvYoiMKA==} hasBin: true peerDependencies: '@eslint-react/eslint-plugin': ^1.5.8 + '@prettier/plugin-xml': ^3.4.1 '@unocss/eslint-plugin': '>=0.50.0' - astro-eslint-parser: ^0.16.3 + astro-eslint-parser: ^1.0.2 eslint: '>=8.40.0' - eslint-plugin-astro: ^0.31.4 + eslint-plugin-astro: ^1.2.0 eslint-plugin-format: '>=0.1.0' eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-react-refresh: ^0.4.4 @@ -73,10 +70,12 @@ packages: eslint-plugin-svelte: '>=2.35.1' prettier-plugin-astro: ^0.13.0 prettier-plugin-slidev: ^1.0.5 - svelte-eslint-parser: ^0.33.1 + svelte-eslint-parser: '>=0.37.0' peerDependenciesMeta: '@eslint-react/eslint-plugin': optional: true + '@prettier/plugin-xml': + optional: true '@unocss/eslint-plugin': optional: true astro-eslint-parser: @@ -100,32 +99,35 @@ packages: svelte-eslint-parser: optional: true - '@antfu/install-pkg@0.3.2': - resolution: {integrity: sha512-FFYqME8+UHlPnRlX/vn+8cTD4Wo/nG/lzRxpABs3XANBmdJdNImVz3QvjNAE/W3PSCNbG387FOz8o5WelnWOlg==} + '@antfu/install-pkg@0.4.1': + resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} - '@babel/code-frame@7.22.10': - resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.22.10': - resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.4': - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@clack/core@0.3.4': @@ -136,49 +138,60 @@ packages: bundledDependencies: - is-unicode-supported - '@es-joy/jsdoccomment@0.42.0': - resolution: {integrity: sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==} + '@es-joy/jsdoccomment@0.43.1': + resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==} + engines: {node: '>=16'} + + '@es-joy/jsdoccomment@0.48.0': + resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} engines: {node: '>=16'} + '@eslint-community/eslint-plugin-eslint-comments@4.4.0': + resolution: {integrity: sha512-yljsWl5Qv3IkIRmJ38h3NrHXFCm4EUl55M8doGTF6hvzvFF8kRpextgSrg2dwHev9lzBZyafCr9RelGIyQm6fw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.0.2': - resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.0.0': - resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} + '@eslint/js@9.9.1': + resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@humanwhocodes/config-array@0.12.3': - resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} - engines: {node: '>=10.10.0'} + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -196,37 +209,24 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@stylistic/eslint-plugin-js@1.7.2': - resolution: {integrity: sha512-ZYX7C5p7zlHbACwFLU+lISVh6tdcRP/++PWegh2Sy0UgMT5kU0XkPa2tKWEtJYzZmPhJxu9LxbnWcnE/tTwSDQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: '>=8.40.0' + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@stylistic/eslint-plugin-jsx@1.7.2': - resolution: {integrity: sha512-lNZR5PR0HLJPs+kY0y8fy6KroKlYqA5PwsYWpVYWzqZWiL5jgAeUo4s9yLFYjJjzildJ5MsTVMy/xP81Qz6GXg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: '>=8.40.0' + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@stylistic/eslint-plugin-plus@1.7.2': - resolution: {integrity: sha512-luUfRVbBVtt0+/FNt8/76BANJEzb/nHWasHD7UUjyMrch2U9xUKpObrkTCzqBuisKek+uFupwGjqXqDP07+fQw==} - peerDependencies: - eslint: '*' - - '@stylistic/eslint-plugin-ts@1.7.2': - resolution: {integrity: sha512-szX89YPocwCe4T0eT3alj7MwEzDHt5+B+kb/vQfSSLIjI9CGgoWrgj50zU8PtaDctTh4ZieFBzU/lRmkSUo0RQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@stylistic/eslint-plugin@2.7.2': + resolution: {integrity: sha512-3DVLU5HEuk2pQoBmXJlzvrxbKNpu2mJ0SRqz5O/CJjyNCr12ZiPcYMEtuArTyPOk5i7bsAU44nywh1rGfe3gKQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' - '@stylistic/eslint-plugin@1.7.2': - resolution: {integrity: sha512-TesaPR4AOCeD4unwu9gZCdTe8SsUpykriICuwXV8GFBgESuVbfVp+S8g6xTWe9ntVR803bNMtnr2UhxHW0iFqg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: '>=8.40.0' + '@types/eslint@8.56.12': + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} - '@types/eslint@8.56.9': - resolution: {integrity: sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -240,26 +240,23 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/jsonfile@6.1.1': - resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} - - '@types/mdast@3.0.12': - resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - '@types/node@20.12.7': - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - '@types/normalize-package-data@2.4.1': - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + '@types/node@22.5.2': + resolution: {integrity: sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/unist@2.0.7': - resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@typescript-eslint/eslint-plugin@7.7.0': - resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -269,6 +266,17 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.4.0': + resolution: {integrity: sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -279,11 +287,11 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.7.0': - resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.4.0': + resolution: {integrity: sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: @@ -293,12 +301,16 @@ packages: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@7.7.0': - resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.7.0': - resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + '@typescript-eslint/scope-manager@8.4.0': + resolution: {integrity: sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -307,14 +319,27 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.4.0': + resolution: {integrity: sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@7.7.0': - resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.4.0': + resolution: {integrity: sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -324,8 +349,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.7.0': - resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -333,26 +358,54 @@ packages: typescript: optional: true - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/typescript-estree@8.4.0': + resolution: {integrity: sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/utils@7.7.0': - resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 + '@typescript-eslint/utils@8.4.0': + resolution: {integrity: sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@7.7.0': - resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.4.0': + resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitest/eslint-plugin@1.1.0': + resolution: {integrity: sha512-Ur80Y27Wbw8gFHJ3cv6vypcjXmrx6QHfw+q435h6Q2L+tf+h4Xf5pJTCL4YU/Jps9EVeggQxS85OcUZU7sdXRw==} + peerDependencies: + '@typescript-eslint/utils': '>= 8.0' + eslint: '>= 8.57.0' + typescript: '>= 5.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/utils': + optional: true + typescript: + optional: true + vitest: + optional: true + '@vue/compiler-core@3.4.23': resolution: {integrity: sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==} @@ -373,8 +426,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -452,12 +505,12 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -473,8 +526,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001611: - resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==} + caniuse-lite@1.0.30001655: + resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -532,8 +585,8 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - core-js-compat@3.37.0: - resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -564,8 +617,8 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -599,8 +652,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.741: - resolution: {integrity: sha512-AyTBZqDoS7/mvQK22gOQpjxbeV8iPeUBTvYlEh/1S9dKAHgQdxuF49g9rLbj0cRKtqH8PzLJzqT3nAdl+qoZTA==} + electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -608,8 +661,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -631,6 +684,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -646,8 +702,8 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: @@ -658,14 +714,14 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-compat-utils@0.5.0: - resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' - eslint-config-flat-gitignore@0.1.5: - resolution: {integrity: sha512-hEZLwuZjDBGDERA49c2q7vxc8sCGv8EdBp6PQYzGOMcHIgrfG9YOM6s/4jx24zhD+wnK9AI8mgN5RxSss5nClQ==} + eslint-config-flat-gitignore@0.1.8: + resolution: {integrity: sha512-OEUbS2wzzYtUfshjOqzFo4Bl4lHykXUdM08TCnYNl7ki+niW4Q1R0j0FDFDr0vjVsI5ZFOz5LvluxOP+Ew+dYw==} eslint-config-standard-with-typescript@43.0.1: resolution: {integrity: sha512-WfZ986+qzIzX6dcr4yGUyVb/l9N3Z8wPXCc5z/70fljs3UbWhhV+WxrfgsqMToRzuuyX9MqZ974pq2UPhDTOcA==} @@ -687,8 +743,8 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 - eslint-flat-config-utils@0.2.3: - resolution: {integrity: sha512-tfrMNXZfuN4q7sFi1Cr//BN3qdI7c8fLJhbshlp8l9PZIqZ7eVeeyd2Regtu/P9kjOlv18lRlBALzsZaF7ByUg==} + eslint-flat-config-utils@0.3.1: + resolution: {integrity: sha512-eFT3EaoJN1hlN97xw4FIEX//h0TiFUobgl2l5uLkIwhVN9ahGq95Pbs+i1/B5UACA78LO3rco3JzuvxLdTUOPA==} eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -698,8 +754,8 @@ packages: peerDependencies: eslint: '*' - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + eslint-module-utils@2.9.0: + resolution: {integrity: sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -719,31 +775,30 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-antfu@2.1.2: - resolution: {integrity: sha512-s7ZTOM3uq0iqpp6gF0UEotnvup7f2PHBUftCytLZX0+6C9j9KadKZQh6bVVngAyFgsmeD9+gcBopOYLClb2oDg==} + eslint-plugin-antfu@2.3.6: + resolution: {integrity: sha512-31VwbU1Yd4BFNUUPQEazKyP79f3c+ohJtq5iZIuw38JjkRQdQAcF/31Kjr0DOKZXVDkeeNPrttKidrr3xhnhOA==} peerDependencies: eslint: '*' - eslint-plugin-es-x@7.6.0: - resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-plugin-command@0.2.3: + resolution: {integrity: sha512-1bBYNfjZg60N2ZpLV5ATYSYyueIJ+zl5yKrTs0UFDdnyu07dNSZ7Xplnc+Wb6SXTdc1sIaoIrnuyhvztcltX6A==} peerDependencies: - eslint: '>=8' + eslint: '*' - eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=4.19.1' + eslint: '>=8' - eslint-plugin-import-x@0.5.0: - resolution: {integrity: sha512-C7R8Z4IzxmsoOPMtSzwuOBW5FH6iRlxHR6iTks+MzVlrk3r3TUxokkWTx3ypdj9nGOEP+CG/5e6ebZzHbxgbbQ==} - engines: {node: '>=16'} + eslint-plugin-import-x@4.1.1: + resolution: {integrity: sha512-dBEM8fACIFNt4H7GoOaRmnH6evJW6JSTJTYYgmRd3vI4geBTjgDM/JyUDKUwIw0HDSyI+u7Vs3vFRXUo/BOAtA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 || ^9.0.0-0 + eslint: ^8.57.0 || ^9.0.0 - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -752,41 +807,42 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsdoc@48.2.3: - resolution: {integrity: sha512-r9DMAmFs66VNvNqRLLjHejdnJtILrt3xGi+Qx0op0oRfFGVpOR1Hb3BC++MacseHx93d8SKYPhyrC9BS7Os2QA==} + eslint-plugin-jsdoc@50.2.2: + resolution: {integrity: sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsonc@2.15.1: - resolution: {integrity: sha512-PVFrqIJa8BbM/e828RSn0SwB/Z5ye+2LDuy2XqG6AymNgPsfApRRcznsbxP7VrjdLEU4Nb+g9n/d6opyp0jp9A==} + eslint-plugin-jsonc@2.16.0: + resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' - eslint-plugin-markdown@4.0.1: - resolution: {integrity: sha512-5/MnGvYU0i8MbHH5cg8S+Vl3DL+bqRNYshk1xUO86DilNBaxtTkhH+5FD0/yO03AmlI6+lfNFdk2yOw72EPzpA==} + eslint-plugin-markdown@5.1.0: + resolution: {integrity: sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8' - eslint-plugin-n@17.2.1: - resolution: {integrity: sha512-uW1+df2bo06kR7ix6nB614RUlvjRPrYxlaX832O6e1MCJp4V7YozEdvMgCYuvn4ltnjPu1FVYhQ2KRrmTNoJfg==} + eslint-plugin-n@17.10.2: + resolution: {integrity: sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' - eslint-plugin-no-only-tests@3.1.0: - resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + eslint-plugin-no-only-tests@3.3.0: + resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - eslint-plugin-perfectionist@2.9.0: - resolution: {integrity: sha512-ipFtDrqtF99qVVo+FE1fo6aHyLLp7hg6PNGfzY5KxQjcl0XCbyEFvjtR1NfkHDTN9rdFeEDxg59LLOv3VOAHAw==} + eslint-plugin-perfectionist@3.3.0: + resolution: {integrity: sha512-sGgShkEqDBqIZ3WlenGHwLe1cl3vHKTfeh9b1XXAamaxSC7AY4Os0jdNCXnGJW4l0TlpismT5t2r7CXY7sfKlw==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - astro-eslint-parser: ^0.16.0 + astro-eslint-parser: ^1.0.2 eslint: '>=8.0.0' svelte: '>=3.0.0' - svelte-eslint-parser: ^0.33.0 + svelte-eslint-parser: ^0.41.0 vue-eslint-parser: '>=9.0.0' peerDependenciesMeta: astro-eslint-parser: @@ -798,49 +854,41 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-promise@6.1.1: - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + eslint-plugin-promise@6.6.0: + resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-regexp@2.6.0: + resolution: {integrity: sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==} + engines: {node: ^18 || >=20} + peerDependencies: + eslint: '>=8.44.0' - eslint-plugin-toml@0.11.0: - resolution: {integrity: sha512-sau+YvPU4fWTjB+qtBt3n8WS87aoDCs+BVbSUAemGaIsRNbvR9uEk+Tt892iLHTGvp/DPWYoCX4/8DoyAbB+sQ==} + eslint-plugin-toml@0.11.1: + resolution: {integrity: sha512-Y1WuMSzfZpeMIrmlP1nUh3kT8p96mThIq4NnHrYUhg10IKQgGfBZjAWnrg9fBqguiX4iFps/x/3Hb5TxBisfdw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' - eslint-plugin-unicorn@52.0.0: - resolution: {integrity: sha512-1Yzm7/m+0R4djH0tjDjfVei/ju2w3AzUGjG6q8JnuNIL5xIwsflyCooW5sfBvQp2pMYQFSWWCFONsjCax1EHng==} - engines: {node: '>=16'} + eslint-plugin-unicorn@55.0.0: + resolution: {integrity: sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==} + engines: {node: '>=18.18'} peerDependencies: eslint: '>=8.56.0' - eslint-plugin-unused-imports@3.1.0: - resolution: {integrity: sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': 6 - 7 - eslint: '8' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - - eslint-plugin-vitest@0.5.3: - resolution: {integrity: sha512-D0iu6ppP6FmNSZP4cdhEXqyI+fuW6JwwWdECRrNymd1jiVgUmDgSvtryytonNxHQQWhGNmZM3V/qvpXttH1rRQ==} - engines: {node: ^18.0.0 || >= 20.0.0} + eslint-plugin-unused-imports@4.1.3: + resolution: {integrity: sha512-lqrNZIZjFMUr7P06eoKtQLwyVRibvG7N+LtfKtObYGizAAGrcqLkc3tDx+iAik2z7q0j/XI3ihjupIqxhFabFA==} peerDependencies: - '@typescript-eslint/eslint-plugin': '*' - eslint: ^8.57.0 || ^9.0.0 - vitest: '*' + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true - vitest: - optional: true - eslint-plugin-vue@9.25.0: - resolution: {integrity: sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==} + eslint-plugin-vue@9.28.0: + resolution: {integrity: sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -857,16 +905,12 @@ packages: '@vue/compiler-sfc': ^3.3.0 eslint: ^8.50.0 || ^9.0.0 - eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} - eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.1: - resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: @@ -877,21 +921,26 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.0.0: - resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} + eslint@9.9.1: + resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@10.0.1: - resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -909,10 +958,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -926,17 +971,21 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -945,10 +994,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -959,13 +1004,10 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -984,16 +1026,12 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.8.0: + resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1003,9 +1041,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.3: - resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true globals@13.24.0: @@ -1016,12 +1053,12 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.0.0: - resolution: {integrity: sha512-m/C/yR4mjO6pXDTm9/R/SpYTAIyaUB4EOzcaaMEl7mds7Mshct9GfejiJNQGjHHbdMPey13Kpu4TMbYi9ex1pw==} + globals@15.9.0: + resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} engines: {node: '>=18'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} globby@11.1.0: @@ -1063,10 +1100,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1074,12 +1107,8 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: @@ -1126,11 +1155,9 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} @@ -1182,10 +1209,6 @@ packages: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -1207,12 +1230,11 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@2.3.0: - resolution: {integrity: sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.19.3: - resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true js-tokens@4.0.0: @@ -1226,6 +1248,10 @@ packages: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} engines: {node: '>=12.0.0'} + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -1277,26 +1303,17 @@ packages: 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.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} - engines: {node: 14 || >=16.14} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} @@ -1304,9 +1321,6 @@ packages: mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - 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'} @@ -1314,18 +1328,18 @@ packages: micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + 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==} @@ -1333,19 +1347,19 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + 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@7.0.3: - resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -1364,21 +1378,18 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -1400,12 +1411,8 @@ packages: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} p-limit@2.3.0: @@ -1416,10 +1423,6 @@ packages: 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-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -1428,14 +1431,16 @@ packages: 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-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + package-manager-detector@0.2.0: + resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1447,6 +1452,10 @@ packages: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} + parse-imports@2.1.1: + resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} + engines: {node: '>= 18'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -1455,37 +1464,26 @@ packages: 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-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.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1495,8 +1493,8 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - pkg-types@1.1.0: - resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} + pkg-types@1.2.0: + resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -1506,20 +1504,20 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + postcss@8.4.44: + resolution: {integrity: sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} queue-microtask@1.2.3: @@ -1533,6 +1531,14 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} + refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -1556,8 +1562,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true reusify@1.0.4: @@ -1575,6 +1581,10 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -1583,8 +1593,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -1619,6 +1629,9 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -1626,8 +1639,8 @@ packages: spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + 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==} @@ -1635,8 +1648,11 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -1669,10 +1685,6 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -1697,6 +1709,10 @@ packages: resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} engines: {node: '>=12.20'} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -1704,6 +1720,9 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -1712,8 +1731,8 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toml-eslint-parser@0.9.3: - resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} + toml-eslint-parser@0.10.0: + resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} ts-api-utils@1.3.0: @@ -1725,8 +1744,8 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -1760,29 +1779,25 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -1796,8 +1811,8 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vue-eslint-parser@9.4.2: - resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -1814,6 +1829,10 @@ packages: engines: {node: '>= 8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1830,16 +1849,14 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml-eslint-parser@1.2.2: - resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.2.2: - resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} + hasBin: true yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -1853,136 +1870,146 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - - zx@8.0.1: - resolution: {integrity: sha512-Y+ITW1GQjADk7qgrbhnukMgoNsJmlyx53cUQ6/6NXU+BMBdCbTc6flTOHUctmzKvPjTmdwaddzJY/dbLie9sQg==} - engines: {node: '>= 16.0.0'} + zx@8.1.5: + resolution: {integrity: sha512-gvmiYPvDDEz2Gcc37x7pJkipTKcFIE18q9QlSI1p5qoPDtoSn3jmGuWD0eEb7HuxEH5aDD7N/RVgH8BqSxbKzA==} + engines: {node: '>= 12.17.0'} hasBin: true snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@antfu/eslint-config@2.15.0(@vue/compiler-sfc@3.4.23)(eslint@9.0.0)(typescript@5.2.2)': + '@antfu/eslint-config@2.27.3(@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(@vue/compiler-sfc@3.4.23)(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@antfu/install-pkg': 0.3.2 + '@antfu/install-pkg': 0.4.1 '@clack/prompts': 0.7.0 - '@stylistic/eslint-plugin': 1.7.2(eslint@9.0.0)(typescript@5.2.2) - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2) - '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 - eslint-config-flat-gitignore: 0.1.5 - eslint-flat-config-utils: 0.2.3 - eslint-merge-processors: 0.1.0(eslint@9.0.0) - eslint-plugin-antfu: 2.1.2(eslint@9.0.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.0.0) - eslint-plugin-import-x: 0.5.0(eslint@9.0.0)(typescript@5.2.2) - eslint-plugin-jsdoc: 48.2.3(eslint@9.0.0) - eslint-plugin-jsonc: 2.15.1(eslint@9.0.0) - eslint-plugin-markdown: 4.0.1(eslint@9.0.0) - eslint-plugin-n: 17.2.1(eslint@9.0.0) - eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-perfectionist: 2.9.0(eslint@9.0.0)(typescript@5.2.2)(vue-eslint-parser@9.4.2(eslint@9.0.0)) - eslint-plugin-toml: 0.11.0(eslint@9.0.0) - eslint-plugin-unicorn: 52.0.0(eslint@9.0.0) - eslint-plugin-unused-imports: 3.1.0(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0) - eslint-plugin-vitest: 0.5.3(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2) - eslint-plugin-vue: 9.25.0(eslint@9.0.0) - eslint-plugin-yml: 1.14.0(eslint@9.0.0) - eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.23)(eslint@9.0.0) - globals: 15.0.0 + '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@stylistic/eslint-plugin': 2.7.2(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@vitest/eslint-plugin': 1.1.0(@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) + eslint-config-flat-gitignore: 0.1.8 + eslint-flat-config-utils: 0.3.1 + eslint-merge-processors: 0.1.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-antfu: 2.3.6(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-command: 0.2.3(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-import-x: 4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint-plugin-jsdoc: 50.2.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-jsonc: 2.16.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-markdown: 5.1.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-n: 17.10.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-no-only-tests: 3.3.0 + eslint-plugin-perfectionist: 3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.1(jiti@1.21.6))) + eslint-plugin-regexp: 2.6.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-toml: 0.11.1(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-unicorn: 55.0.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-unused-imports: 4.1.3(@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-vue: 9.28.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-yml: 1.14.0(eslint@9.9.1(jiti@1.21.6)) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.23)(eslint@9.9.1(jiti@1.21.6)) + globals: 15.9.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 parse-gitignore: 2.0.0 - picocolors: 1.0.0 - toml-eslint-parser: 0.9.3 - vue-eslint-parser: 9.4.2(eslint@9.0.0) - yaml-eslint-parser: 1.2.2 + picocolors: 1.1.0 + toml-eslint-parser: 0.10.0 + vue-eslint-parser: 9.4.3(eslint@9.9.1(jiti@1.21.6)) + yaml-eslint-parser: 1.2.3 yargs: 17.7.2 transitivePeerDependencies: + - '@typescript-eslint/utils' - '@vue/compiler-sfc' - supports-color - svelte - typescript - vitest - '@antfu/install-pkg@0.3.2': + '@antfu/install-pkg@0.4.1': dependencies: - execa: 8.0.1 + package-manager-detector: 0.2.0 + tinyexec: 0.3.0 + + '@antfu/utils@0.7.10': {} - '@babel/code-frame@7.22.10': + '@babel/code-frame@7.24.7': dependencies: - '@babel/highlight': 7.22.10 - chalk: 2.4.2 + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 - '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.24.7': {} - '@babel/highlight@7.22.10': + '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.1.0 - '@babel/parser@7.24.4': + '@babel/parser@7.25.6': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.6 - '@babel/types@7.24.0': + '@babel/types@7.25.6': dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 '@clack/core@0.3.4': dependencies: - picocolors: 1.0.0 + picocolors: 1.1.0 sisteransi: 1.0.5 '@clack/prompts@0.7.0': dependencies: '@clack/core': 0.3.4 - picocolors: 1.0.0 + picocolors: 1.1.0 sisteransi: 1.0.5 - '@es-joy/jsdoccomment@0.42.0': + '@es-joy/jsdoccomment@0.43.1': dependencies: + '@types/eslint': 8.56.12 + '@types/estree': 1.0.5 + '@typescript-eslint/types': 7.18.0 comment-parser: 1.4.1 - esquery: 1.5.0 + esquery: 1.6.0 jsdoc-type-pratt-parser: 4.0.0 - '@eslint-community/eslint-utils@4.4.0(eslint@9.0.0)': + '@es-joy/jsdoccomment@0.48.0': + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 + + '@eslint-community/eslint-plugin-eslint-comments@4.4.0(eslint@9.9.1(jiti@1.21.6))': + dependencies: + escape-string-regexp: 4.0.0 + eslint: 9.9.1(jiti@1.21.6) + ignore: 5.3.2 + + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.1(jiti@1.21.6))': dependencies: - eslint: 9.0.0 + eslint: 9.9.1(jiti@1.21.6) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.11.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.18.0': dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 + '@eslint/object-schema': 2.1.4 + debug: 4.3.6 minimatch: 3.1.2 - strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.0.2': + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.4 - espree: 10.0.1 + debug: 4.3.6 + espree: 10.1.0 globals: 14.0.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1990,19 +2017,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.0.0': {} + '@eslint/js@9.9.1': {} - '@humanwhocodes/config-array@0.12.3': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/object-schema@2.1.4': {} '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.0': {} '@isaacs/cliui@8.0.2': dependencies: @@ -2013,7 +2034,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -2025,60 +2046,34 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 '@pkgjs/parseargs@0.11.0': optional: true - '@stylistic/eslint-plugin-js@1.7.2(eslint@9.0.0)': - dependencies: - '@types/eslint': 8.56.9 - acorn: 8.11.3 - escape-string-regexp: 4.0.0 - eslint: 9.0.0 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + '@pkgr/core@0.1.1': {} + + '@rtsao/scc@1.1.0': {} - '@stylistic/eslint-plugin-jsx@1.7.2(eslint@9.0.0)': + '@stylistic/eslint-plugin@2.7.2(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.0.0) - '@types/eslint': 8.56.9 - eslint: 9.0.0 + '@types/eslint': 9.6.1 + '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 estraverse: 5.3.0 picomatch: 4.0.2 - - '@stylistic/eslint-plugin-plus@1.7.2(eslint@9.0.0)(typescript@5.2.2)': - dependencies: - '@types/eslint': 8.56.9 - '@typescript-eslint/utils': 6.21.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 transitivePeerDependencies: - supports-color - typescript - '@stylistic/eslint-plugin-ts@1.7.2(eslint@9.0.0)(typescript@5.2.2)': + '@types/eslint@8.56.12': dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.0.0) - '@types/eslint': 8.56.9 - '@typescript-eslint/utils': 6.21.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@stylistic/eslint-plugin@1.7.2(eslint@9.0.0)(typescript@5.2.2)': - dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.0.0) - '@stylistic/eslint-plugin-jsx': 1.7.2(eslint@9.0.0) - '@stylistic/eslint-plugin-plus': 1.7.2(eslint@9.0.0)(typescript@5.2.2) - '@stylistic/eslint-plugin-ts': 1.7.2(eslint@9.0.0)(typescript@5.2.2) - '@types/eslint': 8.56.9 - eslint: 9.0.0 - transitivePeerDependencies: - - supports-color - - typescript + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 - '@types/eslint@8.56.9': + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -2087,77 +2082,91 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: - '@types/jsonfile': 6.1.1 - '@types/node': 20.12.7 + '@types/jsonfile': 6.1.4 + '@types/node': 22.5.2 optional: true '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/jsonfile@6.1.1': + '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.12.7 + '@types/node': 22.5.2 optional: true - '@types/mdast@3.0.12': + '@types/mdast@3.0.15': dependencies: - '@types/unist': 2.0.7 + '@types/unist': 2.0.11 - '@types/node@20.12.7': + '@types/node@22.5.2': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 optional: true - '@types/normalize-package-data@2.4.1': {} + '@types/normalize-package-data@2.4.4': {} - '@types/semver@7.5.8': {} + '@types/unist@2.0.11': {} - '@types/unist@2.0.7': {} + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 9.9.1(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color - '@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2)': + '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 7.7.0 - debug: 4.3.4 - eslint: 9.0.0 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.4.0 + '@typescript-eslint/type-utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.4.0 + eslint: 9.9.1(jiti@1.21.6) graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.2.2) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@9.0.0)(typescript@5.2.2)': + '@typescript-eslint/parser@6.21.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 9.0.0 + debug: 4.3.6 + eslint: 9.9.1(jiti@1.21.6) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2)': + '@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 7.7.0 - debug: 4.3.4 - eslint: 9.0.0 + '@typescript-eslint/scope-manager': 8.4.0 + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.4.0 + debug: 4.3.6 + eslint: 9.9.1(jiti@1.21.6) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -2166,81 +2175,109 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@7.7.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.7.0(eslint@9.0.0)(typescript@5.2.2)': + '@typescript-eslint/scope-manager@8.4.0': dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.2.2) - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - debug: 4.3.4 - eslint: 9.0.0 - ts-api-utils: 1.3.0(typescript@5.2.2) + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/visitor-keys': 8.4.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.6 + eslint: 9.9.1(jiti@1.21.6) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.6 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/types@7.7.0': {} + '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.2.2)': + '@typescript-eslint/types@8.4.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.2.2) + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.7.0(typescript@5.2.2)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 - debug: 4.3.4 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.2.2) + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@9.0.0)(typescript@5.2.2)': + '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) - eslint: 9.0.0 - semver: 7.6.0 + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/visitor-keys': 8.4.0 + debug: 4.3.6 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.18.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@7.7.0(eslint@9.0.0)(typescript@5.2.2)': + '@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.2.2) - eslint: 9.0.0 - semver: 7.6.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.4.0 + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript @@ -2250,14 +2287,26 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.7.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.4.0': + dependencies: + '@typescript-eslint/types': 8.4.0 + eslint-visitor-keys: 3.4.3 + + '@vitest/eslint-plugin@1.1.0(@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + eslint: 9.9.1(jiti@1.21.6) + optionalDependencies: + '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + typescript: 5.5.4 + '@vue/compiler-core@3.4.23': dependencies: - '@babel/parser': 7.24.4 + '@babel/parser': 7.25.6 '@vue/shared': 3.4.23 entities: 4.5.0 estree-walker: 2.0.2 @@ -2270,14 +2319,14 @@ snapshots: '@vue/compiler-sfc@3.4.23': dependencies: - '@babel/parser': 7.24.4 + '@babel/parser': 7.25.6 '@vue/compiler-core': 3.4.23 '@vue/compiler-dom': 3.4.23 '@vue/compiler-ssr': 3.4.23 '@vue/shared': 3.4.23 estree-walker: 2.0.2 - magic-string: 0.30.10 - postcss: 8.4.38 + magic-string: 0.30.11 + postcss: 8.4.44 source-map-js: 1.2.0 '@vue/compiler-ssr@3.4.23': @@ -2287,11 +2336,11 @@ snapshots: '@vue/shared@3.4.23': {} - acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.11.3 + acorn: 8.12.1 - acorn@8.11.3: {} + acorn@8.12.1: {} ajv@6.12.6: dependencies: @@ -2385,16 +2434,16 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 - browserslist@4.23.0: + browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001611 - electron-to-chromium: 1.4.741 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + caniuse-lite: 1.0.30001655 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) builtin-modules@3.3.0: {} @@ -2408,7 +2457,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001611: {} + caniuse-lite@1.0.30001655: {} chalk@2.4.2: dependencies: @@ -2459,9 +2508,9 @@ snapshots: consola@3.2.3: {} - core-js-compat@3.37.0: + core-js-compat@3.38.1: dependencies: - browserslist: 4.23.0 + browserslist: 4.23.3 cross-spawn@7.0.3: dependencies: @@ -2493,7 +2542,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: + debug@4.3.6: dependencies: ms: 2.1.2 @@ -2525,13 +2574,13 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.741: {} + electron-to-chromium@1.5.13: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - enhanced-resolve@5.16.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -2559,7 +2608,7 @@ snapshots: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -2575,7 +2624,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -2597,6 +2646,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.5.4: {} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -2617,114 +2668,118 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - escalade@3.1.2: {} + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.0(eslint@9.0.0): + eslint-compat-utils@0.5.1(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.0.0 - semver: 7.6.0 + eslint: 9.9.1(jiti@1.21.6) + semver: 7.6.3 - eslint-config-flat-gitignore@0.1.5: + eslint-config-flat-gitignore@0.1.8: dependencies: - find-up: 7.0.0 + find-up-simple: 1.0.0 parse-gitignore: 2.0.0 - eslint-config-standard-with-typescript@43.0.1(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0))(eslint-plugin-n@17.2.1(eslint@9.0.0))(eslint-plugin-promise@6.1.1(eslint@9.0.0))(eslint@9.0.0)(typescript@5.2.2): + eslint-config-standard-with-typescript@43.0.1(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-n@17.10.2(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-promise@6.6.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.21.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0))(eslint-plugin-n@17.2.1(eslint@9.0.0))(eslint-plugin-promise@6.1.1(eslint@9.0.0))(eslint@9.0.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0) - eslint-plugin-n: 17.2.1(eslint@9.0.0) - eslint-plugin-promise: 6.1.1(eslint@9.0.0) - typescript: 5.2.2 + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-n@17.10.2(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-promise@6.6.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-n: 17.10.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-promise: 6.6.0(eslint@9.9.1(jiti@1.21.6)) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0))(eslint-plugin-n@17.2.1(eslint@9.0.0))(eslint-plugin-promise@6.1.1(eslint@9.0.0))(eslint@9.0.0): + eslint-config-standard@17.1.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-n@17.10.2(eslint@9.9.1(jiti@1.21.6)))(eslint-plugin-promise@6.6.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.0.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0) - eslint-plugin-n: 17.2.1(eslint@9.0.0) - eslint-plugin-promise: 6.1.1(eslint@9.0.0) + eslint: 9.9.1(jiti@1.21.6) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-n: 17.10.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-promise: 6.6.0(eslint@9.9.1(jiti@1.21.6)) - eslint-flat-config-utils@0.2.3: + eslint-flat-config-utils@0.3.1: dependencies: - '@types/eslint': 8.56.9 + '@types/eslint': 9.6.1 pathe: 1.1.2 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.4 + is-core-module: 2.15.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-merge-processors@0.1.0(eslint@9.0.0): + eslint-merge-processors@0.1.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.0.0 + eslint: 9.9.1(jiti@1.21.6) - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@9.0.0): + eslint-module-utils@2.9.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 + '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-antfu@2.1.2(eslint@9.0.0): + eslint-plugin-antfu@2.3.6(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.0.0 + '@antfu/utils': 0.7.10 + eslint: 9.9.1(jiti@1.21.6) - eslint-plugin-es-x@7.6.0(eslint@9.0.0): + eslint-plugin-command@0.2.3(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@eslint-community/regexpp': 4.10.0 - eslint: 9.0.0 - eslint-compat-utils: 0.5.0(eslint@9.0.0) + '@es-joy/jsdoccomment': 0.43.1 + eslint: 9.9.1(jiti@1.21.6) - eslint-plugin-eslint-comments@3.2.0(eslint@9.0.0): + eslint-plugin-es-x@7.8.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - escape-string-regexp: 1.0.5 - eslint: 9.0.0 - ignore: 5.3.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.0 + eslint: 9.9.1(jiti@1.21.6) + eslint-compat-utils: 0.5.1(eslint@9.9.1(jiti@1.21.6)) - eslint-plugin-import-x@0.5.0(eslint@9.0.0)(typescript@5.2.2): + eslint-plugin-import-x@4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4): dependencies: - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.6 doctrine: 3.0.0 - eslint: 9.0.0 + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.7.3 + get-tsconfig: 4.8.0 is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 + minimatch: 9.0.5 + semver: 7.6.3 + stable-hash: 0.0.4 + tslib: 2.7.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.0.0 + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@9.0.0) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1(jiti@1.21.6)) hasown: 2.0.2 - is-core-module: 2.13.1 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -2733,95 +2788,109 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.2.2) + '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@48.2.3(eslint@9.0.0): + eslint-plugin-jsdoc@50.2.2(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@es-joy/jsdoccomment': 0.42.0 + '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.4 + debug: 4.3.6 escape-string-regexp: 4.0.0 - eslint: 9.0.0 - esquery: 1.5.0 - is-builtin-module: 3.2.1 - semver: 7.6.0 + eslint: 9.9.1(jiti@1.21.6) + espree: 10.1.0 + esquery: 1.6.0 + parse-imports: 2.1.1 + semver: 7.6.3 spdx-expression-parse: 4.0.0 + synckit: 0.9.1 transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.15.1(eslint@9.0.0): + eslint-plugin-jsonc@2.16.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - eslint: 9.0.0 - eslint-compat-utils: 0.5.0(eslint@9.0.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + eslint: 9.9.1(jiti@1.21.6) + eslint-compat-utils: 0.5.1(eslint@9.9.1(jiti@1.21.6)) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 synckit: 0.6.2 - eslint-plugin-markdown@4.0.1(eslint@9.0.0): + eslint-plugin-markdown@5.1.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.0.0 + eslint: 9.9.1(jiti@1.21.6) mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color - eslint-plugin-n@17.2.1(eslint@9.0.0): + eslint-plugin-n@17.10.2(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - enhanced-resolve: 5.16.0 - eslint: 9.0.0 - eslint-plugin-es-x: 7.6.0(eslint@9.0.0) - get-tsconfig: 4.7.3 - globals: 14.0.0 - ignore: 5.3.1 - minimatch: 9.0.3 - semver: 7.6.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + enhanced-resolve: 5.17.1 + eslint: 9.9.1(jiti@1.21.6) + eslint-plugin-es-x: 7.8.0(eslint@9.9.1(jiti@1.21.6)) + get-tsconfig: 4.8.0 + globals: 15.9.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.6.3 - eslint-plugin-no-only-tests@3.1.0: {} + eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@2.9.0(eslint@9.0.0)(typescript@5.2.2)(vue-eslint-parser@9.4.2(eslint@9.0.0)): + eslint-plugin-perfectionist@3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.1(jiti@1.21.6))): dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 - minimatch: 9.0.3 + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) + minimatch: 10.0.1 natural-compare-lite: 1.4.0 optionalDependencies: - vue-eslint-parser: 9.4.2(eslint@9.0.0) + vue-eslint-parser: 9.4.3(eslint@9.9.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-promise@6.1.1(eslint@9.0.0): + eslint-plugin-promise@6.6.0(eslint@9.9.1(jiti@1.21.6)): + dependencies: + eslint: 9.9.1(jiti@1.21.6) + + eslint-plugin-regexp@2.6.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.0.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.0 + comment-parser: 1.4.1 + eslint: 9.9.1(jiti@1.21.6) + jsdoc-type-pratt-parser: 4.1.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + scslre: 0.3.0 - eslint-plugin-toml@0.11.0(eslint@9.0.0): + eslint-plugin-toml@0.11.1(eslint@9.9.1(jiti@1.21.6)): dependencies: - debug: 4.3.4 - eslint: 9.0.0 - eslint-compat-utils: 0.5.0(eslint@9.0.0) + debug: 4.3.6 + eslint: 9.9.1(jiti@1.21.6) + eslint-compat-utils: 0.5.1(eslint@9.9.1(jiti@1.21.6)) lodash: 4.17.21 - toml-eslint-parser: 0.9.3 + toml-eslint-parser: 0.10.0 transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@52.0.0(eslint@9.0.0): + eslint-plugin-unicorn@55.0.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@eslint/eslintrc': 2.1.4 + '@babel/helper-validator-identifier': 7.24.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) ci-info: 4.0.0 clean-regexp: 1.0.0 - core-js-compat: 3.37.0 - eslint: 9.0.0 - esquery: 1.5.0 + core-js-compat: 3.38.1 + eslint: 9.9.1(jiti@1.21.6) + esquery: 1.6.0 + globals: 15.9.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -2829,66 +2898,51 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.6.0 + semver: 7.6.3 strip-indent: 3.0.0 - transitivePeerDependencies: - - supports-color - - eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0): - dependencies: - eslint: 9.0.0 - eslint-rule-composer: 0.3.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2) - eslint-plugin-vitest@0.5.3(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2): + eslint-plugin-unused-imports@4.1.3(@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.2.2) - eslint: 9.0.0 + eslint: 9.9.1(jiti@1.21.6) optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.2.2))(eslint@9.0.0)(typescript@5.2.2) - transitivePeerDependencies: - - supports-color - - typescript + '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - eslint-plugin-vue@9.25.0(eslint@9.0.0): + eslint-plugin-vue@9.28.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - eslint: 9.0.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + eslint: 9.9.1(jiti@1.21.6) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.0.16 - semver: 7.6.0 - vue-eslint-parser: 9.4.2(eslint@9.0.0) + postcss-selector-parser: 6.1.2 + semver: 7.6.3 + vue-eslint-parser: 9.4.3(eslint@9.9.1(jiti@1.21.6)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.14.0(eslint@9.0.0): + eslint-plugin-yml@1.14.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - debug: 4.3.4 - eslint: 9.0.0 - eslint-compat-utils: 0.5.0(eslint@9.0.0) + debug: 4.3.6 + eslint: 9.9.1(jiti@1.21.6) + eslint-compat-utils: 0.5.1(eslint@9.9.1(jiti@1.21.6)) lodash: 4.17.21 natural-compare: 1.4.0 - yaml-eslint-parser: 1.2.2 + yaml-eslint-parser: 1.2.3 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.23)(eslint@9.0.0): + eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.23)(eslint@9.9.1(jiti@1.21.6)): dependencies: '@vue/compiler-sfc': 3.4.23 - eslint: 9.0.0 - - eslint-rule-composer@0.3.0: {} + eslint: 9.9.1(jiti@1.21.6) eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.0.1: + eslint-scope@8.0.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -2897,31 +2951,31 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.0.0: + eslint@9.9.1(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 3.0.2 - '@eslint/js': 9.0.0 - '@humanwhocodes/config-array': 0.12.3 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.18.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.1 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.6 escape-string-regexp: 4.0.0 - eslint-scope: 8.0.1 + eslint-scope: 8.0.2 eslint-visitor-keys: 4.0.0 - espree: 10.0.1 - esquery: 1.5.0 + espree: 10.1.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 - graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -2930,25 +2984,27 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - espree@10.0.1: + espree@10.1.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 4.0.0 espree@9.6.1: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -2962,18 +3018,6 @@ snapshots: esutils@2.0.3: {} - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - 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 - fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -2982,13 +3026,13 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fastq@1.15.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -2996,10 +3040,12 @@ snapshots: dependencies: flat-cache: 4.0.1 - fill-range@7.0.1: + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + find-up-simple@1.0.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -3010,12 +3056,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.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.1 @@ -3027,13 +3067,11 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - function-bind@1.1.1: {} - function-bind@1.1.2: {} function.prototype.name@1.1.6: @@ -3055,15 +3093,13 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - get-stream@8.0.1: {} - get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.3: + get-tsconfig@4.8.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -3075,13 +3111,14 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.3: + glob@10.4.5: dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.0 - minimatch: 9.0.3 - minipass: 7.0.3 - path-scurry: 1.10.1 + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 globals@13.24.0: dependencies: @@ -3089,18 +3126,19 @@ snapshots: globals@14.0.0: {} - globals@15.0.0: {} + globals@15.9.0: {} - globalthis@1.0.3: + globalthis@1.0.4: dependencies: define-properties: 1.2.1 + gopd: 1.0.1 globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -3130,19 +3168,13 @@ snapshots: dependencies: has-symbols: 1.0.3 - has@1.0.3: - dependencies: - function-bind: 1.1.1 - hasown@2.0.2: dependencies: function-bind: 1.1.2 hosted-git-info@2.8.9: {} - human-signals@5.0.0: {} - - ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: @@ -3188,11 +3220,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.0: - dependencies: - has: 1.0.3 - - is-core-module@2.13.1: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -3235,8 +3263,6 @@ snapshots: dependencies: call-bind: 1.0.7 - is-stream@3.0.0: {} - is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -3257,13 +3283,13 @@ snapshots: isexe@2.0.0: {} - jackspeak@2.3.0: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.19.3: {} + jiti@1.21.6: {} js-tokens@4.0.0: {} @@ -3273,6 +3299,8 @@ snapshots: jsdoc-type-pratt-parser@4.0.0: {} + jsdoc-type-pratt-parser@4.1.0: {} + jsesc@0.5.0: {} jsesc@3.0.2: {} @@ -3291,10 +3319,10 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.11.3 + acorn: 8.12.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.6.0 + semver: 7.6.3 keyv@4.5.4: dependencies: @@ -3309,8 +3337,8 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.6.1 - pkg-types: 1.1.0 + mlly: 1.7.1 + pkg-types: 1.2.0 locate-path@5.0.0: dependencies: @@ -3320,27 +3348,19 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - lodash.merge@4.6.2: {} lodash@4.17.21: {} - lru-cache@10.0.1: {} + lru-cache@10.4.3: {} - lru-cache@6.0.0: + magic-string@0.30.11: dependencies: - yallist: 4.0.0 - - magic-string@0.30.10: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 mdast-util-from-markdown@0.8.5: dependencies: - '@types/mdast': 3.0.12 + '@types/mdast': 3.0.15 mdast-util-to-string: 2.0.0 micromark: 2.11.4 parse-entities: 2.0.0 @@ -3350,26 +3370,26 @@ snapshots: mdast-util-to-string@2.0.0: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromark@2.11.4: dependencies: - debug: 4.3.4 + debug: 4.3.6 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color - micromatch@4.0.5: + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - mimic-fn@4.0.0: {} - min-indent@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -3378,20 +3398,20 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 minimist@1.2.8: {} - minipass@7.0.3: {} + minipass@7.1.2: {} - mlly@1.6.1: + mlly@1.7.1: dependencies: - acorn: 8.11.3 + acorn: 8.12.1 pathe: 1.1.2 - pkg-types: 1.1.0 - ufo: 1.5.3 + pkg-types: 1.2.0 + ufo: 1.5.4 ms@2.1.2: {} @@ -3403,24 +3423,20 @@ snapshots: natural-compare@1.4.0: {} - node-releases@2.0.14: {} + node-releases@2.0.18: {} normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.4 + resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} object-keys@1.1.1: {} @@ -3450,18 +3466,14 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 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 p-limit@2.3.0: dependencies: @@ -3471,10 +3483,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.0.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -3483,12 +3491,12 @@ snapshots: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} + + package-manager-detector@0.2.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -3504,64 +3512,63 @@ snapshots: parse-gitignore@2.0.0: {} + parse-imports@2.1.1: + dependencies: + es-module-lexer: 1.5.4 + slashes: 3.0.12 + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 path-exists@4.0.0: {} - path-exists@5.0.0: {} - path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} - path-scurry@1.10.1: + path-scurry@1.11.1: dependencies: - lru-cache: 10.0.1 - minipass: 7.0.3 + lru-cache: 10.4.3 + minipass: 7.1.2 path-type@4.0.0: {} - pathe@1.1.1: {} - pathe@1.1.2: {} - picocolors@1.0.0: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} picomatch@4.0.2: {} - pkg-types@1.1.0: + pkg-types@1.2.0: dependencies: confbox: 0.1.7 - mlly: 1.6.1 + mlly: 1.7.1 pathe: 1.1.2 pluralize@8.0.0: {} possible-typed-array-names@1.0.0: {} - postcss-selector-parser@6.0.16: + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.4.38: + postcss@8.4.44: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.1.0 source-map-js: 1.2.0 prelude-ls@1.2.1: {} - punycode@2.3.0: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -3573,11 +3580,20 @@ snapshots: read-pkg@5.2.0: dependencies: - '@types/normalize-package-data': 2.4.1 + '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + refa@0.12.1: + dependencies: + '@eslint-community/regexpp': 4.11.0 + + regexp-ast-analysis@0.7.1: + dependencies: + '@eslint-community/regexpp': 4.11.0 + refa: 0.12.1 + regexp-tree@0.1.27: {} regexp.prototype.flags@1.5.2: @@ -3597,9 +3613,9 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.4: + resolve@1.22.8: dependencies: - is-core-module: 2.13.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -3622,13 +3638,17 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 + scslre@0.3.0: + dependencies: + '@eslint-community/regexpp': 4.11.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + semver@5.7.2: {} semver@6.3.1: {} - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 + semver@7.6.3: {} set-function-length@1.2.2: dependencies: @@ -3657,7 +3677,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 signal-exit@4.1.0: {} @@ -3665,26 +3685,30 @@ snapshots: slash@3.0.0: {} + slashes@3.0.12: {} + source-map-js@1.2.0: {} spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.13 + spdx-license-ids: 3.0.20 - spdx-exceptions@2.3.0: {} + spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 spdx-expression-parse@4.0.0: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.13: {} + spdx-license-ids@3.0.20: {} + + stable-hash@0.0.4: {} string-width@4.2.3: dependencies: @@ -3727,8 +3751,6 @@ snapshots: strip-bom@3.0.0: {} - strip-final-newline@3.0.0: {} - strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -3747,25 +3769,32 @@ snapshots: synckit@0.6.2: dependencies: - tslib: 2.6.2 + tslib: 2.7.0 + + synckit@0.9.1: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.7.0 tapable@2.2.1: {} text-table@0.2.0: {} + tinyexec@0.3.0: {} + to-fast-properties@2.0.0: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - toml-eslint-parser@0.9.3: + toml-eslint-parser@0.10.0: dependencies: eslint-visitor-keys: 3.4.3 - ts-api-utils@1.3.0(typescript@5.2.2): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.2.2 + typescript: 5.5.4 tsconfig-paths@3.15.0: dependencies: @@ -3774,7 +3803,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.6.2: {} + tslib@2.7.0: {} type-check@0.4.0: dependencies: @@ -3818,9 +3847,9 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript@5.2.2: {} + typescript@5.5.4: {} - ufo@1.5.3: {} + ufo@1.5.4: {} unbox-primitive@1.0.2: dependencies: @@ -3829,24 +3858,22 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@5.26.5: + undici-types@6.19.8: optional: true - unicorn-magic@0.1.0: {} - unist-util-stringify-position@2.0.3: dependencies: - '@types/unist': 2.0.7 + '@types/unist': 2.0.11 - update-browserslist-db@1.0.13(browserslist@4.23.0): + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 util-deprecate@1.0.2: {} @@ -3855,16 +3882,16 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vue-eslint-parser@9.4.2(eslint@9.0.0): + vue-eslint-parser@9.4.3(eslint@9.9.1(jiti@1.21.6)): dependencies: - debug: 4.3.4 - eslint: 9.0.0 + debug: 4.3.6 + eslint: 9.9.1(jiti@1.21.6) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 lodash: 4.17.21 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -3888,6 +3915,8 @@ snapshots: dependencies: isexe: 2.0.0 + word-wrap@1.2.5: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -3904,22 +3933,20 @@ snapshots: y18n@5.0.8: {} - yallist@4.0.0: {} - - yaml-eslint-parser@1.2.2: + yaml-eslint-parser@1.2.3: dependencies: eslint-visitor-keys: 3.4.3 lodash: 4.17.21 - yaml: 2.2.2 + yaml: 2.5.0 - yaml@2.2.2: {} + yaml@2.5.0: {} yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -3928,9 +3955,7 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} - - zx@8.0.1: + zx@8.1.5: optionalDependencies: '@types/fs-extra': 11.0.4 - '@types/node': 20.12.7 + '@types/node': 22.5.2 diff --git a/scripts/certs.sh b/scripts/certs.sh index 7893adf74..bbe79844b 100755 --- a/scripts/certs.sh +++ b/scripts/certs.sh @@ -38,6 +38,8 @@ EOF openssl req -config "$1.cnf" -new -key "$1".key -out "$1".csr ${2:+-extensions v3_req} openssl x509 -req -in "$1.csr" -CA "$1-ca.pem" -CAkey "$1-ca.key" -CAcreateserial -out "$1.pem" -days 3650 -extfile "$1.cnf" ${2:+-extensions v3_req} + openssl pkcs12 -export -out "$1.p12" -inkey "$1.key" -in "$1.pem" -passout pass: + openssl pkcs12 -in "$1.p12" -out "$1-client.pem" -nodes -passout pass: -passin pass:"" } chain server1 localhost diff --git a/scripts/mock_test.sh b/scripts/mock_test.sh new file mode 100755 index 000000000..06e32817c --- /dev/null +++ b/scripts/mock_test.sh @@ -0,0 +1,36 @@ +#! /bin/sh + +set -x + +if [ $# -lt 2 ]; then + echo "Usage: $0 " + exit 1 +fi + +script_path="$(dirname "${BASH_SOURCE:-$0}")" +working_dir="$(realpath "$script_path/../packages" )" + +TEST_DIR="${1:?Test dir is not set}" +TEST_COMMAND="${2:?Command is not set}" + +if [ -n "$Grpc__CaCert" ]; then + export Grpc__CaCert="$working_dir/csharp/$Grpc__CaCert" +fi +if [ -n "$Grpc__ClientCert" ]; then + export Grpc__ClientCert="$working_dir/csharp/$Grpc__ClientCert" +fi +if [ -n "$Grpc__ClientKey" ]; then + export Grpc__ClientKey="$working_dir/csharp/$Grpc__ClientKey" +fi + +"$working_dir/csharp/out/ArmoniK.Api.Mock.exe" & + server_pid=$! +sleep 5 + +cd "$working_dir/$TEST_DIR" + +$TEST_COMMAND || ret=$? + +echo $server_pid +kill $server_pid +exit $ret diff --git a/scripts/update-versions.ts b/scripts/update-versions.ts index 05a55f902..01f6fd26d 100644 --- a/scripts/update-versions.ts +++ b/scripts/update-versions.ts @@ -7,6 +7,8 @@ import { csharpFiles, csharpPatternPackageVersion, csharpPatternVersion, + javaFiles, + javaPattern, jsFiles, jsPattern, } from './versions/_contants' @@ -36,3 +38,6 @@ jsFiles.forEach(_readAndReplace(jsPattern, `"version": "${version}"`)) consola.info('Updating cpp projects to ', version) cppFiles.forEach(_readAndReplace(cppPattern, `set(version ${version})`)) + +consola.info('Updating java projects to ', version) +javaFiles.forEach(_readAndReplace(javaPattern, `${version}`)) diff --git a/scripts/verify-versions.ts b/scripts/verify-versions.ts index ae7b4ef02..dc51ada28 100644 --- a/scripts/verify-versions.ts +++ b/scripts/verify-versions.ts @@ -6,6 +6,8 @@ import { csharpFiles, csharpPatternPackageVersion, csharpPatternVersion, + javaFiles, + javaPattern, jsFiles, jsPattern, } from './versions/_contants' @@ -22,6 +24,8 @@ consola.info('Finding C# projects versions') csharpFiles.forEach(_readAndFind(csharpPatternVersion, versions)) consola.info('Finding Cpp projects versions') cppFiles.forEach(_readAndFind(cppPattern, versions)) +consola.info('Finding java projects versions') +javaFiles.forEach(_readAndFind(javaPattern, versions)) const versionsArray = [...versions.values()] const uniqueVersions = [...new Set(versionsArray)] diff --git a/scripts/versions/_contants.ts b/scripts/versions/_contants.ts index 268e4bb8d..8dd403904 100644 --- a/scripts/versions/_contants.ts +++ b/scripts/versions/_contants.ts @@ -12,3 +12,6 @@ export const jsFiles = ['packages/angular/projects/aneoconsultingfr/armonik.api. export const cppPattern = /set\(version (?.*)\)/ export const cppFiles = ['packages/cpp/CMakeLists.txt'] + +export const javaPattern = /(?.*)<\/version>/ +export const javaFiles = ['packages/java/pom.xml']